games-development-ai/docs/agent-specs/2026-06-08-后端模块并行建设-execution.md
zizi c4e2d73300 feat(backend): Wave1 后端脊柱 5 模块 + 8 类契约 + yudao-cloud fork 接线
- game-cloud:yudao-cloud fork(裁剪至 system/infra)+ 5 业务模块 project/aigc/runtime/feed/telemetry
- 黄金模块 game-module-project + 克隆 4 脊柱模块;46 单测绿 + 41 模块集成编译绿
- contracts/:8 类契约锁定(5 API YAML + sdk-interface.d.ts + game-package.schema + events 等)
- yudao-server 接线:全局组件扫描 + @MapperScan + Flyway V1-V5(baseline-version=0)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 09:10:05 +00:00

119 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 后端模块并行建设 — 执行版Wave1 脊柱)
> 编号HJ-BUILD-001-EXEC 生成 2026-06-08 配套 review 版 `2026-06-08-后端模块并行建设-review.md`
> 决策(创始人定):**Workflow 编排 先 Wave1 脊柱 4 模块 外部依赖模块仅骨架+契约点**。
> 不变量:照抄已验证样板 `game-module-project`;契约先行;每模块验证门=编译+Service 单测;运行时/真实联调未验证须显式标注。
---
## 一、Wave1 范围(闭环脊柱 4 模块)
| 模块 | 错误码段 | Flyway 版本 | 闭环职责 | 对外接口(示例,待契约细化) | 关键依赖/对接点 |
|---|---|---|---|---|---|
| **aigc** | 1-101 | V2.0.0 | 生成("做得出"入口) | `POST /app-api/aigc/generate` 异步提交、`GET /app-api/aigc/task/{id}` 轮询 | **Dify**(契约#6 dify-workflow-io=人工闸门;产物=GamePackage契约#4)→ 写 game_version**仅骨架+对接点** |
| **runtime** | 1-102 | V3.0.0 | 预览/试玩/包服务 | `GET /app-api/runtime/package/{versionId}``POST /app-api/runtime/session` | GamePackage契约#4、SDK契约#3);试玩会话表 |
| **feed** | 1-103 | V4.0.0 | 游戏流/双轨专区浏览 | `GET /app-api/feed/list` 分页流、`GET /app-api/feed/zone/{zoneId}` | 消费 project 已发布 + zone已建按 quality_score 排序(来自 telemetry |
| **telemetry** | 1-104 | V5.0.0 | 遥测/事件入库 | `POST /app-api/telemetry/events/batch` 批量上报→MQ 异步 | 契约#5 events.schema原始事件表 + 聚合MQ 消费幂等 |
> 脊柱串起创作project✅→生成aigc 壳)→预览/试玩runtime→流feed→遥测telemetry→ 回灌 feed 排序。
> Flyway 版本方案:**每模块独占主版本号** `V{模块序}.x.y`project=1、aigc=2、runtime=3、feed=4、telemetry=5全局有序不撞车baseline-version=0 保证均执行。
---
## 二、三相编排Workflow
```mermaid
flowchart TD
subgraph PhaseA[Phase A 契约扩展(并行起草 + 评审门)]
A1[子:aigc 契约] & A2[子:runtime 契约] & A3[子:feed 契约] & A4[子:telemetry 契约]
--> RV[子:一致性评审:脊柱接口对齐<br/>aigc 产物→runtime 入参→feed 展示→telemetry 事件]
end
RV --> GATE{主 agent 审 + 锁定契约}
GATE --> PhaseB
subgraph PhaseB[Phase B 模块并行建设(平铺并行,写各自 game-module-名 目录)]
B1[子:建 aigc 骨架] & B2[子:建 runtime] & B3[子:建 feed] & B4[子:建 telemetry]
-->|各自 mvn 编译+Service 单测自验| VR[回收验证结果]
end
VR --> PhaseC[Phase C 主 agent 串行集成]
PhaseC --> I1[加 4 个 yudao-server pom 依赖]
PhaseC --> I2[确认 Flyway 版本不撞]
PhaseC --> I3[mvn install 全量绿]
I3 --> ACC[验收 + 更新 .agent/契约/记忆]
```
**并行安全**Phase B 各子 agent 只写**互斥的 `game-module-{name}/` 目录**(无 worktree无合并回写构建用 **`mvn -pl game-module-{name}/game-module-{name}-api,game-module-{name}/game-module-{name}-server test`**(不带 `-am`,依赖从 .m2 解析,避免并发重编 framework 撞 target/。共享文件yudao-server/pom.xml、Flyway 版本空间)**只在 Phase C 由主 agent 串行改**。
---
## 三、每模块产出物DoD
- `-api``enums/ErrorCodeConstants.java`(独占段)+ 状态/类型枚举 +(按需)跨模块 DTO/Feign。
- `-server`controller(app/admin)+vo、service+impl、dal(DO 继承 `TenantBaseDO`/Mapper)、convert外部依赖处留**清晰 TODO 对接点**(不 mock
- `db/migration/V{seq}.0.0__create_game_{name}.sql`(执行位)+ 同步 `contracts/db-schemas/`授权源diff 一致)。
- `contracts/api-schemas/{name}.yaml`OpenAPI端前缀 /app-api·/admin-api
- `XxxServiceImplTest``BaseMockitoUnitTest`,覆盖核心规则)。
- 模块 `.agent`:目标/边界/状态/TODO含"运行时未验证"标注)。
## 四、验证门(每模块必过)
1. `mvn -pl game-module-{name}/...-api,...-server test` → 编译 + 单测绿。
2. 契约文件入 `contracts/`
3. 骨架对接点显式标注"待人工闸门/运行时未验证"。
## 五、Phase C 集成 + 验收
- `yudao-server/pom.xml` 增 4 依赖(主 agent 串行)。
- Flyway 版本核对无撞V2/3/4/5
- `mvn -pl yudao-server -am compile` + `mvn install` 全量绿。
- 全局扫描已覆盖 `cn.wanxiang.game.module` → 4 新模块自动接入(无需改 Application/yaml
- 更新 `.agent`、playbook 速查、本 spec 状态、记忆。
## 六、风险与边界(承接 review §七)
- aigc 真实生成、telemetry MQ 真实入库、Swagger/Spring 启动 = **运行时未验证**(无基建),仅交付可编译骨架。
- 子 agent 关键任务跑 Opus记忆 `opus-subagents-critical-tasks`);主 agent 验证门兜底。
- 契约评审门不可省(决策 5Phase A 锁定后才进 Phase B。
---
## 七、执行状态LIVE · 跨会话/压缩续作锚点,每相更新)
> 用途:主 agent 若被压缩,凭此节即可干净接力,无需依赖会话记忆。
**当前相**:✅ **Wave1 后端脊柱全相完成并验证**Phase A 契约→修复→锁定→Phase B 建设→Phase C 集成全绿)。
**已定方向(创始人 2026-06-08 选①):下一主线 = 前端 `game-studio` 脊柱骨架**(非继续铺 Wave2/3 后端广度)。理由:闭环优先的下一环是"可试用",前端是种子用户能试的必要环,且不卡外部闸门(用已锁契约 mock 建+本地预览)。**先出 review 版计划 → 评审 → 并行 Workflow 执行**(复用 Wave1 三相方法)。
- 前端栈Vue3 + Vant + 自研 Canvas Runtime(<15KB, Tier1) + WanxiangGameSDKD4 设计基准 = `ui-ux-pro-max` 技能 + `docs-design/zaomeng-ai-demo.html`
- 消费契约mock 依据`contracts/api-schemas/{project,aigc,runtime,feed,telemetry}.yaml` + `sdk-interface.d.ts`(#3) + `game-package.schema.json`(#4)。
- 配套交付解锁运行时验证给人执行staging 拉起手册docker-compose 中间件 + `game-cloud/sql/mysql/ruoyi-vue-pro.sql` 初始化 yudao 基础表 + Flyway 自动建 game_ + Swagger/端点冒烟本环境无 docker/内存不足无法代跑
- 并行提醒人侧长周期日历闸门经营主体/ICP备案/支付进件/广告审核/LLM实名充值即刻启动
- **Phase A Workflow**完成task=`wgi8h9y2a` runId=`wf_006dd49e-67b`
- **修复 Workflow**完成task=`wn3q0kegz` runId=`wf_fa1623d0-129`
- **Phase B 构建 Workflow**完成task=`wffjrukel` runId=`wf_dd456459-4a2`。建成 game-module-{aigc,runtime,feed,telemetry}main 17/30/22/20 文件 agent 独立复验 4 模块全 BUILD SUCCESS、**46 单测全绿**aigc 8/runtime 18/feed 11/telemetry 9)。
- **Phase C 集成**完成 agent 串行 pom 4 模块yudao-server pom 4 `-server` 依赖4 迁移 V2-5 复制到 db/migrationdiff 一致**`mvn -pl yudao-server -am compile` 全量 BUILD SUCCESS41 模块 reactor 5 game 模块+yudao-server**。
- **运行时未验证无基建**Spring 启动/扫描生效/Flyway 真实迁移/Swagger/真实 Dify·MQ 联调 staging各模块 integrationTodos 已记录对接点Dify/MQ/LLM/OSS/quality_score 公式/跨模块 RPC)。
- **契约校验锁定** agent,✅):5 api-yaml 语法 OK13 表裸 select*=0错误码段 100-104 独占Flyway V1-5 唯一5 决策落实命中Wave1 契约**已锁**。
- **Phase B 隔离构建约定** agent 写互斥 `game-cloud/game-module-{name}/` 目录构建用 **`mvn -f game-cloud/game-module-{name}/pom.xml test`** pom yudao .m2 解析不带 -am**不碰根 pom `<modules>`不碰 yudao-server不放迁移到 yudao-server**——这些由 Phase C agent 串行集成
- **产出落点**`contracts/api-schemas/{aigc,runtime,feed,telemetry}.yaml` + `contracts/db-schemas/V{2,3,4,5}.0.0__create_game_*.sql`已锁Phase B 产代码于 `game-cloud/game-module-{aigc,runtime,feed,telemetry}/`
**续作序列(按此推进)**
1. Phase A 完成通知 **立即把评审 findings 落盘到本节**blocker 必修后再继续)。
2. agent + 锁契约必要时改 contracts/ 后再 lock)。
3. **Phase B 构建 Workflow**4 agent 平铺并行各建 `game-module-{name}/`克隆 project 范式构建用 `mvn -pl game-module-{name}/game-module-{name}-api,game-module-{name}/game-module-{name}-server test`**不带 -am**避免并发重编 framework)。
4. **Phase C 集成(主 agent 串行)** 4 `yudao-server/pom.xml` 依赖 复制 4 个迁移到 `yudao-server/.../db/migration/` contracts diff 一致)→ `mvn -pl yudao-server -am compile` + `mvn install` 全量绿
5. 验收 更新 `.agent`本节记忆 `golden-module-project-verified`/新增 wave1 记忆
**不变量提醒**错误码段 aigc=1-101/runtime=1-102/feed=1-103/telemetry=1-104Flyway 主版本 aigc=V2/runtime=V3/feed=V4/telemetry=V5端前缀 /app-api·/admin-apiDO 继承 TenantBaseDO外部依赖只留对接点不 mock运行时未验证须标注
**Phase A 结果(已完成 2026-06-085 agent/329k token**4 契约已写入 `contracts/api-schemas/{aigc,runtime,feed,telemetry}.yaml` + `db-schemas/V{2,3,4,5}.0.0__*.sql`评审 `spineFlowOk=true`脊柱端到端贯通无断链)、`coherent=false`0 blocker/3 major/3 minor均语义对齐无需改结构)。
**Phase A→收口决策HJ-BUILD-FIX主 agent 拍定,注释层修复,锁前补)**
1. **[maj] runtime 状态机**取包门禁判定字段=`game_runtime_package.status`preview 放行 status∈{0,1}play status=1runtime 增发布态回写对接点admin 内部端点 `POST /admin-api/runtime/package/{versionId}/publish` MQ 对接点project.publish 编排成功后置 `package.status=1` + 回写 `game_version.status=3`
2. **[maj] qualityScore 量纲**aigc 侧注释正名生成质量分(0-1)」、telemetry/feed 运营质量分(0-100)」;README 契约对齐节加两者不同量纲不可互相回灌」;**字段名不强改**不动锁定结构仅注释澄清
3. **[maj] play_count 权威源**权威源=telemetry `game_play_start` 事件聚合runtime session 仅作时长/质量观测不计 play_countruntime `sessionId`(int64) 透传进 telemetry `envelope.session_id`( string) 作对账键两契约注释互指
4. **[min] ad/income 聚合**Wave1 脊柱范围=生成→流→试玩→质量分回灌,**不含变现**ad/income 事件原始入库但聚合表显式标注Wave2 范围外later 补列」。
5. **[min] package_url 权威写者**`game_version.package_url/checksum/bundle_size` 权威写者=runtime 编译成功后回写aigc 只回填 `version_id` 关联 + 生成元数据`gen_task_id`不写 manifest 字段aigc V2 runtime V3 注释互指
> 收口方式:按**文件分组**并行修复agent 各改互斥文件 aigc/runtime/telemetry/feed/README无冲突→ 主 agent 验证 → 锁契约 → Phase B。各模块 openQuestions归属/MQ-vs-RPC/CDN 等实现期细节)记录在 Phase A 输出,留实现期与 owner 对齐,不阻断骨架。