From 313bae87bf039209ad85bddc6fb85b235f98f4ee Mon Sep 17 00:00:00 2001
From: SpecialX <47072643+wangxiner55@users.noreply.github.com>
Date: Tue, 7 Jul 2026 21:34:15 +0800
Subject: [PATCH] docs(spec): add enterprise microservices architecture upgrade
design
---
...croservices-architecture-upgrade-design.md | 1289 +++++++++++++++++
1 file changed, 1289 insertions(+)
create mode 100644 docs/superpowers/specs/2026-07-07-enterprise-microservices-architecture-upgrade-design.md
diff --git a/docs/superpowers/specs/2026-07-07-enterprise-microservices-architecture-upgrade-design.md b/docs/superpowers/specs/2026-07-07-enterprise-microservices-architecture-upgrade-design.md
new file mode 100644
index 0000000..b5f9e26
--- /dev/null
+++ b/docs/superpowers/specs/2026-07-07-enterprise-microservices-architecture-upgrade-design.md
@@ -0,0 +1,1289 @@
+# 企业级微服务架构升级设计
+
+> 日期: 2026-07-07
+> 状态: 已批准(待书面审阅)
+> 范围: 基于 0010_architecture.md 蓝图,将现有 Next.js 单体应用升级为 DDD+EDA+CQRS 微服务架构
+> 实施策略: 方案 A(基础设施优先)+ 黄金模板服务驱动
+> 团队: 1 人 + AI 辅助
+> 周期: 12-18 个月,分 6 阶段(P1-P6)
+> 仓库: 全新独立 Git 仓库(next-edu-cloud),与现有 e:\Desktop\CICD 仓库分离
+
+---
+
+## 1. 背景与目标
+
+### 1.1 现状
+
+**现有项目**(e:\Desktop\CICD):
+
+- 单 Next.js 16 应用 + 严格三层模块化架构(app → modules → shared)
+- 35 业务模块、1030 源文件、54 数据库表、61 权限点、6 系统角色
+- 已完成企业级规范化(P0 权限治理 + P1 工具链 + P2 配置升级)
+- 文档体系成熟:004 架构设计文档 + arch.db 元数据库 + 35 模块 README + known-issues 索引
+
+**0010 蓝图**(理想架构):
+
+- DDD + EDA + CQRS + 异构微服务云原生架构
+- 面向百万级 DAU、多端、全校同时交卷场景
+- 6+ 领域微服务、Kafka 事件总线、异构存储(MySQL/ClickHouse/Neo4j/ES)、Push Gateway、Service Mesh
+
+### 1.2 升级意图
+
+用户选择**完整微服务重构**(非选择性借鉴),以 0010 蓝图为终态目标,12-18 个月内分阶段实施。新架构独立于现有 Next.js 项目,从零开始构建。
+
+### 1.3 核心约束
+
+| 维度 | 约束 |
+| -------- | ------------------------------------------------------------------ |
+| 团队 | 1 人 + AI 辅助生成大部分代码 |
+| 周期 | 12-18 个月,分 6 阶段 |
+| 仓库 | 全新独立 Git 仓库,与现有 Next.js 仓库分离 |
+| 基础设施 | 微服务基础设施先用 Docker Desktop 本地构建 |
+| 技术栈 | 异构:Go(网关/长连接)+ Python(AI/分析)+ TypeScript(业务服务) |
+| 文档纪律 | 与现有项目等价:架构文档 + 模块文档 + 经验文档 + arch.db 查询 |
+| Git 管理 | 严格分支策略、Conventional Commits、模块管理 |
+| 数据策略 | 全新 DDD 限界上下文 schema,不迁移旧 schema,不共享数据库 |
+
+### 1.4 目标
+
+- 终态:实现 0010 蓝图的完整微服务架构
+- 过程:每阶段有可独立验证的交付物,逐步深入
+- 质量:企业级文档纪律、契约先行、CI 强制、可观测先行
+- 风险控制:黄金模板服务驱动,避免分布式复杂度一次性爆发
+
+---
+
+## 2. 总体架构与阶段总览
+
+### 2.1 目标系统终态架构
+
+```mermaid
+graph TB
+ subgraph Client["多端访问层"]
+ MF[Micro-Frontends
Teacher/Student/Parent/Admin
Module Federation]
+ end
+
+ subgraph Edge["边缘与网关层"]
+ GW[API Gateway
Go: 鉴权/限流/路由]
+ BFF_T[Teacher BFF
TS: GraphQL+DataLoader]
+ BFF_S[Student BFF
TS: GraphQL]
+ BFF_P[Parent BFF
TS: GraphQL]
+ end
+
+ subgraph Services["领域微服务层"]
+ IAM[IAM 服务
TS/NestJS]
+ CoreEdu[CoreEdu 服务
TS/NestJS]
+ Content[Content 服务
TS/NestJS+Neo4j]
+ DataAna[DataAna 服务
Python: 学情分析]
+ Msg[Msg 服务
TS/NestJS]
+ AI[AI 网关
Python: Prompt 管理]
+ Push[Push Gateway
Go: 长连接]
+ end
+
+ subgraph Bus["事件总线"]
+ Kafka[(Kafka
领域事件+CDC)]
+ end
+
+ subgraph Storage["异构存储"]
+ MySQL[(MySQL/TiDB
关系型主库)]
+ Redis[(Redis Cluster
缓存/锁/PubSub)]
+ CH[(ClickHouse
分析宽表)]
+ Neo4j[(Neo4j
知识图谱)]
+ ES[(Elasticsearch
全文检索)]
+ end
+
+ subgraph Infra["基础设施"]
+ CDC[Debezium CDC]
+ Temporal[Temporal
工作流编排]
+ Conf[配置中心
Consul/Nacos]
+ Mesh[Service Mesh
Istio]
+ end
+
+ MF --> GW
+ GW --> BFF_T & BFF_S & BFF_P
+ BFF_T & BFF_S & BFF_P --> Services
+ Services --> MySQL
+ Services --> Redis
+ Content --> Neo4j
+ DataAna --> CH
+ Services -- Outbox --> Kafka
+ MySQL -- binlog --> CDC --> Kafka
+ Kafka --> DataAna
+ Kafka --> Push
+ Kafka --> ES
+```
+
+### 2.2 服务语言分配
+
+| 服务 | 语言 | 框架 | 选型理由 |
+| ----------------------------- | ---------- | ------------------------- | ------------------------------ |
+| API Gateway | Go | Gin/Echo | 高并发网关性能 |
+| Push Gateway | Go | net/http + gorilla | 十万级长连接 |
+| IAM / CoreEdu / Content / Msg | TypeScript | NestJS | 业务逻辑 + 类型安全 + DDD 友好 |
+| DataAna 服务 | Python | FastAPI + ClickHouse | 数据分析生态 |
+| AI 网关 | Python | FastAPI | LLM SDK 生态 |
+| BFF × 3 | TypeScript | GraphQL Yoga + DataLoader | 前端聚合 |
+
+### 2.3 角色可扩展性设计(三层解耦模型)
+
+将"角色"拆成三个独立维度,角色只是配置载体,支持未来扩展(教导主任、教研组长、宿管等):
+
+```mermaid
+graph LR
+ subgraph Role["角色层(可动态扩展)"]
+ R1[admin]
+ R2[teacher]
+ R3[student]
+ R4[parent]
+ R5[grade_head
年级主任]
+ R6[teaching_head
教研组长]
+ R7[...未来角色]
+ end
+
+ subgraph Perm["权限层(resource:action)"]
+ P1[exam:create]
+ P2[exam:read]
+ P3[...N 个权限点]
+ end
+
+ subgraph View["视口层(UI 可见性配置)"]
+ V1[L1 导航
侧边栏菜单项]
+ V2[L2 路由
可访问路由]
+ V3[L3 组件
页面内组件可见性]
+ V4[L4 数据
DataScope 行级过滤]
+ end
+
+ Role -.->|"多对多
RolePermission 表"| Perm
+ Role -.->|"多对多
RoleViewport 表"| View
+ Perm -.->|"权限推导视口
permission→viewport 映射"| View
+```
+
+**关键决策**:视口既可独立配置(RoleViewport 表),也可由权限推导(permission → viewport 默认映射)。新角色只需配置权限集,视口自动推导;需要差异化时再显式配置视口。
+
+**视口四层模型**:
+
+| 层级 | 含义 | 配置载体 | 示例 |
+| ------- | ---------------- | ------------------------------------ | -------------------------------------- |
+| L1 导航 | 侧边栏菜单项 | `navigation_config` 表 | 教导主任看到"全校成绩分析"菜单 |
+| L2 路由 | 可访问路由 | `route_permission` 表 + Gateway 校验 | 教导主任可访问 `/admin/grade-analysis` |
+| L3 组件 | 页面内组件可见性 | `usePermission().hasPermission()` | 教导主任看到"导出全校报表"按钮 |
+| L4 数据 | 数据行级过滤 | `DataScope` 枚举 | 教导主任 DataScope=`grade_managed` |
+
+**BFF 划分决策**:按"使用场景域"分 4 个稳定 BFF,新角色映射到最接近的场景域 + 通过权限/视口差异化:
+
+- Teacher BFF(教学场景:教师/教导主任/教研组长共用)
+- Student BFF(学习场景)
+- Parent BFF(家长场景)
+- Admin BFF(管理场景)
+
+**微前端划分决策**:按场景域分 4 个稳定 portal,内部通过 `viewports` 配置渲染差异化 UI:
+
+- teacher-portal / student-portal / parent-app / admin-console
+
+### 2.4 六阶段里程碑总览
+
+| 阶段 | 周期 | 核心交付 | 退出标准 |
+| ---------------- | ------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| **P1 地基** | M1-M3 | 仓库骨架 + Docker 全量 infra + API Gateway 骨架 + 契约层 + CI/CD + 文档体系 + classes 域黄金模板服务 | classes 域 CRUD 端到端跑通 + 全横切关注点落地 + 30 分钟可复制新服务 |
+| **P2 身份** | M4-M6 | IAM 服务 + Teacher BFF(GraphQL) + 微前端骨架 | 教师可登录并看到空白 Dashboard |
+| **P3 核心教学** | M7-M10 | CoreEdu 服务 + Outbox 模式 + 考试/作业/成绩域 | 教师创建考试→学生作答→教师批改→成绩统计 全链路 |
+| **P4 内容+分析** | M11-M13 | Content 服务(Neo4j,CRUD only) + DataAna(Python+CH) + CDC 链路 | 知识图谱查询 + 学情诊断宽表 5s 内返回 |
+| **P5 沟通+AI** | M14-M16 | Msg 服务 + Push Gateway + AI 网关 + ES 题库检索 | 全校广播推送 + AI 辅助出题 + 题库检索 < 200ms |
+| **P6 硬化** | M17-M18 | Service Mesh + 全链路可观测 + 生产硬化 | 单服务可独立扩缩容 + 99.9% 可用性 |
+
+### 2.5 新仓库目录结构
+
+```
+next-edu-cloud/ # 新独立仓库
+├─ .github/workflows/ # CI/CD(每服务独立 workflow)
+├─ docs/
+│ ├─ architecture/
+│ │ ├─ 0010_architecture.md # 从旧仓库迁移的理想蓝图
+│ │ ├─ 004_architecture_impact_map.md # 架构设计意图(多服务版)
+│ │ ├─ roadmap/ # 长远规划
+│ │ └─ audit/ # 架构审查报告
+│ ├─ modules/ # 各服务 README(每个服务一份)
+│ ├─ standards/ # 编码规范(按语言分)
+│ ├─ troubleshooting/ # known-issues 索引
+│ └─ superpowers/specs/ # 设计 spec
+├─ packages/ # 共享包
+│ ├─ shared-types/ # TS 共享类型(protobuf 生成)
+│ ├─ shared-proto/ # protobuf 契约源
+│ └─ shared-go/ # Go 共享库
+├─ services/ # 领域微服务
+│ ├─ api-gateway/ # Go
+│ ├─ push-gateway/ # Go
+│ ├─ iam/ # TS/NestJS
+│ ├─ core-edu/ # TS/NestJS
+│ ├─ content/ # TS/NestJS
+│ ├─ data-ana/ # Python/FastAPI
+│ ├─ messaging/ # TS/NestJS
+│ └─ ai-gateway/ # Python/FastAPI
+├─ bff/ # BFF 层
+│ ├─ teacher-bff/
+│ ├─ student-bff/
+│ └─ parent-bff/
+├─ apps/ # 微前端应用
+│ ├─ teacher-portal/
+│ ├─ student-portal/
+│ ├─ parent-app/
+│ └─ admin-console/
+├─ infra/ # 基础设施编排
+│ ├─ docker-compose.yml # 本地全量 infra
+│ ├─ docker-compose.minimal.yml # 最小开发集
+│ └─ k8s/ # K8s 清单(P6 阶段)
+├─ scripts/ # 工具脚本
+│ ├─ arch-scan/ # arch.db 扫描器(多语言)
+│ └─ arch-query/ # arch.db 查询
+├─ arch.db # 架构元数据库(多语言扩展)
+├─ package.json # monorepo 根(pnpm workspace)
+├─ pnpm-workspace.yaml
+├─ go.work # Go workspace
+└─ pyproject.toml # Python workspace(uv/poetry)
+```
+
+### 2.6 与现有 Next.js 项目的关系
+
+| 维度 | 关系 |
+| -------- | ------------------------------------------------------------------------------------------------------------- |
+| 代码 | **不迁移**。新仓库从零开始,旧 schema 仅作领域知识参考 |
+| 数据库 | **不共享**。新系统全新 schema,未来通过 CDC/ETL 迁移数据 |
+| 文档体系 | **移植并扩展**:004 模板、arch.db 扫描器、模块 README 模板、known-issues 索引格式全部迁移,扩展支持 Go/Python |
+| 项目规则 | **移植 project_rules.md** 并按多语言/微服务特性调整 |
+| Git 管理 | 新独立仓库,独立分支策略,但提交规范(Conventional Commits)延续 |
+
+---
+
+## 3. P1 地基阶段详细设计
+
+### 3.1 P1 范围与不做清单
+
+**做**:
+
+- 新仓库初始化(独立 git 仓库,独立分支策略)
+- 多语言 monorepo 骨架(pnpm + go.work + pyproject)
+- Docker Compose 全量基础设施(一次性到位)
+- API Gateway 骨架(Go,仅路由+鉴权转发,不做限流高级功能)
+- 契约层(protobuf + OpenAPI,先定义 classes 域契约)
+- CI/CD 骨架(每语言独立 workflow,lint+test+build)
+- 文档体系移植(004 模板 / arch.db 多语言扫描器 / 模块 README 模板 / project_rules 多语言版)
+- **classes 域黄金模板服务**(完整实现所有横切关注点,作为后续服务复制范本)
+
+**不做**(P1 严格禁止,避免膨胀):
+
+- 不实现 IAM 服务(P1 用 Gateway 内置最小鉴权,P2 才建 IAM 服务)
+- 不实现 Outbox/Kafka/CDC(P1 classes 域直接 CRUD MySQL)
+- 不实现 BFF/微前端完整骨架(P1 用单一测试页验证链路)
+- 不实现 ClickHouse/Neo4j/ES 的业务逻辑(仅 docker-compose 起容器备用)
+- 不实现任何复杂业务逻辑(classes 域仅 CRUD)
+- 不预实现阶段特有模式(Outbox/CDC/长连接在对应阶段实现后回写黄金模板)
+
+### 3.2 P1 目录骨架(实际创建)
+
+```
+next-edu-cloud/
+├─ .github/workflows/
+│ ├─ ci-go.yml # Go: lint+test+build
+│ ├─ ci-ts.yml # TS: lint+tsc+test
+│ └─ ci-py.yml # Python: ruff+pytest
+├─ docs/
+│ ├─ architecture/
+│ │ ├─ 0010_architecture.md # 迁移自旧仓库
+│ │ ├─ 004_architecture_impact_map.md # 架构设计意图(多服务版)
+│ │ ├─ roadmap/ # tech-debt / decoupling / pending-features
+│ │ └─ audit/
+│ ├─ modules/ # 各服务 README
+│ ├─ standards/
+│ │ ├─ coding-standards.md # 多语言编码规范
+│ │ └─ git-workflow.md # 分支策略 + Conventional Commits
+│ ├─ troubleshooting/known-issues.md
+│ └─ superpowers/specs/
+├─ packages/
+│ ├─ shared-proto/ # protobuf 契约源 + 生成脚本
+│ │ ├─ proto/classes.proto
+│ │ └─ buf.yaml
+│ ├─ shared-ts/ # TS 共享类型(从 proto 生成)
+│ └─ shared-go/ # Go 共享库
+├─ services/
+│ ├─ api-gateway/ # Go: 仅路由+鉴权转发
+│ │ ├─ main.go
+│ │ ├─ go.mod
+│ │ └─ Dockerfile
+│ └─ classes/ # TS/NestJS 黄金模板服务
+│ ├─ src/
+│ │ ├─ main.ts # NestJS bootstrap + OTel 初始化
+│ │ ├─ app.module.ts
+│ │ ├─ config/
+│ │ │ ├─ config.ts # 三层配置加载
+│ │ │ └─ env.ts # @t3-oss/env-nextjs 校验
+│ │ ├─ middleware/
+│ │ │ ├─ auth.middleware.ts # JWT 公钥校验
+│ │ │ ├─ permission.guard.ts # requirePermission()
+│ │ │ └─ data-scope.interceptor.ts # DataScope 注入
+│ │ ├─ classes/
+│ │ │ ├─ classes.controller.ts # gRPC handler
+│ │ │ ├─ classes.service.ts # 业务编排
+│ │ │ ├─ classes.repository.ts # 数据访问(Drizzle)
+│ │ │ └─ classes.dto.ts # 从 proto 生成
+│ │ ├─ shared/
+│ │ │ ├─ errors/ # ApplicationError 基类 + 子类
+│ │ │ ├─ observability/ # logger/metrics/tracer
+│ │ │ └─ i18n/ # 错误码 → key 映射
+│ │ └─ generated/ # proto 生成代码
+│ ├─ test/
+│ │ ├─ unit/ # vitest 单元测试
+│ │ ├─ integration/ # Testcontainers 集成测试
+│ │ ├─ contract/ # Pact 契约测试
+│ │ └─ e2e/ # Playwright E2E
+│ ├─ Dockerfile # 多阶段构建模板
+│ ├─ nest-cli.json
+│ ├─ tsconfig.json
+│ ├─ vitest.config.ts
+│ └─ README.md # 8 章模板(黄金范本)
+├─ bff/
+│ └─ teacher-bff/ # P1 仅占位,P2 实现
+├─ apps/
+│ └─ teacher-portal/ # P1 仅一个测试页验证链路
+│ ├─ package.json
+│ └─ src/
+├─ infra/
+│ ├─ docker-compose.yml # 全量基础设施
+│ ├─ docker-compose.minimal.yml # 仅 MySQL+Redis(开发最小集)
+│ └─ init-sql/ # MySQL 初始化脚本
+├─ scripts/
+│ ├─ arch-scan/ # 多语言 arch.db 扫描器
+│ └─ arch-query/
+├─ .commitlintrc.js
+├─ .husky/
+├─ arch.db
+├─ package.json # pnpm workspace 根
+├─ pnpm-workspace.yaml
+├─ go.work
+├─ pyproject.toml
+├─ LICENSE
+├─ CHANGELOG.md
+├─ CONTRIBUTING.md
+├─ SECURITY.md
+└─ .env.example
+```
+
+### 3.3 Docker Compose 全量基础设施
+
+一次性起齐所有容器,业务逻辑按阶段填入。最小开发集(`docker-compose.minimal.yml`)仅 mysql + redis,用于日常开发快速启动。
+
+P1 仅启动 MySQL + Redis;P3 加 Kafka + Zookeeper;P4 加 Debezium + ClickHouse + Neo4j;P5 加 Elasticsearch;P6 加 Consul + Istio。每服务配置 `mem_limit` 避免单服务吃满内存。
+
+### 3.4 契约层设计
+
+P1 用 **protobuf 作为服务间契约的唯一源**,OpenAPI 作为 BFF 对前端的契约:
+
+```
+packages/shared-proto/
+├─ proto/
+│ ├─ classes.proto # P1 唯一契约
+│ ├─ iam.proto # P2 占位
+│ └─ core_edu.proto # P3 占位
+├─ buf.yaml # buf 工具配置(lint+breaking change 检测)
+├─ buf.gen.yaml # 代码生成配置(TS+Go+Python 三端)
+└─ README.md
+```
+
+**契约先行的硬约束**:
+
+- 任何服务间通信必须先改 proto,CI 检测 breaking change 阻止违规合并
+- proto 版本化:包名带版本(`classes.v1`、`classes.v2`),新旧版本共存
+- 生成三端代码:`shared-ts/`(NestJS 用)、`shared-go/`(Gateway 用)、`services/*/generated/`(Python 用)
+
+### 3.5 API Gateway 骨架(Go)
+
+P1 仅实现:路由 + JWT 校验 + 转发。不做限流/熔断/灰度(P6 硬化)。
+
+**P1 鉴权**:Gateway 内置最小 JWT 校验(HS256 + 用户 ID + 角色列表),P2 由 IAM 服务接管签发(RS256)。P1 用测试 JWT 工具生成 token 验证链路。
+
+### 3.6 classes 域黄金模板服务
+
+P1 末尾用 classes 域端到端验证地基。classes 服务不再只是"验证链路",而是**完整实现所有横切关注点**,作为后续 8 个服务的复制模板:
+
+| 横切关注点 | classes 黄金模板实现 | 后续服务复用方式 |
+| ---------- | ----------------------------------------------------------------------- | ------------------------- |
+| 错误处理 | TS `ApplicationError` 基类 + 错误码 `CORE_EDU_*` | 复制基类,改错误码前缀 |
+| 可观测 | pino 结构化日志 + prom-client metrics + OTel trace | 复制 SDK 初始化代码 |
+| 安全 | JWT 公钥校验 + `requirePermission()` 中间件 + DataScope 过滤 | 复制中间件 |
+| 契约 | classes.proto + buf lint/breaking + 三端代码生成 | 复制 buf 配置,加新 proto |
+| 测试 | 单元(vitest)+ 集成(Testcontainers)+ 契约(Pact)+ E2E(Playwright) | 复制测试目录结构与配置 |
+| 文档 | 模块 README 8 章模板 + arch.db 扫描 + known-issues 条目 | 复制 README 模板 |
+| 配置 | 三层配置(env/yaml/默认值)+ `@t3-oss/env-nextjs` | 复制配置加载代码 |
+| i18n | 错误码 → i18n key 映射 | 复制映射表结构 |
+| CI/CD | Go/TS/Python 三语言 workflow 模板 | 复制 workflow,改服务名 |
+| Dockerfile | 多阶段构建模板 | 复制 Dockerfile,改入口 |
+
+**后续服务复制流程**:
+
+1. `cp -r services/classes services/iam`
+2. 改错误码前缀 `CORE_EDU → IAM`
+3. 改 proto 文件 `iam.proto`
+4. 改业务逻辑(controller/service/repository)
+5. 改 README 模块名与架构图
+6. 改 CI workflow 服务名
+7. 改 Dockerfile 入口(如需要)
+8. 运行 `npm run arch:scan` 确认 arch.db 更新
+9. 运行 `buf lint` + `buf breaking` 确认契约合规
+
+**Outbox/CDC/长连接等阶段特有模式**:在对应阶段实现后**回写黄金模板**(在 classes 服务的 README 增加章节示例),后续服务复制时即包含。
+
+### 3.7 P1 Git 管理策略
+
+**分支策略**(trunk-based 简化版,适合 1 人 + AI):
+
+```
+main # 受保护,仅通过 PR 合入,始终可发布
+├─ feature/p1-repo-init # P1 仓库初始化
+├─ feature/p1-infra-compose # Docker Compose 基础设施
+├─ feature/p1-api-gateway-skel # Gateway 骨架
+├─ feature/p1-contract-classes # classes 契约
+├─ feature/p1-classes-service # classes 黄金模板服务
+├─ feature/p1-teacher-portal # 测试页
+├─ feature/p1-docs-system # 文档体系移植
+└─ feature/p1-arch-scan-multilang # arch.db 多语言扫描器
+```
+
+- 每个 feature 分支独立 PR,CI 通过后合入 main
+- main 始终保持可运行(`docker-compose up` 可起所有 infra)
+- 每阶段末打 tag:`v0.1.0-p1`、`v0.2.0-p2`...
+- commitlint 强制 Conventional Commits(与旧项目一致)
+
+### 3.8 P1 退出标准(验收)
+
+| 维度 | 验收项 |
+| ---------- | ---------------------------------------------------------------------------------------------------- |
+| 基础设施 | `docker-compose up -d` 全量容器健康(P1 仅起 MySQL+Redis,其余容器配置就绪但不启动) |
+| 链路 | 浏览器创建班级 → MySQL 落库 → 列表显示 |
+| 横切关注点 | 全横切关注点落地:错误处理 + 可观测 + 安全 + 契约 + 测试 + 文档 + 配置 + i18n + CI + Dockerfile |
+| 契约 | `buf lint` + `buf breaking` 通过,三端代码生成成功 |
+| CI | 三语言 workflow 全绿(lint+test+build) |
+| 测试 | 单元 + 阈值集成 + 契约 + E2E 四类测试齐备,覆盖率达标(领域逻辑 ≥ 80%,Handler ≥ 60%,整体 ≥ 60%) |
+| 文档 | 004 + 2 个模块 README(api-gateway + classes)+ coding-standards + known-issues + project_rules 齐全 |
+| arch.db | `npm run arch:scan` 扫描 Go+TS 代码,`arch:query -- violations` 输出 0 |
+| 可复制性 | 新建一个空服务复制 classes 模板,30 分钟内可跑起来 |
+| Git | main 受保护,所有 feature 经 PR 合入,打 tag `v0.1.0-p1` |
+
+---
+
+## 4. P2-P6 各阶段详细设计
+
+### 4.1 P2 身份层(M4-M6)
+
+**目标**:建 IAM 服务,替换 P1 Gateway 内置最小鉴权;建首个完整 BFF(Teacher)与微前端骨架。
+
+**交付物**:
+| 组件 | 内容 |
+|------|------|
+| IAM 服务(TS/NestJS) | 认证(登录/登出/JWT/2FA)+ RBAC(角色/权限/角色-权限 CRUD)+ 视口配置(4 层模型)+ DataScope 解析 + `getEffectivePermissions(userId)` API |
+| MySQL schema | `users` / `roles` / `permissions` / `role_permissions` / `role_viewports` / `parent_student_relations` / `class_subject_teachers`(DataScope 依赖) |
+| Teacher BFF(TS/GraphQL) | GraphQL Yoga + DataLoader(防 N+1)+ 调 IAM 的 `getEffectivePermissions` 注入视口到响应 |
+| teacher-portal(微前端宿主) | Module Federation 宿主 + 路由骨架 + 侧边栏(由 `viewports.L1` 驱动渲染)+ 登录页 |
+| API Gateway | 移除内置 JWT,改调 IAM 校验;路由表扩展 `/api/v1/iam/*` |
+
+**关键技术决策**:
+
+- JWT 由 IAM 签发(RS256,非对称),Gateway 用公钥校验,无需调 IAM 即可校验签名
+- `getEffectivePermissions` 结果用 Redis 缓存(TTL 5 分钟),角色变更时主动失效
+- 视口配置存 MySQL(`role_viewports` 表),不硬编码到前端
+
+**退出标准**:教师登录 → 获取 JWT → 访问 teacher-portal → 侧边栏按 `viewports.L1` 渲染 → 看到空白 Dashboard 占位页。
+
+### 4.2 P3 核心教学层(M7-M10)
+
+**目标**:建 CoreEdu 服务,实现考试全生命周期;落地 Outbox + Kafka 事件模式。
+
+**交付物**:
+| 组件 | 内容 |
+|------|------|
+| CoreEdu 服务(TS/NestJS) | 考试/作业/成绩域 CRUD + 批改业务编排 + Outbox 事件发布 |
+| MySQL schema | `exams` / `exam_questions` / `homework_assignments` / `homework_submissions` / `homework_answers` / `grade_records` / `outbox_events` |
+| Outbox 模式 | 业务事务同写 `outbox_events` 表;后台 relay worker 投递到 Kafka |
+| Kafka | 启用业务 topic:`exam.published` / `homework.graded` / `grade.recorded` |
+| Teacher BFF 扩展 | 考试/作业/成绩的 GraphQL 查询与 mutation |
+| teacher-portal 扩展 | 考试创建/作业批改/成绩查看页面 |
+| student-portal(微前端) | 学生作答作业页面(Module Federation 子应用) |
+| Temporal | 引入但仅做 1 个工作流(考试发布编排:创建作业→通知)作为试点 |
+
+**关键技术决策**:
+
+- **不引入 Saga**:跨服务一致性用 Outbox + 最终一致性,避免 Saga 复杂度
+- **批改后联动**(沿用旧项目模式):批改完成 → 发 `homework.graded` 事件 → 各下游消费(P4 的 DataAna 消费、P5 的 Msg 消费通知)
+- Outbox relay worker 用 Go 写(轻量、高吞吐),独立服务 `services/outbox-relay/`
+- **Outbox 实现后回写黄金模板**
+
+**退出标准**:教师创建考试 → 发布 → 学生作答提交 → 教师批改 → 事件发到 Kafka → 成绩统计更新(CoreEdu 内部消费自己事件做统计)→ 全链路可观测(trace 追踪)。
+
+### 4.3 P4 内容与分析层(M11-M13)
+
+**目标**:建 Content 服务(Neo4j 知识图谱)+ DataAna 服务(Python+ClickHouse);落地 CDC 链路。
+
+**交付物**:
+| 组件 | 内容 |
+|------|------|
+| Content 服务(TS/NestJS) | 教材/章节/知识点 CRUD(**仅 CRUD,不实现检索**)+ 知识图谱查询(调 Neo4j)+ 题库 CRUD(**不实现检索**) |
+| MySQL schema | `textbooks` / `chapters` / `knowledge_points` / `questions` |
+| Neo4j 数据 | 知识点前置依赖图(从 MySQL `knowledge_points` 同步) |
+| DataAna 服务(Python/FastAPI) | 学情诊断 API + 错题本 API + 消费 Kafka 构建宽表 |
+| ClickHouse | `student_dashboard_view` 宽表(由 DataAna 消费 Kafka 填充) |
+| CDC 链路 | Debezium 监听 MySQL binlog → Kafka(`mysql.cdc.*` topic)→ DataAna 消费写 ClickHouse |
+| BFF 扩展 | Teacher BFF 加知识图谱查询;Student BFF 加学情诊断查询(降级查 MySQL 主库 + 升级查 CH 宽表) |
+
+**关键技术决策**:
+
+- **题库检索延后到 P5**:P4 Content 服务题库只做 CRUD,P5 引入 ES 直接实现检索,避免 MySQL FULLTEXT → ES 迁移成本
+- **双轨读策略**:实时性要求高的查 MySQL 主库(如刚提交的作业成绩),聚合统计查 ClickHouse 宽表(延迟 1-5s 可接受)
+- **Neo4j 写入**:Content 服务写 MySQL 同时发事件,独立 worker 消费事件同步 Neo4j(避免双写不一致)
+- **CDC 实现后回写黄金模板**
+
+**退出标准**:教师查看知识图谱前置依赖(Neo4j 秒级返回)→ 学生查看学情诊断(ClickHouse 宽表 5s 内返回)→ CDC 链路延迟 < 5s。
+
+### 4.4 P5 沟通与 AI 层(M14-M16)
+
+**目标**:建 Msg 服务 + Push Gateway + AI 网关;全文检索迁 ES。
+
+**交付物**:
+| 组件 | 内容 |
+|------|------|
+| Msg 服务(TS/NestJS) | 会话/消息 CRUD + 调 Push Gateway 推送 + 通知偏好 |
+| Push Gateway(Go) | WebSocket 长连接管理 + 消费 Kafka 广播 + Redis PubSub 跨实例同步 |
+| AI 网关(Python/FastAPI) | LLM Provider 适配(OpenAI/Anthropic)+ Prompt 模板管理 + 流式 SSE + 用量计费 |
+| ES | 题库全文检索(从 MySQL 同步)+ 全局搜索 API |
+| Notifications 模块 | 沿用旧项目 dispatcher 模式,多渠道(站内/SMS/邮件/微信) |
+| BFF/前端扩展 | Teacher BFF 加 AI 辅助出题 mutation;teacher-portal 加 SSE 流式 AI 对话 |
+
+**关键技术决策**:
+
+- **Push Gateway 用 Go**:单节点支撑 10w+ 连接,业务服务只需发 Kafka 消息
+- **AI 网关用 Python**:LLM SDK 生态(langchain/litellm)成熟,Prompt 版本管理友好
+- **离线消息**:Push Gateway 仅推在线用户,离线消息存 MySQL,上线时拉取
+- **流式 SSE**:AI 网关 → BFF → 前端,三层透传,BFF 不缓冲
+- **长连接模式实现后回写黄金模板**
+
+**退出标准**:教师发广播通知 → 全在线学生实时收到(Push Gateway)→ AI 辅助出题流式返回 → 题库全文检索 < 200ms。
+
+### 4.5 P6 硬化层(M17-M18)
+
+**目标**:生产硬化,达到可部署状态。
+
+**交付物**:
+| 组件 | 内容 |
+|------|------|
+| Service Mesh | Istio 服务网格(mTLS + 流量治理 + 可观测) |
+| 配置中心 | Consul 接入,配置热更新(限流阈值、功能开关) |
+| 全链路可观测 | OpenTelemetry + Jaeger(trace)+ Prometheus(metrics)+ Loki(logs) |
+| 限流/熔断 | Gateway 层限流(令牌桶)+ 服务间熔断(Envoy) |
+| 灰度发布 | Istio 流量拆分(金丝雀) |
+| K8s 部署 | 每服务 K8s manifest + HPA 自动扩缩容 |
+| 生产 CI/CD | Git tag 触发镜像构建 + 滚动部署 |
+| 灾备 | MySQL 主从 + Redis 哨兵 + Kafka 多副本 |
+
+**降级方案**:若 P6 时间紧张,Service Mesh 可降级为 K8s 原生 Service + Ingress,Istio 延后。
+
+**退出标准**:单服务可独立扩缩容(HPA 生效)→ 全链路 trace 可追 → 模拟单服务宕机不影响核心链路 → 99.9% 可用性压测通过。
+
+### 4.6 阶段依赖与并行机会
+
+```mermaid
+graph LR
+ P1[P1 地基] --> P2[P2 身份]
+ P2 --> P3[P3 核心教学]
+ P3 --> P4[P4 内容分析]
+ P3 --> P5[P5 沟通AI]
+ P4 --> P6[P6 硬化]
+ P5 --> P6
+```
+
+**并行机会**:P4 与 P5 理论上可并行(都依赖 P3 的事件),但 1 人项目建议串行避免上下文切换。
+
+### 4.7 跨阶段不变约束
+
+每阶段都必须遵守:
+
+- 契约先行(先改 proto,后写实现)
+- 文档同步(004 + 模块 README + arch.db + known-issues 实时更新)
+- CI 全绿才能合入 main
+- 每阶段末打 tag
+- Server/Handler 接口必须权限校验
+- 单文件行数遵循语言规范(TS ≤ 500/800/1000,Go ≤ 800,Python ≤ 800)
+
+---
+
+## 5. 跨阶段横切关注点
+
+### 5.1 错误处理与响应规范
+
+#### 5.1.1 错误分类体系
+
+```mermaid
+graph TB
+ subgraph Domain["领域错误(业务可预期)"]
+ ValErr[ValidationError
400]
+ NotFound[NotFoundError
404]
+ PermErr[PermissionDeniedError
403]
+ Conflict[ConflictError
409]
+ BizErr[BusinessError
400]
+ end
+
+ subgraph Infra["基础设施错误(非预期)"]
+ DBErr[DatabaseError
500]
+ UpstreamErr[UpstreamServiceError
502]
+ TimeoutErr[TimeoutError
504]
+ InternalErr[InternalError
500]
+ end
+
+ subgraph Contract["契约错误"]
+ ProtoErr[ContractViolationError
500]
+ SerialErr[SerializationError
400]
+ end
+```
+
+**统一错误基类**(每语言一份,从 proto 生成):
+
+- TS:`ApplicationError` 基类 + 子类
+- Go:`AppError` struct + 错误码常量
+- Python:`AppError` 异常基类 + 子类
+
+**错误码规范**:`{服务前缀}_{错误类型}_{资源}`,如 `IAM_PERM_USER`、`CORE_EDU_VAL_EXAM`。错误码在 proto 中定义,三端共享。
+
+#### 5.1.2 响应信封(统一跨服务)
+
+所有 HTTP/GraphQL/gRPC 响应统一信封:
+
+```typescript
+interface Result {
+ success: boolean
+ data?: T
+ error?: {
+ code: string // IAM_PERM_USER
+ message: string // 用户可读消息(i18n key)
+ details?: unknown // 字段级错误详情
+ traceId: string // 链路追踪 ID
+ }
+}
+```
+
+- gRPC 用 `google.rpc.Status` + `details` 承载业务错误
+- HTTP/Gateway 层做 gRPC Status → HTTP 状态码映射
+- BFF/GraphQL 用 `union` 类型表达错误
+
+### 5.2 可观测性三支柱
+
+P1 即建立基础,每阶段强化:
+
+| 支柱 | P1 基础 | P6 硬化 |
+| ----------- | ---------------------------------------------------- | ---------------------------- |
+| **Logs** | 结构化 JSON 日志(pino/winston/zap)+ `traceId` 注入 | Loki 集中查询 + 日志保留策略 |
+| **Metrics** | Prometheus client 暴露 `/metrics`(QPS/延迟/错误率) | Grafana 仪表盘 + 告警规则 |
+| **Traces** | OpenTelemetry SDK 注入 trace(Gateway→服务→DB) | Jaeger 全链路追踪 + 采样策略 |
+
+**P1 最小可观测集**(不引入完整栈,但 SDK 注入到位):
+
+- 每服务结构化日志,含 `traceId`/`spanId`/`userId`/`service`
+- 每服务暴露 `/metrics` endpoint
+- OpenTelemetry SDK 初始化,trace 上下文跨服务传播(W3C TraceContext header)
+
+**P6 引入完整后端**:Loki + Grafana + Jaeger + Prometheus,通过 docker-compose 起齐。
+
+### 5.3 安全架构
+
+#### 5.3.1 认证链路
+
+```mermaid
+sequenceDiagram
+ participant C as Client
+ participant GW as API Gateway
+ participant IAM as IAM 服务
+ participant Svc as 业务服务
+ participant DB as MySQL
+
+ C->>IAM: 登录(credentials + 2FA)
+ IAM->>DB: 验证密码 + 2FA
+ IAM->>DB: 查角色 + 权限 + 视口
+ IAM->>IAM: 签发 JWT(RS256)
+ IAM-->>C: JWT + refreshToken
+
+ C->>GW: 请求 + JWT
+ GW->>GW: 公钥验签 JWT
+ GW->>GW: 检查路由权限位图
+ alt 权限不足
+ GW-->>C: 403
+ else 通过
+ GW->>Svc: 转发 + 注入 x-user-context
+ Svc->>Svc: requirePermission(perm)
+ Svc->>DB: 执行(带 DataScope 过滤)
+ end
+```
+
+**关键安全决策**:
+
+- JWT 用 RS256(非对称),IAM 私钥签发,Gateway/服务用公钥校验,无需调 IAM
+- JWT payload:`{ userId, roles, permissions(bitmap), dataScope, exp }`
+- Token TTL:access 15min / refresh 7day,refresh 用 Redis 黑名单失效
+- 破坏性操作独立权限点(如 `AUDIT_LOG_PURGE` ≠ `AUDIT_LOG_READ`,沿用旧项目规则)
+
+#### 5.3.2 数据范围过滤(DataScope)
+
+沿用旧项目 6 级 DataScope,扩展为 IAM 服务统一解析:
+
+| 类型 | 适用角色 | 数据范围 |
+| --------------- | --------------------- | -------- |
+| `all` | admin | 全部 |
+| `grade_managed` | grade_head / 教导主任 | 管辖年级 |
+| `class_taught` | teacher / 教研组长 | 所教班级 |
+| `class_members` | student | 所在班级 |
+| `children` | parent | 关联孩子 |
+| `owned` | 所有角色 | 自己创建 |
+
+DataScope 由 IAM 解析后注入 JWT,业务服务读取后下推到 SQL WHERE 条件。
+
+#### 5.3.3 其他安全约束
+
+- 服务间通信:P1-P5 用明文 gRPC(内网信任),P6 引入 mTLS
+- 环境变量:用 `@t3-oss/env-nextjs`(TS)+ `viper`(Go)+ `pydantic-settings`(Python)校验
+- 密钥管理:P1-P5 用 `.env` + docker secrets,P6 引入 Vault
+- SQL 注入:ORM 参数化查询(Drizzle/GORM/SQLAlchemy),禁止字符串拼接
+- XSS:微前端用 React 默认转义 + CSP header
+- 速率限制:P1 Gateway 基础限流,P6 引入 Envoy 全局限流
+
+### 5.4 测试策略
+
+#### 5.4.1 测试金字塔
+
+```mermaid
+graph TB
+ subgraph E2E["E2E 测试(< 10%)"]
+ Playwright[Playwright
关键用户旅程]
+ end
+ subgraph Integ["集成测试(30%)"]
+ Contract[契约测试
Pact + proto]
+ Service[服务集成
Testcontainers]
+ end
+ subgraph Unit["单元测试(60%)"]
+ Domain[领域逻辑
纯函数]
+ Handler[Handler/Controller]
+ end
+
+ Unit --> Integ --> E2E
+```
+
+#### 5.4.2 各阶段测试要求
+
+| 阶段 | 单元测试 | 集成测试 | E2E |
+| ---- | --------------------------- | ---------------------- | -------------- |
+| P1 | arch-scan 工具链 | classes 切片契约测试 | 浏览器创建班级 |
+| P2 | IAM 权限解析逻辑 | IAM→Gateway 契约 | 登录流程 |
+| P3 | 批改业务逻辑 + Outbox relay | CoreEdu→Kafka 事件契约 | 考试全生命周期 |
+| P4 | 知识图谱查询 + 学情分析 | CDC 链路验证 | 学情诊断展示 |
+| P5 | Push 连接管理 + AI Prompt | Msg→Push 事件契约 | 广播 + AI 对话 |
+| P6 | - | 全链路压测 | 灾备演练 |
+
+#### 5.4.3 覆盖率门槛
+
+| 层级 | 覆盖率要求 |
+| ----------------------- | ---------- |
+| 领域逻辑(纯函数) | ≥ 80% |
+| 服务 Handler/Controller | ≥ 60% |
+| 基础设施代码 | ≥ 40% |
+| 整体 | ≥ 60% |
+
+CI 在 lint → test 后强制检查覆盖率,低于门槛阻断合并。
+
+#### 5.4.4 契约测试(关键)
+
+服务间通信用 proto 契约,**契约测试是集成测试核心**:
+
+- `packages/shared-proto/` 用 `buf breaking` 检测 breaking change
+- 消费端驱动契约测试(Pact):消费端定义期望,提供端验证
+- P3 起每事件类型有契约测试(`homework.graded` 事件的 schema 验证)
+
+### 5.5 i18n 策略
+
+沿用旧项目 next-intl 模式,扩展到多服务:
+
+- 前端:next-intl(微前端共享翻译资源包)
+- 后端错误消息:错误码 → i18n key 映射,前端翻译
+- BFF/服务不返回翻译后文本,返回 i18n key + 参数
+
+### 5.6 配置管理
+
+**三层配置**:
+
+1. **环境变量**(`.env` / docker secrets):基础设施连接、密钥
+2. **配置文件**(`config/{env}.yaml`):业务参数(限流阈值、功能开关静态默认)
+3. **配置中心**(Consul,P6 启用):运行时热更新参数
+
+每服务启动时合并三层:默认值 < 配置文件 < 环境变量 < 配置中心(P6)。
+
+---
+
+## 6. 文档体系与 arch.db 多语言扩展
+
+### 6.1 文档体系全景
+
+```mermaid
+graph TB
+ subgraph Design["架构设计文档(设计意图)"]
+ Doc004[004_architecture_impact_map.md
多服务版架构设计意图]
+ Doc0010[0010_architecture.md
理想蓝图(迁移)]
+ end
+
+ subgraph Code["代码结构文档(arch.db)"]
+ ArchDB[arch.db
多语言代码元数据]
+ ArchScan[arch-scan
TS+Go+Python 扫描器]
+ ArchQuery[arch-query
违规检测/依赖查询]
+ end
+
+ subgraph Module["模块文档(服务级)"]
+ ModuleReadme[docs/modules/{service}/README.md
8 章模板]
+ end
+
+ subgraph Experience["经验文档"]
+ KnownIssues[known-issues.md
索引式场景→技术映射]
+ WorkLog[工作经验日志
50 条上限]
+ end
+
+ subgraph Standards["规范文档"]
+ Coding[coding-standards.md
多语言编码规范]
+ GitWF[git-workflow.md
分支/提交规范]
+ ProjectRules[project_rules.md
AI 工作强制流程]
+ end
+
+ subgraph Planning["规划文档"]
+ Roadmap[roadmap/
tech-debt/decoupling/pending]
+ Specs[superpowers/specs/
设计 spec]
+ end
+
+ Design --> Code
+ Code --> Module
+ Module --> Experience
+ Standards --> Code
+ Planning --> Design
+```
+
+**文档分层原则**(与旧项目一致):
+
+- **设计意图**(004)与**代码现状**(arch.db)分离互补
+- **模块文档**(README)是服务级入口
+- **经验文档**(known-issues)是索引式速查
+- **规范文档**强制 AI 与人类工作流程
+
+### 6.2 004 架构设计文档(多服务版)
+
+移植旧 004 模板,扩展为多服务架构。目录结构:
+
+```
+004_architecture_impact_map.md
+├─ 1. 项目概览(系统边界 + 规模指标)
+├─ 2. 技术栈选型(按语言分节:Go/TS/Python)
+├─ 3. 分层架构(Client → Edge → Service → Bus → Storage → Infra)
+├─ 4. 服务依赖全景图(mermaid + 依赖深度统计)
+├─ 5. 认证与权限架构(IAM + RS256 JWT + 视口 4 层模型 + DataScope)
+├─ 6. 数据访问与缓存架构(CQRS + Outbox + CDC + 双轨读)
+├─ 7. 事件驱动架构(Kafka topic 清单 + 事件 schema 约定)
+├─ 8. 跨服务协作机制(gRPC 契约 + Outbox 事件 + Temporal 编排)
+├─ 9. 核心业务流程(考试全生命周期等,跨服务 sequence diagram)
+├─ 10. 可观测性架构(Logs/Metrics/Traces 三支柱)
+├─ 11. API 与实时通信(Gateway 路由 + SSE + Push Gateway)
+├─ 12. 架构约束与设计原则(多语言版硬性约束)
+├─ 13. 架构决策记录(ADR)
+└─ 14. 附录(arch.db 查询入口 + 关键参数影响链)
+```
+
+**与旧 004 的差异**:
+
+- 第 3 章从"三层架构"扩展为"六层架构"(Client/Edge/Service/Bus/Storage/Infra)
+- 新增第 7 章"事件驱动架构"(旧项目无此章)
+- 第 8 章从"跨模块协作"扩展为"跨服务协作"(含 gRPC 契约 + Temporal 编排)
+- 新增第 10 章"可观测性架构"
+
+### 6.3 模块 README 8 章模板(多服务版)
+
+沿用旧项目 8 章模板,适配微服务特性。每个服务一份 README:
+
+```
+docs/modules/{service}/README.md
+├─ 1. 模块职责(一句话 + 边界)
+├─ 2. 技术栈(语言/框架/依赖)
+├─ 3. 架构图(mermaid graph TB:服务内部组件)
+├─ 4. 核心流程图(mermaid sequenceDiagram:关键业务流程)
+├─ 5. 对外契约(proto 文件 + gRPC 方法清单 + 事件 topic)
+├─ 6. 依赖关系(上游依赖服务 + 下游被依赖 + 数据库/中间件)
+├─ 7. 架构约束(服务特有约束 + 横切关注点落地方式)
+└─ 8. 架构决策(服务特有 ADR + 黄金模板复用清单)
+```
+
+**黄金模板服务(classes)README 是范本**,后续服务复制后修改第 1/3/4/5/6 章,第 2/7/8 章大部分复用。
+
+### 6.4 arch.db 多语言扩展(关键改造)
+
+旧 arch-scan 仅支持 TS。新扫描器扩展支持 Go + Python,统一写入 arch.db。
+
+#### 6.4.1 arch.db schema 扩展
+
+```sql
+-- 新增 language 字段
+ALTER TABLE symbols ADD COLUMN language TEXT; -- 'ts' | 'go' | 'python'
+ALTER TABLE modules ADD COLUMN language TEXT;
+
+-- 新增 service 字段(微服务标识)
+ALTER TABLE modules ADD COLUMN service TEXT; -- 'api-gateway' | 'iam' | 'core-edu' | ...
+
+-- 新增 contract 字段(proto 契约)
+CREATE TABLE contracts (
+ id INTEGER PRIMARY KEY,
+ proto_file TEXT,
+ service_name TEXT,
+ method_name TEXT,
+ request_type TEXT,
+ response_type TEXT,
+ breaking_change BOOLEAN DEFAULT 0
+);
+
+-- 新增 event 字段(Kafka 事件)
+CREATE TABLE events (
+ id INTEGER PRIMARY KEY,
+ topic TEXT,
+ event_type TEXT, -- 'domain' | 'cdc'
+ producer_service TEXT,
+ consumer_services TEXT, -- JSON array
+ schema_proto TEXT
+);
+```
+
+#### 6.4.2 多语言扫描器架构
+
+```
+scripts/arch-scan/
+├─ scanner.ts # 主入口(协调三语言扫描)
+├─ scanners/
+│ ├─ ts-scanner.ts # TS 扫描(沿用旧版,ts-morph)
+│ ├─ go-scanner.ts # Go 扫描(tree-sitter-go)
+│ └─ py-scanner.ts # Python 扫描(tree-sitter-python)
+├─ proto-scanner.ts # proto 契约扫描(buf)
+├─ query.ts # 查询命令(沿用旧版,扩展新表)
+└─ arch.db # 统一元数据库
+```
+
+**Go 扫描方案**:用 `tree-sitter-go`(Node.js 绑定)解析 Go AST,提取函数/方法/类型/接口/import。
+**Python 扫描方案**:用 `tree-sitter-python` 提取函数/类/方法/import。
+
+#### 6.4.3 查询命令扩展
+
+```bash
+# 沿用旧命令
+npm run arch:scan # 全量扫描
+npm run arch:query -- sql "" # 自定义 SQL
+npm run arch:query -- module # 模块依赖
+npm run arch:query -- violations # 架构违规
+
+# 新增命令
+npm run arch:query -- service # 服务级依赖
+npm run arch:query -- contracts # proto 契约清单
+npm run arch:query -- breaking-changes # 契约 breaking change 检测
+npm run arch:query -- events # Kafka 事件清单
+npm run arch:query -- event-flow # 事件生产者→消费者链路
+npm run arch:query -- cross-lang-deps # 跨语言调用(如 Gateway 调 TS 服务)
+```
+
+#### 6.4.4 架构违规检测规则(多语言版)
+
+| 违规类型 | 检测方式 | 适用语言 |
+| -------------------------------- | ------------------------------------ | ----------------------------------- |
+| 服务间直连数据库(绕过对方 API) | 扫描 import + DB 连接配置 | TS/Go/Python |
+| 契约 breaking change 未升级版本 | buf breaking + arch.db 比对 | proto |
+| 事件 schema 不一致 | proto 扫描 vs 事件生产者/消费者 | proto |
+| 跨服务循环依赖 | 服务依赖图环检测 | 全部 |
+| 单文件超长 | 行数统计 | TS≤500/800/1000, Go≤800, Python≤800 |
+| Server/Handler 缺权限校验 | 扫描 requirePermission 装饰器/中间件 | TS/Go/Python |
+| 硬编码密钥/密码 | 正则扫描 | 全部 |
+| 跨语言类型不一致 | proto 生成类型 vs 实际使用 | TS/Go/Python |
+
+### 6.5 project_rules.md(多语言版)
+
+移植旧 project_rules.md,扩展多语言/微服务规则:
+
+```
+project_rules.md
+├─ 1. 架构图优先规则(arch.db 先行)
+├─ 2. arch.db 元数据库规则(多语言扫描)
+├─ 3. 编码规范(TS/Go/Python 分节)
+│ ├─ 3.1 代码质量规则(行数/错误处理/日志)
+│ ├─ 3.2 架构分层规则(服务边界/gRPC 契约)
+│ ├─ 3.3 服务标准结构(黄金模板复制)
+│ ├─ 3.4 TypeScript 规则(沿用旧版)
+│ ├─ 3.5 Go 规则(新增:error 处理/接口设计/包结构)
+│ ├─ 3.6 Python 规则(新增:类型注解/FastAPI 规范)
+│ ├─ 3.7 命名规范(多语言)
+│ ├─ 3.8 契约规范(proto 先行/buf 校验)
+│ └─ 3.9 安全规范(JWT/DataScope/SQL 注入)
+├─ 4. 提交规范(Conventional Commits + 多语言 scope)
+├─ 5. 问题记录规则(known-issues 索引式)
+└─ 6. AI 工作强制流程(多语言版上下文加载/执行/经验沉淀)
+```
+
+### 6.6 known-issues.md(多语言索引)
+
+沿用旧项目索引式格式,扩展多语言/微服务分区:
+
+```
+known-issues.md
+├─ 全局经验
+│ ├─ Next.js 配置与运行时(旧项目迁移)
+│ ├─ Go 服务开发(新增)
+│ ├─ Python 服务开发(新增)
+│ ├─ Docker Compose 本地基础设施(新增)
+│ ├─ Kafka 事件总线(新增)
+│ ├─ gRPC 契约管理(新增)
+│ └─ 多语言 arch.db 扫描(新增)
+├─ 模块经验
+│ ├─ api-gateway(Go)
+│ ├─ iam(TS)
+│ ├─ classes(TS,黄金模板)
+│ ├─ ...
+└─ 工作经验日志(50 条上限,按时间倒序)
+```
+
+### 6.7 文档同步强制流程(与旧项目等价)
+
+**改码必同步图**(强制):
+
+1. 修改源码后运行 `npm run arch:scan` 更新 arch.db
+2. 若架构设计意图变化,更新 004
+3. 若服务接口/事件变化,更新模块 README 第 5 章
+4. 若发现新"场景→技术"映射,更新 known-issues
+5. 若新加横切关注点模式,回写黄金模板
+
+**需要同步的场景**(扩展多语言):
+
+- 新增/删除/重命名导出函数、组件、Hook、类型(TS/Go/Python)
+- 修改函数签名(参数、返回类型)
+- 修改权限点或角色-权限映射
+- 新增/删除数据库表
+- 新增/删除 gRPC 方法或 proto message
+- 新增/删除 Kafka topic 或事件类型
+- 修改服务间依赖关系
+- 新增服务
+
+### 6.8 P1 文档交付清单
+
+P1 阶段必须交付的文档(黄金模板范本):
+
+| 文档 | 状态 | 来源 |
+| ------------------------------------------------------------------------------- | --------------------- | --------------------- |
+| `004_architecture_impact_map.md` | 多服务版骨架(14 章) | 旧 004 扩展 |
+| `0010_architecture.md` | 迁移自旧仓库 | 直接复制 |
+| `docs/modules/api-gateway/README.md` | 8 章完整 | 黄金范本(Go) |
+| `docs/modules/classes/README.md` | 8 章完整 | 黄金范本(TS) |
+| `docs/standards/coding-standards.md` | 多语言版 | 旧规范扩展 |
+| `docs/standards/git-workflow.md` | 分支策略 + commitlint | 旧 CONTRIBUTING 扩展 |
+| `docs/troubleshooting/known-issues.md` | 索引式骨架 | 旧模板扩展 |
+| `project_rules.md` | 多语言版 | 旧 project_rules 扩展 |
+| `arch.db` | 多语言扫描器 | 旧 arch-scan 扩展 |
+| `LICENSE` / `CHANGELOG.md` / `CONTRIBUTING.md` / `SECURITY.md` / `.env.example` | 大仓标配 | 旧项目已有 |
+
+---
+
+## 7. 技术风险与缓解策略
+
+### 7.1 人员风险
+
+#### R1: 1 人瓶颈(高风险)
+
+**表现**:单点故障(生病/倦怠/上下文丢失),18 个月周期长,知识遗忘风险。
+
+**缓解**:
+
+- **文档即记忆**:004 + 模块 README + known-issues 工作日志必须实时更新,AI 可从文档恢复上下文
+- **小里程碑**:每 2-4 周一个可验证交付物,避免长周期失焦
+- **黄金模板**:复制而非重写,降低单服务工作量
+- **arch.db 即上下文**:每次开工先 `arch:scan` + `arch:query`,AI 快速恢复全局认知
+- **分支策略**:feature 分支短生命周期(< 1 周),避免长期分支合并冲突
+
+#### R2: AI 生成质量(中风险)
+
+**表现**:多语言生成质量参差(Go/Python 可能弱于 TS),跨语言类型不一致,幻觉 API。
+
+**缓解**:
+
+- **契约先行强制**:proto 定义唯一源,AI 生成代码必须基于 proto,CI 用 buf breaking 拦截
+- **黄金模板约束**:AI 复制模板而非自由生成,降低幻觉空间
+- **每语言单独验证**:Go/Python 代码生成后必须 `go vet` / `ruff` + 单元测试通过
+- **arch:scan 验证**:每次 AI 生成后跑 `arch:query -- violations`,拦截架构违规
+- **小步生成**:单次 AI 生成不超过一个服务的一个模块,便于 review
+
+### 7.2 技术风险
+
+#### R3: 多语言工具链复杂度(高风险)
+
+**表现**:3 语言 × 3 套工具链 × 3 套 CI,维护成本 3 倍。
+
+**缓解**:
+
+- **统一 monorepo 工具链**:pnpm workspace 统一入口,`package.json` scripts 封装多语言命令
+- **共享 arch.db**:统一元数据,避免三套文档体系
+- **共享契约**:proto 生成三端代码,类型一致性由工具保证
+- **CI 模板复用**:三语言 CI workflow 模板化,仅改服务名
+- **Dockerfile 模板**:多阶段构建模板复用
+- **限制依赖**:每语言限制框架数量(TS=NestJS+Drizzle,Go=Gin+GORM,Python=FastAPI+SQLAlchemy)
+
+#### R4: 分布式系统复杂度(高风险)
+
+**表现**:服务发现/负载均衡/分布式事务/链路追踪/熔断降级,1 人难以驾驭。
+
+**缓解**:
+
+- **P1-P5 单机 Docker**:不引入 K8s,docker-compose 内网信任,简化网络
+- **P6 才上 Service Mesh**:Istio 接管网络治理,业务代码无感知
+- **最终一致性优先**:Outbox + 事件,避免分布式事务(2PC/Saga)
+- **双轨读降级**:实时查主库 + 聚合查宽表,CH 故障降级查 MySQL
+- **P3 Outbox 试点**:仅 CoreEdu 用 Outbox,验证后再推广
+- **可观测先行**:P1 即注入 OTel SDK,问题可追溯
+
+#### R5: 契约管理(中风险)
+
+**表现**:proto breaking change 导致消费端故障,版本管理混乱。
+
+**缓解**:
+
+- **buf breaking CI 强制**:PR 阶段检测 breaking change,必须升版本号
+- **proto 版本化**:包名带版本(`classes.v1`、`classes.v2`),新旧版本共存
+- **契约测试(Pact)**:消费端驱动,黄金模板即包含 Pact 配置
+- **单一契约源**:所有服务间通信必须经 proto,禁止 REST/gRPC 混用
+- **事件 schema 版本化**:Kafka 事件带 `schema_version` 字段,消费端按版本处理
+
+#### R6: 数据一致性(中风险)
+
+**表现**:Outbox relay 故障导致事件丢失;CDC 延迟导致宽表数据滞后;Neo4j 与 MySQL 双写不一致。
+
+**缓解**:
+
+- **Outbox relay 高可用**:P3 单实例够用,P6 多实例 + 幂等消费
+- **CDC 延迟监控**:Debezium 暴露 lag metrics,超阈值告警
+- **双写避免**:Neo4j/ES 不直接双写,由消费 Kafka 事件同步,天然最终一致
+- **幂等消费**:所有事件消费者必须幂等(基于 event_id 去重)
+- **对账机制**:P6 引入定期对账任务(MySQL 主库 vs CH 宽表 vs Neo4j)
+
+### 7.3 范围风险
+
+#### R7: 范围蔓延(高风险)
+
+**表现**:每阶段"顺便加一点",18 个月变 24 个月。
+
+**缓解**:
+
+- **阶段退出标准硬约束**:每阶段退出标准必须全部满足才进入下一阶段
+- **不做清单**:每阶段明确定义"不做"项,记入 spec
+- **tech-debt 兜底**:发现的新需求记入 `roadmap/tech-debt.md`,不在当前阶段实现
+- **月度回顾**:每月对照 spec 检查进度,偏离超 20% 触发范围调整决策
+- **YAGNI 原则**:未明确要求的功能不做,即便"看起来很简单"
+
+#### R8: 黄金模板过重(中风险)
+
+**表现**:P1 黄金模板包含全部横切关注点,可能导致 P1 膨胀到 4-5 个月。
+
+**缓解**:
+
+- **P1 范围严控**:classes 服务仅 CRUD,不实现复杂业务逻辑
+- **横切关注点最小实现**:P1 仅实现基础版(如限流仅固定窗口,P6 才换令牌桶)
+- **可复制性验证**:P1 退出标准含"30 分钟复制跑起新服务",若不达标先优化模板再进 P2
+- **回写而非前置**:阶段特有模式(Outbox/CDC/长连接)在对应阶段实现后回写,P1 不预实现
+
+### 7.4 基础设施风险
+
+#### R9: Docker 本地资源(中风险)
+
+**表现**:全量 docker-compose(MySQL+Redis+Kafka+Zookeeper+Debezium+CH+Neo4j+ES+Temporal+Consul)内存占用可能超 16GB。
+
+**缓解**:
+
+- **最小开发集**:`docker-compose.minimal.yml` 仅 MySQL+Redis,日常开发用
+- **按阶段启服务**:P1 仅起 MySQL+Redis;P3 加 Kafka+Zookeeper;P4 加 Debezium+CH+Neo4j;P5 加 ES;P6 加 Consul+Istio
+- **资源限制**:docker-compose 每服务配置 `mem_limit`,避免单服务吃满内存
+- **云资源备选**:若本地跑不动,P4 起可考虑云上 dev 环境(腾讯云/阿里云 K8s dev 集群)
+
+#### R10: P6 生产部署(高风险)
+
+**表现**:P1-P5 本地 Docker 跑通,P6 上 K8s + Service Mesh 可能大量适配问题。
+
+**缓解**:
+
+- **P1 起容器化**:每服务从 P1 即 Dockerfile + docker-compose,避免 P6 重新容器化
+- **P3 起健康检查**:每服务暴露 `/health` + `/metrics`,K8s 探针就绪
+- **P5 起无状态化**:服务状态外置(Redis/MySQL),为 K8s 扩缩容准备
+- **P6 前置验证**:P5 末尾用 minikube 或 k3s 本地验证 K8s 清单,提前暴露问题
+- **P6 范围可裁剪**:若 P6 时间紧张,Service Mesh 可降级为 K8s 原生 Service + Ingress,Istio 延后
+
+### 7.5 风险-阶段矩阵
+
+| 风险 | P1 | P2 | P3 | P4 | P5 | P6 |
+| -------------- | --- | --- | --- | --- | --- | --- |
+| R1 1人瓶颈 | ◐ | ◐ | ● | ● | ● | ● |
+| R2 AI 质量 | ◐ | ◐ | ◐ | ◐ | ◐ | ◐ |
+| R3 多语言 | ● | ◐ | ◐ | ● | ● | ◐ |
+| R4 分布式 | ○ | ○ | ● | ● | ● | ● |
+| R5 契约 | ● | ◐ | ◐ | ◐ | ◐ | ◐ |
+| R6 一致性 | ○ | ○ | ● | ● | ◐ | ◐ |
+| R7 范围 | ◐ | ◐ | ● | ● | ● | ◐ |
+| R8 模板过重 | ● | ○ | ○ | ○ | ○ | ○ |
+| R9 Docker 资源 | ◐ | ◐ | ◐ | ● | ● | ● |
+| R10 生产部署 | ○ | ○ | ○ | ○ | ◐ | ● |
+
+图例:● 高风险 ◐ 中风险 ○ 低风险
+
+**P1 重点防控**:R8(模板过重)、R3(多语言工具链)、R5(契约管理)
+**P3-P5 重点防控**:R4(分布式复杂度)、R6(一致性)、R7(范围蔓延)
+**P6 重点防控**:R10(生产部署)、R1(1人瓶颈累积)
+
+### 7.6 风险监控机制
+
+- **每阶段开始前**:对照风险-阶段矩阵,识别本阶段高风险项,制定缓解动作
+- **每阶段末尾**:known-issues 工作日志记录新发现的风险与缓解经验
+- **月度**:检查 R7(范围蔓延),对照 spec 进度
+- **季度**:全面风险回顾,必要时调整 spec 与路线图
+
+---
+
+## 8. 验收标准
+
+### 8.1 整体验收(P6 末尾)
+
+| 维度 | 验收项 |
+| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 架构完整度 | 0010 蓝图全部组件落地(6 领域微服务[IAM/CoreEdu/Content/DataAna/Msg/AI] + 2 基础设施服务[API Gateway/Push Gateway] + 3 BFF + 4 微前端 + 5 存储 + 事件总线 + Service Mesh) |
+| 文档体系 | 004 多服务版 + 8 服务 README(含 outbox-relay)+ 多语言 project_rules + arch.db 多语言扫描 + known-issues |
+| 可观测性 | 全链路 trace + Grafana 仪表盘 + Loki 日志查询 |
+| 安全 | RS256 JWT + DataScope 6 级 + mTLS + 限流熔断 |
+| 测试 | 单元 + 集成 + 契约 + E2E 四类,覆盖率达标 |
+| 可用性 | 单服务宕机不影响核心链路,99.9% 可用性压测通过 |
+| 可扩展性 | 单服务可独立扩缩容(HPA 生效) |
+
+### 8.2 各阶段验收
+
+见第 3 节(P1)与第 4 节(P2-P6)各阶段退出标准。
+
+---
+
+## 9. 不在本次范围
+
+- **数据迁移**:旧 Next.js 项目数据迁移到新系统(通过 CDC/ETL,独立项目)
+- **旧系统下线**:新系统上线后旧系统的退役计划(独立决策)
+- **生产环境部署**:P6 仅生产硬化与 K8s 清单,实际部署目标环境(云/自建)未定
+- **用户培训**:新系统的用户培训与文档(独立项目)
+- **性能压测**:仅 P6 做 99.9% 可用性基础压测,深度性能调优独立项目
+- **安全审计**:仅实现安全架构,第三方安全审计独立项目
+
+---
+
+## 10. 实施约束
+
+- 每阶段开始前 `git commit` 一次快照(用户要求"实施前提交备份")
+- 每阶段完成后 `git commit` + `git tag`
+- 每阶段必须通过 CI(lint + test + build + arch:scan)
+- 每阶段完成后更新 `docs/troubleshooting/known-issues.md` 工作经验日志
+- 每阶段若架构意图变化,同步更新 `004_architecture_impact_map.md`
+- 全程不改 `project_rules.md` 除非有新的强制规则
+- 发现新需求一律记入 `roadmap/tech-debt.md`,不在当前阶段实现