docs(mvp): B2′ 真人试玩 e2e 收口 + CJK 写入字符集红线蒸馏

作战清单 B2′ 标 done(浏览器实玩→clicker 通关→quality 0→60→feed 翻转登顶;逮修 4 真 bug);总账 链路3=真人试玩闭环真实、M3=发布链+数据回路+真人试玩全 e2e;engineering-conventions §1.2 加「CJK 灌数必须 --default-character-set=utf8mb4」红线(B2′ 标题双编码教训)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
zizi 2026-06-09 17:05:22 +00:00
parent d279898192
commit 349aebaa79
3 changed files with 4 additions and 3 deletions

View File

@ -32,6 +32,7 @@
- 分页用游标或 `LIMIT`;禁止深分页 `LIMIT 100000,20` 这类全表扫描。
- 复杂查询走 MyBatis XML简单 CRUD 用 MyBatis-Plus。
- **JSON 列写入**:映射 MySQL `json` 列的 DO 字段必须存**合法 JSON 文本**——用 `JsonUtils.toJsonString(obj)` 序列化,**严禁 `Map/对象.toString()`**(产出 `{k=v}` 非合法 JSONMySQL 抛 `Invalid JSON text` 致整批事务回滚)。⚠️ 单测 mock mapper **测不到**此约束,须靠集成测试(Testcontainers)或 staging 实测兜底B2 实测教训)。
- **CJK 写入连接字符集**:用 mysql 客户端 / `docker exec mysql` 灌含中文的 SQL种子/修数据)必须带 `--default-character-set=utf8mb4`,否则 UTF-8 字节被按 latin1 解析→双重编码存入 utf8mb4 列→读出/接口返回乱码HEX 表现为 `C3A5..` 而非 `E5B08F`=「小」)。前端/接口看似乱码 bug实为灌数环节编码错B2 实测,浏览器渲染才暴露)。
### 1.3 错误码分配(每模块独占一段,禁止冲突)

View File

@ -31,7 +31,7 @@
- [x] **B0 锁定执行 spec**(✅ 2026-06-09 v2 定稿 `867c452`,主 agent 独立核验 + Codex 两轮评审 GoD-PUB=α 已拍板):化解 autoplan 挖出的 5 个 critical —— 精确定义"可见态"(project PUBLISHED + package READY + versionId + rank.status=1) · 发布编排 `APPROVED→PUBLISHED` · version 创建链 · `package_json` 多文件契约 · `eventId` 幂等契约。**含一项需你点头的架构决策:审核通过是否自动发布到 PUBLISHED。** `done=execution spec 过自审 + 你点头`
- [x] **B1 批次①契约/状态机校正****2026-06-09 staging e2e 实证**submit→人工 APPROVE→项目 PUBLISHED(4)+包 status=1+版本 status=3+feed_rank+feed/stream 读到它;三提交 e670eaf/1740d8c/a707687mvn+5 模块单测+vue-tsc 全绿,两轮 Codex 评审)(含 6 个开工前置项:`VITE_API_BASE` / mock 门控 / token=test1+tenant-id / 本机 vite dev 连 staging / 契约裁决 / beacon 走 baseURL`done=前端真连 staging、发布能进 PUBLISHED、feed 读 rank`
- [x] **B2 批次②最小数据回路****§0 验收门三条全过2026-06-09 staging e2e**:克隆 9001→9002 两款已发布游戏A弱互动(q=28)/B强互动(q=88)→事件落库→quality_score→feed_rank.sort_score→**feed 重排(B超A)**→重放同 eventId 不重复计数(真 HTTP+真后端+真库)。**顺修 B1 潜伏 bug**`props` 落 MySQL `json` 列原用 `Map.toString()``Invalid JSON text` 整批回滚,改 `JsonUtils.toJsonString`+回归守卫单测telemetry 13 测绿)。
- [ ] **B2 真实可玩 runtime人可演示半**PackageFactory + clicker 小游戏在 game-studio **人能点着玩**、试玩自然产 play/like/share → 看 feed 真重排;顺修 feed 卡片 title/cover=null跟踪项①`done=浏览器里玩→feed 真重排`
- [x] **B2 真实可玩 runtime人可演示半****2026-06-09 浏览器 e2e 实证**staging + 真无头 Chrome 驱动feed 真连后端出真标题 → 点卡进试玩 → 自研 Canvas clicker 真玩通关 → `game_play_start/end(completed:true)` 真遥测落 staging → quality 0→60 → **feed 翻转(玩过的 A-小卖部 从第 2 位窜登顶)**`done=浏览器里玩→feed 真重排 ✓`。**逮修 4 个 curl/单测均未现形的真 bug**(① 标题双编码乱码=灌数 latin1 连接;② feed/play `min-height` 链断塌 0 高不可点;③ demo 兜底被父级误判致命隐藏宿主;④ game_end 漏 `completed` 致 quality 永不涨)——②③④ 已提交 `d279898`,① 为 staging 数据修复。
- [ ] **B3 批次③小卖部皮肤 + ≥10 参数化种子内容**(可降级)。`done=feed 有内容池,不是两款游戏赛马`
- [ ] **B4 其余 4 链路烟测登记**(广告/收益/分享/互动HTTP 通 + code==0 + 结构符 yaml标【真实/桩】。`done=缺口登记总账`

View File

@ -27,7 +27,7 @@
| **M0 契约锁定** | 6/9 上午 | ✅ **达成** | 9 个 API yaml + DB V1-V9 + sdk-interface/game-package/events/dify-workflow/ad-slot = 8 类契约入库 | `c4e2d73` 起 |
| **M1 全栈可启动** | 6/11(Day3) | ✅ **达成6/9 提前)** | 单体 `Started YudaoServerApplication`Flyway V1-V9 全 success24 张 game_* 表admin-api `/system/user/page`→20 真实用户、app-api `/feed/stream`→200 | 启动修复 `d7fac90`+`8565fa2` |
| **M2 创作链路(真 LLM** | 6/18(Day8) | ❌ **未达成** | aigc/studio 为骨架+桩Dify 真实生成未接;"生成成功率≥80%"无法测 | → P1 桩真实化 |
| **M3 分发链路** | 6/20(Day10) | 🟢 **发布链+数据回路真实(6/9 e2e)** | **B1**submit→锁风门→APPROVE→发布编排一次事务跨4表→feed 可见。**B2 数据回路**A弱(q28)/B强(q88)→事件落库→quality_score→sort_score→**feed重排(B超A)**→重放幂等§0验收门全过顺修 props/json 列 bug+回归守卫)。**仍待**:真实可玩 runtime人点着玩产事件+ 互动/分享真采 | `6c8844f``a707687`+B2 fix |
| **M3 分发链路** | 6/20(Day10) | 🟢 **发布链+数据回路+真人试玩 全 e2e 真实(6/9)** | **B1**submit→锁风门→APPROVE→发布编排跨4表→feed 可见。**B2 数据回路**(curl)A(q28)/B(q88)→事件→quality→**feed重排**→重放幂等。**B2 真人试玩**(浏览器实玩)feed真标题→Canvas clicker 真玩通关→game_play_end(completed)→quality 0→60→**feed 翻转登顶**;逮修 4 真 bug编码/布局/兜底/completed。**仍待**:真实编译打包(M2 runtime产物)+真实分享落地 | `…ab0037c→d279898` |
| **M4 变现链路** | 6/23(Day11) | 🟡 **部分** | ad/trade 骨架slot/settle/分账/提现);真实广告联盟=桩、pay 模块未接单体 | `43fce85` |
| **M5 MVP 交付** | 6/27(Day15) | ❌ **未达成** | 55/55 P0 真实可验收 + 冒烟全绿 + P0 Bug=0 远未达 | — |
@ -64,7 +64,7 @@
|---|---|---|---|
| 1 | 创作 → 生成 → 预览试玩 | 🟡 | 创建真实;**生成=桩**;预览前端 mock |
| 2 | 发布 → 审核 → 游戏流 | 🟡 | publish+锁风门 curl 真实、审核状态机真实、feed 结构在;**前端未接** |
| 3 | 游戏流 → 试玩 → 互动 → 分享 | 🟡 | 结构骨架;**runtime 编译/互动/分享=桩** |
| 3 | 游戏流 → 试玩 → 互动 → 分享 | 🟢 | **真人试玩闭环 e2e 真实(B2)**feed(真标题)→点卡→自研 Canvas clicker 真玩通关→game_play_start/end 真遥测→quality→**feed 重排(浏览器实证翻转)**like/share 接真遥测;真实编译打包/分享落地页=桩 |
| 4 | 广告展示 → 收益 → 钱包可见 | 🟡 | 骨架;**真实广告/pay=桩** |
| 5 | 遥测 → 质量分 → 推荐优化(数据回路) | 🟢 | **数据回路 e2e 真实(B2)**事件→quality_score→feed 重排(B超A)+重放幂等MQ 异步化/真实试玩前端待补 |