# 集成测试与部署验证阶段（P7）

> 日期：2026-07-10
> 前置条件：所有模块 P2-P6 代码完成，lint/typecheck/go vet/ruff 全通过，ARB-001~022 全部已裁决
> 目标：从"代码完成"到"系统可用"，验证端到端功能链路

---

## 1. 阶段概述

15 AI 全并行开发模式下，各模块独立编码，使用 mock 桩进行本地验证。本阶段目标是**将所有模块集成到真实基础设施中，验证端到端功能链路**。

### 前置状态

| 检查项                               | 状态                        |
| ------------------------------------ | --------------------------- |
| lint（pnpm run lint）                | ✅ 全通过                   |
| typecheck（pnpm run typecheck）      | ✅ 16 包/服务全通过         |
| go vet（api-gateway + push-gateway） | ✅ 全通过                   |
| ruff check（ai + data-ana）          | ✅ 全通过                   |
| proto 契约（buf lint）               | ✅ 通过                     |
| 仲裁（ARB-001~022）                  | ✅ 95 条全部已裁决          |
| packages/contracts                   | ✅ 已建立（ADMIN_* 权限点） |

### 当前差距

- 各模块使用 mock 桩，尚未在真实 gRPC/MySQL/Redis/Kafka 环境中验证
- 服务间 gRPC 调用链路未实际跑通
- 前端与 BFF 的 GraphQL 通信未端到端验证
- Docker Compose 全量部署未验证
- 健康检查端点（/healthz + /readyz）未在容器环境验证

---

## 2. 阶段任务分解

### 批次 0：基础设施就绪

**目标**：确保 Docker Compose 全量基础设施可启动。

| 任务                                                     | 验证标准                                  |
| -------------------------------------------------------- | ----------------------------------------- |
| MySQL + Redis + Kafka + Neo4j + ClickHouse + ES 容器健康 | `docker compose up -d` 全量容器 `healthy` |
| 数据库 schema 初始化脚本                                 | 各服务 schema 迁移脚本可执行              |
| Kafka topic 创建脚本                                     | 全部 topic（ARB-013 命名）可创建          |
| Debezium CDC connector 配置                              | MySQL → Kafka CDC 链路通畅                |

### 批次 1：后端服务启动

**目标**：每个后端服务能在 Docker 环境中启动并通过健康检查。

| 服务                          | 端口 | 验证标准               |
| ----------------------------- | ---- | ---------------------- |
| api-gateway（Go）             | 8080 | /healthz 返回 200      |
| push-gateway（Go）            | 8081 | /healthz 返回 200      |
| iam（TS/gRPC 50052）          | 3001 | /healthz + gRPC 可连接 |
| classes（TS）                 | 3002 | /healthz 返回 200      |
| core-edu（TS/gRPC 50053）     | 3004 | /healthz + gRPC 可连接 |
| content（TS/gRPC 50054）      | 3005 | /healthz + gRPC 可连接 |
| msg（TS/gRPC 50056）          | 3006 | /healthz + gRPC 可连接 |
| data-ana（Python/gRPC 50055） | 3007 | /healthz + gRPC 可连接 |
| ai（Python/gRPC 50058）       | 3008 | /healthz + gRPC 可连接 |

### 批次 2：BFF 层启动

**目标**：3 个 BFF 能启动并连接下游 gRPC 服务。

| 服务                   | 端口 | 验证标准                   |
| ---------------------- | ---- | -------------------------- |
| teacher-bff（GraphQL） | 3003 | /graphql Playground 可访问 |
| student-bff（GraphQL） | 3009 | /graphql Playground 可访问 |
| parent-bff（GraphQL）  | 3010 | /graphql Playground 可访问 |

### 批次 3：前端启动

**目标**：4 个前端能启动并连接对应 BFF。

| 应用           | 端口 | 验证标准     |
| -------------- | ---- | ------------ |
| teacher-portal | 4000 | 登录页可访问 |
| student-portal | 4001 | 登录页可访问 |
| parent-portal  | 4002 | 登录页可访问 |
| admin-portal   | 4003 | 登录页可访问 |

### 批次 4：端到端功能验证

**目标**：核心业务链路端到端跑通。

| 链路     | 涉及服务                                | 验证标准                       |
| -------- | --------------------------------------- | ------------------------------ |
| 教师登录 | teacher-portal → api-gateway → iam      | 获取 JWT → 侧边栏按角色渲染    |
| 创建考试 | teacher-portal → teacher-bff → core-edu | 考试落库 → Outbox 事件 → Kafka |
| 学生作答 | student-portal → student-bff → core-edu | 提交落库 → 事件发布            |
| 教师批改 | teacher-portal → teacher-bff → core-edu | 成绩落库 → GradeReleased 事件  |
| 学情分析 | student-portal → student-bff → data-ana | ClickHouse 宽表查询 < 5s       |
| 知识图谱 | teacher-portal → teacher-bff → content  | Neo4j 查询秒级返回             |
| 消息推送 | msg → push-gateway → WebSocket          | 在线学生实时收到通知           |
| AI 辅助  | teacher-portal → teacher-bff → ai       | 流式 SSE 正常返回              |

### 批次 5：可观测性验证

**目标**：三支柱（日志 + 指标 + 链路）在集成环境中可用。

| 检查项          | 验证标准                                |
| --------------- | --------------------------------------- |
| Prometheus 抓取 | 所有服务 /metrics 端点可抓取            |
| Grafana 面板    | 核心指标面板可查看                      |
| 全链路 trace    | 一个请求的 trace 可在 Jaeger 追踪全链路 |
| 结构化日志      | 所有服务日志 JSON 格式输出到 stdout     |

---

## 3. 执行策略

### 并行度

```
批次 0（基础设施） → 批次 1（后端） → 批次 2（BFF） → 批次 3（前端） → 批次 4（E2E） → 批次 5（可观测性）
     |                  |                  |                  |                  |                  |
     独立              9 服务并行         3 BFF 并行         4 前端并行         8 链路并行         独立
```

### 问题修复策略

- 发现的问题记录到 `docs/troubleshooting/known-issues.md` 对应模块分区
- 跨模块问题通过 `docs/architecture/issues/objections/[模块名]_issue.md` 提请仲裁
- coord 负责仲裁，开发 AI 在各自分支修复

### 风险点

| 风险                          | 影响             | 缓解策略                     |
| ----------------------------- | ---------------- | ---------------------------- |
| gRPC proto 生成代码版本不一致 | 服务间调用失败   | 批次 1 统一 `buf generate`   |
| MySQL schema 冲突             | 数据库初始化失败 | 批次 0 逐服务验证 schema     |
| Kafka topic 命名不一致        | 消费者收不到事件 | 对照 ARB-013 统一检查        |
| 端口冲突                      | 服务无法启动     | 对照 port-allocation.md 检查 |
| 前端 MF 配置不匹配            | 微前端加载失败   | 批次 3 验证 MF config        |

---

## 4. 验收标准

| 验收项                  | 标准                                   |
| ----------------------- | -------------------------------------- |
| Docker Compose 全量启动 | 所有容器 `healthy`                     |
| 核心链路 E2E            | 8 条核心链路全部跑通                   |
| 健康检查                | 所有服务 /healthz + /readyz 返回 200   |
| 可观测性                | Prometheus + Grafana + Jaeger 数据可见 |
| 错误处理                | ActionState 信封格式一致               |
| 权限校验                | 未授权请求返回 401/403                 |

---

## 5. 退出标准

- 全量 Docker Compose 启动成功
- 8 条核心业务链路端到端跑通
- 三支柱可观测性可用
- 无阻塞性 bug
- 打 tag `v0.6.0-integration`
