SpecialX
855f35f84b
chore: merge feat/api-gateway-ai01 review docs into main
2026-07-10 16:53:08 +08:00
SpecialX
9e767b4e95
chore(api-gateway): merge review docs and update dependencies
2026-07-10 16:50:33 +08:00
SpecialX
8e91039896
docs(api-gateway): 补充完整架构问题记录与裁决核查
...
完成api-gateway模块边界确认,添加W1-W8裁决遵循情况核查与架构不一致问题梳理
汇总8项待coord仲裁的issue,包含模块契约、依赖、版本、文档等问题
2026-07-10 16:41:57 +08:00
SpecialX
c179af64a6
docs(docs): coord 完成 15 模块 issue 仲裁与基础设施同步
...
coord.md 新增 ARB-019/020/021 三章仲裁章节,修正 ARB-001。
- coord.md: 新增 ARB-019/020/021(student/parent/admin-portal 24 项)
- coord.md: 修正 ARB-001(admin P2 预留/schema 文件名/classes 数据源)
- 004 §4: 依赖图加 PBFF→DataAna+Msg
- 004 §7.2: push-gateway→Redis 软失败标注
- 004 §11.4: 错误码前缀矩阵(11 服务+i18n key)
- 004 §11.5: ActionState 信封规范(降级模式方案 B)
- matrix §1: 依赖矩阵加 PBFF 边
- matrix §2: 移除 api-gateway 为 iam gRPC 消费方
- matrix §4: admin-portal→teacher-bff
- matrix §5: 移除 /sse+鉴权头统一
- matrix §6: 错误码表补 i18n key 列
- 15 个 issue.md: 仲裁结论回写
- push-gateway_contract: 移除 /sse+鉴权头改 X-Internal-Token
- packages/contracts: 新建包 ADMIN_* 权限点常量
AI: coord
2026-07-10 16:30:51 +08:00
SpecialX
df62ffc176
Merge worktree branch merge-15-modules-to-main-5ug5xJ
2026-07-10 15:28:20 +08:00
SpecialX
88f6822473
docs: update api-gateway workline and contract based on new arbitration
...
update workline to detail full P2-P6 tasks with clear milestones and dependencies
revise contract to correct route prefix, JWKS method and dependency descriptions
clean up outdated issue content
2026-07-10 15:06:22 +08:00
SpecialX
60d7173545
docs(docs): 维护历史文档声明+workline重写为全并行模式+coord措辞修复
2026-07-10 14:13:47 +08:00
SpecialX
3852873964
docs(docs): 新增 AI 协作文档使用指南
2026-07-10 14:09:27 +08:00
SpecialX
5144ec7292
docs(docs): 更新分支策略为 17 长期分支
2026-07-10 14:07:02 +08:00
SpecialX
9ba368477d
refactor(docs): 移除 ai07 classes 合并到 core-edu,16 AI 降为 15 AI
2026-07-10 14:04:49 +08:00
SpecialX
6051f84a65
docs: 恢复分支开发模式 - AI 不切换分支,默认多AI协作,经验沉淀不标注AI身份
2026-07-10 13:46:47 +08:00
SpecialX
f15912c7ee
docs: 文档体系修正 - 模块边界强化与按需阅读架构
2026-07-10 13:33:31 +08:00
SpecialX
faaaf29f67
docs: ai 协作文档体系重构与多 ai 仲裁结果落地
...
1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md)
2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration)
3.各服务 01/02 文档补全
4.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens)
5.Proto 契约补全
6.004 架构影响地图更新
7.端口分配表
8.设计规格文档
2026-07-10 12:58:22 +08:00
SpecialX
2a2a56f541
docs: ai 协作文档体系重构与多 ai 仲裁结果落地
...
1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md)
2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration)
3.issues.md 问题记录(ISSUE-001~035)
4.各服务 01/02 文档补全
5.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens)
6.Proto 契约补全
7.004 架构影响地图更新
8.端口分配表
9.设计规格文档
2026-07-10 12:55:49 +08:00
SpecialX
db90b2e080
docs(parent-portal): ai15 阶段1+2 文档审计与补全
...
按 ai-allocation.md §3.2 接管 parent-portal,完成阶段 1+2 文档审计与补全。
修订端口(3002→4002)、所有权(ai07→ai15),补全 16 章长远架构。
AI Agent: ai15 (parent-portal remote)
Branch: docs/parent-portal-stage1-stage2-design-ai15
Coordinator: coord-ai
Predecessor: ai07
2026-07-09 18:51:10 +08:00
SpecialX
e691cd267d
docs(teacher-portal): ai07 阶段1+2 拆分到4端portal的docs目录
...
删除合并版README,按portal拆分8份文档(每端01-understanding+02-architecture-design)
teacher-portal(shell/P2)+student-portal(remote/P3)+parent-portal(remote/P4)+admin-portal(remote/P6)
AI Agent: ai07 (4 portals)
Branch: docs/portals-stage1-stage2-design-ai07
2026-07-09 18:23:27 +08:00
SpecialX
fd5b6e19ae
docs(data-ana): ai06 补充 AI Agent 身份标注(§14.7)
2026-07-09 17:30:49 +08:00
SpecialX
0a71b02e04
fix: code compliance audit and fix across all services
...
CI / quality-ts (push) Failing after 48s
CI / quality-go (push) Failing after 4s
CI / quality-proto (push) Failing after 2s
CI / deploy (push) Has been skipped
NestJS (6 services): implement @RequirePermission decorator with
SetMetadata+Reflector, register APP_GUARD globally, fix as assertions
to type guards, add explicit return types, fix import type for express,
fix /metrics implicit any, replace native Error with ApplicationError,
remove typeorm remnants, register LifecycleService.
teacher-bff: add logger, ApplicationError, GlobalErrorFilter, forward
real userId to downstream, log downstream failures, migrate health
controller to shared/health.
Go (2 services): interface to any, doc comments, CORS dev whitelist,
JWT secret fail-fast, push-gateway internal API auth, metrics and
readyz endpoints, remove dead code.
Python (2 services): lifespan return type, dev_mode to bool, data-ana
APIRouter, ai POST body model, ClickHouse async wrapping.
2026-07-09 17:28:27 +08:00
SpecialX
b53a486c6e
docs(teacher-portal): ai07 阶段1+2 模块理解确认书与架构设计文档
...
4端合并交付:理解确认书+架构设计+MF Shell/Remote架构+4端差异化对照表
AI Agent: ai07 (4 portals)
Branch: docs/teacher-portal-stage1-stage2-design-ai07
2026-07-09 17:24:58 +08:00
SpecialX
a0f6c228af
docs(push-gateway): ai01 阶段1+2 模块理解确认书与架构设计文档
...
阶段1交付:services/push-gateway/docs/01-understanding.md
- 8节:架构位置/限界上下文/契约/技术栈/阶段归属P5骨架/审计
- 审计16项差距(6高/5中/5低)
阶段2交付:services/push-gateway/docs/02-architecture-design.md
- 13节:分层图/Connection+Hub模型/Redis key/WS端点
- 双通道协议/生命周期/心跳RFC6455/多实例PubSub
- 容量目标10w+连接
AI Agent: ai01 (api-gateway/push-gateway)
Branch: main
Coordinator: coord
2026-07-09 17:22:23 +08:00
SpecialX
834e2c61fd
docs(api-gateway): ai01 阶段1+2 模块理解确认书与架构设计文档
...
阶段1交付:services/api-gateway/docs/01-understanding.md
- 8节内容:架构位置/限界上下文/契约/技术栈/阶段归属/黄金模板对齐审计
- 审计13项差距(3高:缺/metrics、/readyz stub、auth.go死代码;4中:log/slog缺失、go.mod版本不匹配、HS256待升RS256、DevMode风险;6低)
阶段2交付:services/api-gateway/docs/02-architecture-design.md
- 9节内容:内部分层图/路由表矩阵9下游/限流策略表/熔断阈值表/JWT RS256流程含JWKS缓存/CORS白名单/请求ID注入/metrics 7项指标/P0-P3实施优先级
同步更新 docs/troubleshooting/known-issues.md 工作经验日志(追加ai01条目)
AI Agent: ai01 (api-gateway/push-gateway)
Branch: main
Coordinator: coord
2026-07-09 17:21:03 +08:00
SpecialX
f1e466a772
fix(infra): resolve NestJS dist build and Prometheus target issues
...
CI / quality-go (push) Failing after 5s
CI / quality-proto (push) Failing after 3s
CI / deploy (push) Has been skipped
CI / quality-ts (push) Failing after 50s
NestJS: disable incremental in 6 services tsconfig.json to fix dist
not emitted when nest-cli deleteOutDir conflicts with tsc tsbuildinfo.
classes/iam: import HealthModule in AppModule to fix /healthz 404.
classes: rewrite HealthController to Drizzle getDb from TypeORM DI.
teacher-bff: add /metrics endpoint for Prometheus scraping.
infra: add node/mysql/redis exporters to observability profile.
mysql-exporter v0.15.1 uses command-line flags not DATA_SOURCE_NAME.
prometheus: enable web.enable-lifecycle for hot reload.
2026-07-09 15:12:15 +08:00
SpecialX
b72c8d81d4
fix(infra): use conditional docker template to avoid Health key error
...
CI / quality-ts (push) Failing after 1m0s
CI / quality-go (push) Failing after 4s
CI / quality-proto (push) Failing after 2s
CI / deploy (push) Has been skipped
Use {{if .State.Health}}...{{end}} instead of direct {{.State.Health.Status}}.
2026-07-09 13:58:55 +08:00
SpecialX
959d58a95d
docs: add full-stack runbook and one-click scripts
...
CI / quality-ts (push) Failing after 51s
CI / quality-go (push) Failing after 3s
CI / quality-proto (push) Failing after 2s
CI / deploy (push) Has been skipped
start-all/stop-all/health-check/test-cdc PowerShell scripts.
Compatible with PowerShell 5.1 (ASCII only, no emoji).
2026-07-09 13:47:46 +08:00
SpecialX
d8dab70406
feat(infra): add OTel auto-instrumentations across all services
...
CI / quality-proto (push) Failing after 2s
CI / deploy (push) Has been skipped
CI / quality-ts (push) Failing after 1m11s
CI / quality-go (push) Failing after 5s
NestJS 6 services use getNodeAutoInstrumentations().
Python 2 services use FastAPIInstrumentor. Go 2 services use otelgin.
v0.6.2-otel
2026-07-09 13:25:46 +08:00
SpecialX
1f901c5b20
feat(data-ana): implement complete CDC pipeline MySQL to ClickHouse
...
Debezium + Kafka + aiokafka consumer with table routing.
E2E verified: MySQL INSERT to ClickHouse upsert.
v0.6.1-cdc
2026-07-09 13:02:59 +08:00
SpecialX
958b17c9d8
feat(infra): p6 hardening - metrics collection and registry mirror
...
- 4 services add collectDefaultMetrics for process metrics
- docker-compose.yml images prefixed with docker.m.daocloud.io
- Prometheus v0.51.0 (nonexistent) fixed to v2.51.0
- Grafana port remapped 3000 to 3030 to avoid teacher-portal conflict
- ClickHouse edu_analytics database initialized
- known-issues.md documents 7 new P6 scenario-to-rule mappings
2026-07-09 12:29:36 +08:00
SpecialX
566060fade
feat(infra): p6 hardening - observability and deploy compose
...
- 5 NestJS services add /metrics endpoint via app.getHttpAdapter()
- prometheus.yml scales to 8 services with rule_files and alertmanager
- monitoring compose replaces blackbox with Loki+Promtail
- Grafana datasource adds Loki
- docker-compose.deploy.yml scales to 11 services
- deploy.env.example completes Neo4j/ES/ClickHouse/LLM vars
- teacher-bff adds health.controller
- CI removes continue-on-error on lint step
- teacher-portal lint script changed to eslint src
2026-07-09 10:21:06 +08:00
SpecialX
3ca654619f
chore(infra): 配置ESLint 9 flat config并恢复lint-staged集成
...
- 新增 eslint.config.js(ESLint 9 flat config 格式)
- 安装 @eslint/js + typescript-eslint + eslint-config-prettier
- 6 个 TS 服务 lint 脚本:eslint src --ext .ts → eslint src
- lint-staged 恢复 eslint --fix
- .gitignore 忽略 docker-compose.minimal.override.yml
- known-issues.md 新增 P6 硬化条目
2026-07-09 09:14:44 +08:00
SpecialX
a70a74207e
feat(ai): 完善AI网关服务并添加LLM降级模式
...
config.py 加openai_api_key/base_url/dev_mode
新建llm_client.py httpx异步调OpenAI REST API
main.py 业务路由加/ai前缀+降级模式+readyz端点
Gateway添加/notifications和/ai路由
docs: known-issues记录P5三服务经验
2026-07-09 09:09:27 +08:00
SpecialX
dfb6d2bfc1
feat(push-gateway): 修复WebSocket并发写竞争并添加DEV_MODE鉴权
...
hub.go 重写用send chan+单写协程模式避免并发写竞争
handler.go 加DEV_MODE dev-token支持+broadcast端点
config.go 加DevMode/RedisURL字段
2026-07-09 09:09:13 +08:00
SpecialX
416e1bc0b2
feat(msg): 修复通知服务并添加ES降级与Push Gateway推送
...
database.ts 导出db常量替代getDb()函数
env.ts JWT_SECRET/ES_URL改optional加DEV_MODE/PUSH_GATEWAY_URL
elasticsearch.ts ES降级: ES_URL未设置时esClient=null
notifications.service.ts 加createBatch+分页查询+Push Gateway推送调用
新建msg-init.sql创建2张表
2026-07-09 09:08:57 +08:00
SpecialX
421edd8a41
feat(data-ana): 完善学情诊断服务并添加ClickHouse降级模式
...
config.py ClickHouse连接改可选+加DEV_MODE/kafka_brokers
clickhouse_client.py 降级模式: host为空时返回None
main.py 端点先查ClickHouse降级返回骨架数据+新增errorbook
新增clickhouse-init.sql创建宽表和错题表
Gateway添加/analytics路由
2026-07-09 08:58:39 +08:00
SpecialX
5f18821302
feat(api-gateway): 添加content服务代理路由
...
main.go添加textbooks/chapters/knowledge-points/questions四组路由
config.go新增ContentServiceURL字段
docs: known-issues记录P4 content端到端验证经验
2026-07-09 08:52:30 +08:00
SpecialX
921fe82771
feat(content): 修复服务并添加chapters/knowledge-points/questions模块
...
- database.ts 导出db常量替代getDb()函数
- env.ts JWT_SECRET/ES_URL/NEO4J_URL改optional加DEV_MODE
- neo4j.ts driver惰性创建+try/catch+connectionTimeout:3000
- health/lifecycle改用Drizzle原生查询
- textbooks.schema修复integer到int+导出NewTextbook类型
- 新建chapters/knowledge-points/questions三模块CRUD
- knowledge-points含Neo4j前置依赖图非阻塞查询
- content-init.sql创建4张表
端到端验证: textbooks/chapters/knowledge-points/questions全CRUD通过
2026-07-09 08:52:15 +08:00
SpecialX
033c083619
feat(teacher-portal): 添加考试作业成绩查询页面
...
新增 3 个页面位于 (app) 路由组:
/exams - 按班级查询考试列表
/homework - 按班级查询作业列表
/grades - 按考试查询成绩列表
通过 BFF 聚合端点获取 core-edu 数据
遵循纸面设计风格: serif 标题/mono ID/设计令牌
2026-07-09 08:07:02 +08:00
SpecialX
6215f4e21f
feat(teacher-bff): 添加考试作业成绩聚合端点
...
env.ts 新增 CoreEduServiceUrl
teacher.service 新增 listExamsByClass/listHomeworkByClass/listGradesByExam 三个聚合方法
teacher.controller 暴露 3 个 GET 端点:
/teacher/classes/:classId/exams
/teacher/classes/:classId/homework
/teacher/exams/:examId/grades
验证: 3 端点全部 200 返回 core-edu 数据
2026-07-09 08:05:24 +08:00
SpecialX
beb204c00f
docs(docs): 记录 P3 core-edu 端到端验证经验与场景映射
...
core-edu 段新增 6 行: datetime 转换/Kafka 非阻塞/相对 import/身份头/健康检查/Outbox 验证
api-gateway 段新增 3 行: 路由注册位置/多服务路由扩展/DEV_MODE 环境变量
经验日志追加 2026-07-09 P3 条目
2026-07-09 08:04:00 +08:00
SpecialX
4f539b50dd
feat(api-gateway): 添加 core-edu 服务代理路由
...
main.go 新增 exams/homework/grades 三组路由(无尾斜杠+通配符)
config.go 新增 CoreEduServiceURL 字段默认 localhost:3004
删除死代码 internal/routing/routing.go(从未被 main 引用)
验证: GET /exams/class/:id 200, POST /exams 201, 链路全通
2026-07-09 08:02:39 +08:00
SpecialX
4533da6484
feat(core-edu): 修复服务启动并打通考试作业成绩端到端链路
...
database.ts 导出 db 常量替代 getDb()
env.ts JWT_SECRET 改 optional 并新增 DEV_MODE
kafka.ts connectKafka 加 try/catch 不阻塞启动
main.ts 去全局前缀 connectKafka 改非阻塞
app.module 移除未用模块加 HealthModule
controller 路由去前缀去 UseGuards 从 x-user-id 读身份
service datetime ISO 字符串转 Date 修复 drizzle 错误
修正相对 import 路径
health/lifecycle 改用 Drizzle 原生查询
新增 core-edu-init.sql 初始化 4 张表
端到端验证: exams/homework/grades 全部 201/200
Outbox 事件正确写入 core_edu_outbox 表
2026-07-09 08:02:22 +08:00
SpecialX
2c7afe59ef
feat(teacher-portal): 实现登录页侧边栏路由组与真实JWT集成
...
- lib/auth.ts: localStorage token 存储 + login/logout
- app/login: 登录表单页
- components/AppShell: 视口驱动侧边栏 + 路由保护
- app/(app)/layout: 路由组布局套 AppShell
- app/(app)/dashboard: 聚合统计卡片页
- app/(app)/classes: 迁移 CRUD 改用真实 JWT
- app/page.tsx: 根路径重定向
- known-issues.md: 记录 P2 经验
2026-07-09 00:58:42 +08:00
SpecialX
b2c2f6e567
feat(teacher-bff): 添加视口聚合端点 + 修复身份头读取
...
- 新增 GET /teacher/viewports 聚合 IAM 视口配置
- 修复 controller 从 x-user-id header 读取身份(替代 AuthenticatedRequest)
- 添加 zod + @types/express 依赖
2026-07-09 00:49:24 +08:00
SpecialX
a2f0ca26ae
feat(iam): 实现 RBAC + 视口配置 + DataScope
...
- 新增 iam_role_viewports 表(4 层视口模型:L1 导航/L2 路由/L3 组件/L4 数据)
- iam_users 添加 data_scope 字段(6 级:self/class/grade/school/district/all)
- JWT payload 包含 dataScope,注册时自动分配 teacher 角色
- 新增 getEffectivePermissions(多角色权限去重)
- 新增 getUserViewports(按权限过滤视口)
- 新增 RbacController:GET /iam/viewports, /iam/permissions/effective, /iam/roles, /iam/permissions
- 添加 7 个权限点 + 12 条角色权限映射 + 7 个视口种子数据
2026-07-09 00:35:34 +08:00
SpecialX
5759b09c9f
feat(api-gateway): 添加公开路径白名单
...
register/login/refresh 无需 JWT 即可通过 Gateway,修复之前无 token 无法注册登录的死锁问题。
2026-07-09 00:30:35 +08:00
SpecialX
d92cdda727
docs(docs): 记录 P1 端到端验证经验与 IAM 场景映射
...
在 2.3 iam 分区补充 5 条场景映射(ESM DI/Drizzle API/健康检查/Gateway 身份传递/DEV_MODE 登录);工作经验日志追加 P1 端到端验证完整记录。
2026-07-09 00:26:28 +08:00
SpecialX
adea22b133
chore(iam): 添加 IAM 数据库初始化脚本
...
包含 6 张 IAM 表结构与 teacher/admin 默认角色种子数据,用于 P1 端到端验证。
2026-07-09 00:25:58 +08:00
SpecialX
f658571726
fix(iam): 修复 TS 编译错误、ESM 依赖注入与身份头读取
...
P1 端到端验证中发现 IAM 服务存在 14 个 TS 编译错误与运行时 DI 失败:
- 移除 typeorm/ioredis/kafkajs 依赖(IAM 用 Drizzle)
- health.controller.ts 改用 db.execute(sql SELECT 1) 校验连接
- lifecycle.service.ts 简化为只关闭 Drizzle 连接池
- Drizzle API 修正:r.roles -> r.iam_roles,.in() -> inArray()
- ESM 模式下 DI 必须显式 @Inject(IamRepository)(参考 classes 黄金模板)
- iam.controller.ts 直接读 req.headers[x-user-id],不依赖未注册的 AuthMiddleware
- health.module.ts 补 .js 后缀
- package.json 补 @types/express
验证:register -> JWT -> Gateway /iam/me 200 -> /classes CRUD 200
2026-07-09 00:25:37 +08:00
SpecialX
68ddff1065
refactor(infra): 重构为 no-push 本地构建部署模式
...
CI / quality-go (push) Failing after 3s
CI / quality-proto (push) Failing after 2s
CI / quality-ts (push) Failing after 47s
CI / deploy (push) Has been skipped
- 删除 6 个分散 workflow(ci-ts/ci-go/ci-proto/ci-py/docker/deploy)
- 合并为单个 ci.yml:3 个 quality job 并行 + deploy job 串行
- 全部使用官方镜像(node:22-alpine/golang:1.22-alpine/bufbuild/buf/docker:25-git)
- deploy job 用 DooD 模式挂载 /var/run/docker.sock
- docker-compose.deploy.yml 改用 build: 替代 image:(no-push)
- 新增 docker-compose.tools.yml 一次性预拉所有 CI 镜像
- 支持 workflow_dispatch 指定 commit_sha 回滚
- 更新 project_rules §15 与 cicd-runbook.md 为 no-push 模式
- 新增设计文档 docs/superpowers/specs/2026-07-08-cicd-no-push-local-build-design.md
2026-07-08 17:12:57 +08:00
SpecialX
a1d7fcfd71
docs(docs): 新增 CICD 参考实现规范
...
CI TypeScript / quality (push) Failing after 6s
CI TypeScript / arch-scan (push) Has been skipped
CI TypeScript / docker-build (map[context:. dockerfile:apps/teacher-portal/Dockerfile name:teacher-portal]) (push) Has been skipped
CI TypeScript / docker-build (map[context:. dockerfile:services/classes/Dockerfile name:classes]) (push) Has been skipped
Docker Build & Push / build-push (map[context:. dockerfile:apps/teacher-portal/Dockerfile name:teacher-portal]) (push) Failing after 3s
Docker Build & Push / build-push (map[context:. dockerfile:services/classes/Dockerfile name:classes]) (push) Failing after 10s
Docker Build & Push / build-push (map[context:./services/api-gateway dockerfile:services/api-gateway/Dockerfile name:api-gateway]) (push) Failing after 8s
CI Go / quality (push) Failing after 1m4s
CI Go / docker-build (push) Has been skipped
- project_rules §15.7: 参考项目位置 + 关键配置点(container/runner 标签/部署方式/网络)
- cicd-runbook §10: 参考项目对照表(配置项、关键差异、修改流程、冲突处理)
- 修正 cicd-runbook runner 标签:self-hosted,deploy → ubuntu-latest
2026-07-08 16:12:45 +08:00
SpecialX
c31b3ddeba
ci(infra): workflow 参照 CICD 参考项目重构
...
- 所有需要 docker 的 job 改用 container: dockerreg.eazygame.cn/node-with-docker:22
- ci-go.yml: quality 阶段用 golang:1.22-alpine,docker-build 阶段切到 node-with-docker:22
- ci-ts.yml/docker.yml/deploy.yml: 全部加 container 配置
- 移除 setup-node/setup-go action(容器内已有 node/go 或手动安装)
- 不配置 npm 代理(runner 已全局代理)
2026-07-08 16:12:07 +08:00