diff --git a/.agents/README.md b/.agents/README.md index 4993246c..fb890ee7 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -53,6 +53,7 @@ | `skills/wave-close-checklist.md` | 波次收口七步检查单——所有收口铁律指向的唯一可执行清单 | | `skills/staging-ops.md` | staging 运维配方:机器分工/代码同步/后端重部署/前端构建门/冒烟门 | | `skills/ui-walkthrough-cdp.md` | 真 UI 走查配方(CDP on mini-desktop):studio/admin 走查 + CDP 七坑 + 信道探针 | +| `skills/game-e2e-cdp-harness.md` | Canvas 游戏 e2e 证据 harness:编排形制/驱动器六律/出厂红线/四件套口径(T1b-α 实证,W-G1 复用) | **workflows/** diff --git a/.agents/skills/game-e2e-cdp-harness.md b/.agents/skills/game-e2e-cdp-harness.md new file mode 100644 index 00000000..23348cdd --- /dev/null +++ b/.agents/skills/game-e2e-cdp-harness.md @@ -0,0 +1,29 @@ +# Canvas 游戏 e2e 证据 harness 配方(CDP on mini-desktop) + +> 适用:插件库/生成游戏的**真浏览器输入级 e2e**(触摸轨迹→状态机推进→四件套证据),区别于 DOM 走查(那个见 [`ui-walkthrough-cdp.md`](./ui-walkthrough-cdp.md))。 +> 首跑实证:T1b-α 参考件 7 轮调试链(教训全在 harness 侧,游戏逻辑零返工)。活样板=`game-runtime/games/wanglanmei-ref/test/{e2e-input.cdp.cjs,ref-e2e-runbook.sh}`。W-G1 竞标同 harness 复用。 + +## 1. 编排形制(runbook 骨架) + +精确 SHA scratch clone → esbuild 打包 → IP 门 → `systemd-run` 起 serve + chrome 两单元 → **就绪等待**(10×0.5s 探活)**再**做韧性探测(5×6s)→ 驱动器 → journal 归档 → 停单元。 +- **就绪/韧性必须分两段**:curl 抢在 listen() 前会把刚起的单元误判失败杀掉(journal 里 Started+Stopping 同秒 = 此坑签名)。 +- chrome 旗标:`--headless=new --no-sandbox --no-zygote --remote-allow-origins=* --autoplay-policy=no-user-gesture-required`(最后一项缺 → AudioContext 卡 suspended)。 +- 长驻一律 systemd-run 具名单元,可 journal 取证可 stop,不留孤儿。 + +## 2. 驱动器六律(e2e-input.cdp.cjs 形制) + +1. **启动等待轮询取证全局**(如 `__refBooted/__refBootError/__refHost`),超时给 25s——拿 bootError 文本比盲等截图有用得多。 +2. **坐标必须走 rect 映射**:游戏 zone 坐标(canvas 内坐标系)→ `getBoundingClientRect` → 页面 CSS 坐标再下发触摸。canvas 不在 (0,0) 或被缩放时直发坐标全偏。 +3. **触摸 = touchStart/touchEnd 成对 + ~90ms 间隔 + 步进若干帧**;拖动(滑条)用连续 touchMove。 +4. **zone/phase 名以游戏源码 computeZones 为唯一真相**——驱动器猜语义名必踩坑(实证:营业期 phase 叫 `open` 不叫 `serving`,循环秒退)。 +5. **计数器要驱动器侧实时累计**,勿赛后读游戏内环形缓冲(240 事件环溢出 → 假阴性 serve_ok=0)。 +6. **确定性对比须同存档态**:双开比哈希前 `localStorage.clear()`+reload(二开多画「继续」按钮属正确行为,不是缺陷)。 + +## 3. 两条出厂红线(游戏侧,门里逮过的真缺陷) + +- **页面壳**:canvas 必须置 (0,0) 满幅;状态条等 UI 用 absolute overlay + `pointer-events:none`。flex 布局把 canvas 压下/裁底 = 驱动器坐标漂移 + 真机底部按钮不可点(双重致命)。 +- **esbuild 全量预检**:出厂前在 /tmp 跑一次完整 bundle(`const` 被赋值这类错只在打包期爆,headless 单测覆盖不到所有渲染分支)。 + +## 4. 四件套证据口径 + +输入轨迹 JSONL / 截图+canvas 哈希 / 探针 JSONL / checklist JSON,落 `games//evidence/round-N/`;硬门(boot/phase 推进/确定性)与软活项(美术观感)分开判。 diff --git a/AGENTS.md b/AGENTS.md index bf501938..885fda96 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -127,6 +127,7 @@ The 5 documents below form a complete picture of the project. **On first onboard | [`.agents/skills/wave-close-checklist.md`](.agents/skills/wave-close-checklist.md) | Wave close-out 7-step checklist — the single executable list all close-out iron rules point to | | [`.agents/skills/staging-ops.md`](.agents/skills/staging-ops.md) | Staging ops recipes: machine roles / code sync / backend redeploy / build gates / smoke gate | | [`.agents/skills/ui-walkthrough-cdp.md`](.agents/skills/ui-walkthrough-cdp.md) | Real-UI walkthrough via CDP on mini-desktop (studio/admin) + bridge probe | +| [`.agents/skills/game-e2e-cdp-harness.md`](.agents/skills/game-e2e-cdp-harness.md) | Canvas-game e2e evidence harness: orchestration shape / driver six rules / ship red-lines / four-piece evidence (proven on T1b-α, reused by W-G1) | ### workflows/ — meta-processes, answers "**how to take on a task**" diff --git a/docs/agent-specs/2026-06-12-T1b-α收口报告.md b/docs/agent-specs/2026-06-12-T1b-α收口报告.md new file mode 100644 index 00000000..4f3b19c2 --- /dev/null +++ b/docs/agent-specs/2026-06-12-T1b-α收口报告.md @@ -0,0 +1,42 @@ +# T1b-α 收口报告 —— 插件库 + 拔高样板「暖阳小卖部」 + +> 收口日:2026-06-12 | 主门:**创始人亲玩判「Game quality passed」(亲玩轮 1/3 即过)** +> 配对 spec:[`2026-06-12-T1b-α插件库与参考件-execution.md`](./2026-06-12-T1b-α插件库与参考件-execution.md) | 循环台账:`game-runtime/games/wanglanmei-ref/LOOP-LOG.md` +> 按 [`wave-close-checklist`](../../.agents/skills/wave-close-checklist.md) 七步收口。 + +--- + +## 1. 交付清单(全部有证据) + +| 段 | 交付 | 验证证据 | +|---|---|---| +| 插件段 | core-protocol-v0(受控面 6 项:getContext2d/onFrame/getInput/getAudioContext/time/random,禁直透引擎)+ 9 件插件 | 155/155 node 测试绿;manifest 全过 schema | +| 字节预算 | 插件 gz 增量合计 13263B(自律线 60K 内);全栈(壳+core+9 件)gz 16.5KB | `game-runtime/SIZES.md`(scripts/size.mjs 增量法实测,勿手改) | +| 集成段 | 三门 PASS(构建门/探针门/像素门) | mini-desktop CDP:FNV-1a 探针链 + vfx 像素哈希 ×3 | +| 参考件 | 「暖阳小卖部」logic/host 双层(纯逻辑零 DOM、注入时钟/随机、角整数记账);phases title→prep→open→settle→summary→gameover | 49 node 测试绿;forensics 导出四件(__refForensics/__refChecklist/__refHost/__refBooted) | +| 资产 | 16 件 mmx 资产(统一水彩风格词;图+乐) | 资产单在 LOOP-LOG;quota 对账零差(月账创始人侧待对) | +| e2e | REF_E2E PASS 四件套全档(输入轨迹 JSONL/截图+canvas 哈希/探针 JSONL/checklist JSON),双开确定性过 | `game-runtime/games/wanglanmei-ref/evidence/round-1/` | +| 判定 | 我判 ≈4.1 达线(五要素 1-5 均分 ≥4 门)→ 创始人亲玩 PASS | 判词全文在 LOOP-LOG.md | + +## 2. 成本对账 + +- Fable 开发 agent 单件 398,678 tokens ≈ **¥50-80/件**(L3 顶配档参照系;生产主线另走便宜模型,W-G1 实测)。 +- 阶梯口径:¥0.031(已退役参数填充路径下界)/ ≤¥0.15(L1 门)/ 元级 L2 / ¥50-80(L3 类)。 +- mmx 图+乐走 Token Plan,quota 零扣减实测;图片是否单独计费**待创始人月账核对**。 + +## 3. 关键教训(已蒸馏处置) + +1. **质量哲学获验证**:7 轮 e2e 调试全在 harness/壳侧,游戏逻辑零返工——门逮设计正确性、评估轮喂肥 harness。配方 → [`.agents/skills/game-e2e-cdp-harness.md`](../../.agents/skills/game-e2e-cdp-harness.md)(新蒸馏)。 +2. **收编逮出 2 真缺陷**:esbuild const 赋值(headless 测试从未执行该分支);页面壳把 canvas 压下 29px 且裁底(真机致命)→ 收编精读不可省。 +3. **push 竞态+管道掩码** → 已蒸馏 `.agents/skills/staging-ops.md` §2。 +4. **NIH 第三案**(粒子/物理/后处理平行重造引擎内建):审计逮出 → 创始人裁决①「三件改引擎能力包装层」→ β 落地(真接线门 bundle grep)。防线 = `.agents/rules/build-vs-buy.md` R1-R7。 + +## 4. 资产处置 + +- **入库**:e2e 驱动 `games/wanglanmei-ref/test/e2e-input.cdp.cjs` + 编排 runbook `test/ref-e2e-runbook.sh`(自 /tmp 收编)。 +- **留存服务**:demo serve `http://100.64.0.7:4320/`(systemd 单元 `t1ba-ref-play`,登记在案;停=`systemctl stop t1ba-ref-play`)。 +- **后续归属**:插件协议实证形状 → W-G0 第 9 契约组升格;参考件循环协议(LOOP-LOG 形制)→ W-G1/W-G2 复用;裁决① wrapper 化 + 参考件入 feed → T1b-β。 + +## 5. 回填声明(七步之 3) + +裁定类回填**已随清毒六连提交完成**(`5a40824`→`12716d1`:裁决①/AgentScope 终裁/生成主线/15KB 废除,覆盖 AGENTS.md、tech-decisions、glossary、Doc B、安全规则、双 .agent 等 ~25 件),本收口无新增回填项。唯一悬置:产品文档 A/C「玩法模板(TPL)」产品命名是否随技术层废除而改名——**属产品改名非回填,W-G0 对齐时给创始人选项**(已登记作战清单)。 diff --git a/docs/mvp/MVP作战清单-完成史归档.md b/docs/mvp/MVP作战清单-完成史归档.md index 6e00c3ff..2ad6f039 100644 --- a/docs/mvp/MVP作战清单-完成史归档.md +++ b/docs/mvp/MVP作战清单-完成史归档.md @@ -65,4 +65,6 @@ - 🤖 **我**:⑪ **Tier1 重设计 W-T1a ✅ 2026-06-12 收口**(约束框架定稿〔15KB 废除→三层框架,创始人逐项拍板:参考环境=千元机+4G P75 / B1 放宽档 / 预算=入场券·S2=主考〕→ 四路引擎尽调+查漏 → 双游戏×双引擎 4 包 spike 五门全过〔月光捕手+王蓝莓小卖部,CDP 真输入三重实证,Codex Xhigh 评审通道×3〕→ Phase2 节流测量〔冷开 4.8~5.3× 差〕→ 终裁包 v1.1〔85/82+敏感性分析〕→ **创始人终裁=LittleJS** + 亲玩判词「玩法简单缺艺术气息」→ 好玩基线 v2 五要素 + **模板双层架构拍板**〔核心代码模板/玩法模板,美术混合〕;副产:「每游戏=小增量」实测 2.2-2.5KB gz/款、Phaser unsafe-eval 钉子拆除存档、serve 常驻配方蒸馏;详 `2026-06-11-T1引擎终裁包.md`+总账 §6) +- 🤖 **我**:⑫ **T1b-α 插件库+拔高样板 ✅ 2026-06-12 收口(主门=创始人亲玩 PASS,亲玩轮 1/3 即过)**(core-protocol-v0 冻结〔受控面 6 项禁直透〕+9 件插件 155/155 测绿 → 集成段三门 PASS〔SIZES 九件全≤配额·全栈 gz 16.5KB·mini-desktop CDP 证据〕→ 参考件轮 1「暖阳小卖部」〔Fable dev agent:logic/host 双层 49 测+mmx 16 件统一水彩风〕→ e2e 四件套 REF_E2E PASS〔7 轮调试链全 harness 侧·游戏逻辑零返工·逮 2 真缺陷 const 赋值/canvas 裁剪〕→ 我判 ≈4.1 → 创始人判「quality passed」,**好玩基线 v2 立标=本件**;成本 Fable 单件 ≈¥50-80〔L3 顶配档参照系〕·mmx quota 零差;蒸馏=`game-e2e-cdp-harness.md` 新 skill+`game-runtime/.agent`;收口报告 `2026-06-12-T1b-α收口报告.md`;demo serve `100.64.0.7:4320` 登记保留)。同日收口同档:**W-CLEAN ✅**(模板哲学落地第一刀:DB 15 表 1022 行+遥测 291 行〔先归档〕+前端 837 行+白名单清空+重部署铁证;smoke 8/12,4 FAIL 全预期差异);**全成本收益模型 v2.2 ✅**(Codex 复审 8/8 算术一致+7 条全采纳;单月转正第 10 月/累计回本第 15 月〔9~32 月敏感〕);**待办雷清雷 ✅**(雷一核验无需改〔原登记前提错误〕;ExecutorLlmClient 显式 max_tokens=4096 `09d8678` 实测 15/15 绿);**拍板台全清 ✅**(C1 自研流即时发布+双渠道精选发行 / C2 合规为准绳 / HJ-GEN-001 终审过〔生成主线=agent 写码于插件库分档〕/ T1b-α 开工令);**审计整改包 HJ-AUDIT-NIH-001 ✅ 主体完成**(裁决①已拍并入 β;全文档清毒 `5a40824`→`12716d1` 单源亲笔+长尾 18 改 1 新建,活文档残毒终扫清零;余项=R6 尽调补录×4+R3 红线血统回填→并入 β/W-G0,TPL 产品命名留拍→W-G0 给选项)。 + (每轮收口后追加于此) diff --git a/docs/mvp/MVP作战清单.md b/docs/mvp/MVP作战清单.md index caff1f83..7442945a 100644 --- a/docs/mvp/MVP作战清单.md +++ b/docs/mvp/MVP作战清单.md @@ -5,33 +5,26 @@ > 收口动作(含回填铁律)按 [`wave-close-checklist`](../../.agents/skills/wave-close-checklist.md) 七步执行。 > 维护:主 agent | 上轮完成线「可演示真黄金闭环」已于 2026-06-10 达成(见归档)。 -## 0. 本轮完成线(⚠️ 待你拍板重锁) +## 0. 本轮完成线(⚠️ 上轮已达成,待你拍板重锁) -**建议候选(2026-06-12 二次更新)**:**W-T1b 拔高样板过创始人判**(好玩基线 v2 立标,Tier1 重设计的质量锚点)。原配对项「链路③⑤真 UI 走查闭合」**实测受阻降出本轮**——W-CLEAN 后 feed 已空(2026-06-12 staging 实测 `list:[]`),③⑤真走查须等新内容入池=T1b-β 参考件发布后,重锚至 β。你拍板后改写本节并注明锁定日。 +**上轮完成线「W-T1b 拔高样板过创始人判」✅ 2026-06-12 达成**(亲玩轮 1/3 即过,收口七步已跑,详归档⑫+总账 §6)。**下轮建议候选**:**T1b-β 收口 + 链路③⑤真 UI 走查闭合**(β 落地裁决①真接线+Runner v2+1.x 退役+参考件入 feed→③⑤解封,把"发布面真走查"捡回主线;W-G1 竞标受 DS key 前置可并行不入完成线)。你拍板后改写本节并注明锁定日。 ## 队列〔🤖 我〕 - -- [x] **W-T1b ✅ 主门过(2026-06-12 创始人亲玩判「quality passed」,亲玩轮 1/3 即过)**:插件段(core-protocol-v0+九件 155/155)+集成段三门 PASS(全栈 gz 16.5KB)+拔高样板「暖阳小卖部」(REF_E2E PASS 四件套全档,预判≈4.1;判词=games/wanglanmei-ref/LOOP-LOG.md);**好玩基线 v2 立标=本件**;demo serve 保留 http://100.64.0.7:4320/(t1ba-ref-play,登记在案);**收口=wave-close 七步待跑**;→ 后继 **T1b-β 解锁**(Runner v2 产品化+1.x 退役+参考件入 feed,双 spec 先行);~~W-T1c~~ 作废→插件库扩展波 -- [x] **W-CLEAN ✅ 全径完成**:DB 15 表 1022 行+遥测 2 表 291 行(均先归档 mini-desktop:/root/backups/w-clean-20260612/)+前端 837 行+后端白名单清空+运行 jar 重部署生效(`template/list` 空列表铁证);smoke 8/12,4 FAIL 全为预期差异留档 -- [ ] **W-CH 渠道波(抖音+微信小游戏,✅ 范围已定稿)**:判定=[`渠道适配判定 HJ-CH-001`](../agent-specs/2026-06-12-渠道适配判定-小游戏双渠道.md)——小游戏=精选整包 L1 分发面(一壳多游·主题合集口径)/H5=UGC+L2 主场;W-CH-α 对比 spike(双 spec 齐,Codex 16 条全采纳;LayaAir 尽调出局)→**P0 段 ✅ 完成(2026-06-12 ultracode,验证门 6/6 PASS:adapter 21 测绿〔逮修 1 真 bug〕/合规 schema 30 用例/probe 八锚点哈希链/SIZES 实测 C-A 主包 gz 37.5KB=4MB 闸门 0.92%·每模板边际 gz2.9KB vs C-B Cocos 文献 1.94MB/双 RUNBOOK+证据校验器)**;**P1 只待你三件套**;**待你拍 C1-C2** -- [x] **全成本收益模型 v2.2 ✅ 交付**(`docs/mvp/全成本收益测算模型-v2.md`:v2 重建+Codex 复审 8/8 算术一致+7 条全采纳——生成成本重锚 agentic 分档〔L1 P75≤¥0.15,0.031 降旧路径下界〕/激励计价口径显式声明〔折算 eCPM 200/562.5/1080 vs 单位经济页 15/30/60〕;单月转正第 10 月/累计回本第 15 月〔基准,9~32 月敏感〕) -- [ ] **W-G0 生成工厂契约波(▶ 现行,α 主门已过)**:第 9 契约组——把参考件实证形状升格为正式契约(取证导出 __refForensics/__refChecklist/__refHost+evidence 四件套+LOOP 协议)+黄金评估集 v0(首件=暖阳小卖部)+9g 预算分档字段;**agentic 基建 ✅ 终裁(2026-06-12):全平台单一框架化基建=AgentScope 2.x 主力**(评审版 HJ-AGI-001;五资产契约边界+L1 裸通路定案;换轨触发写死,W-G1 即 spike 门,验不过切 LangGraph 开源核心) +- [ ] **W-CH 渠道波(抖音+微信小游戏,✅ 范围已定稿)**:判定=[`渠道适配判定 HJ-CH-001`](../agent-specs/2026-06-12-渠道适配判定-小游戏双渠道.md)——小游戏=精选整包 L1 分发面(一壳多游·主题合集口径)/H5=UGC+L2 主场;W-CH-α 对比 spike(双 spec 齐,Codex 16 条全采纳;LayaAir 尽调出局)→**P0 段 ✅ 完成(2026-06-12 ultracode,验证门 6/6 PASS:adapter 21 测绿〔逮修 1 真 bug〕/合规 schema 30 用例/probe 八锚点哈希链/SIZES 实测 C-A 主包 gz 37.5KB=4MB 闸门 0.92%·每模板边际 gz2.9KB vs C-B Cocos 文献 1.94MB/双 RUNBOOK+证据校验器)**;**P1 只待你三件套**;C1-C2 ✅ 已拍(C1=自研流即时发布+双渠道精选发行/C2=合规为准绳,详归档⑫) +- [ ] **W-G0 生成工厂契约波(▶ 现行,α 主门已过)**:第 9 契约组——把参考件实证形状升格为正式契约(取证导出 __refForensics/__refChecklist/__refHost+evidence 四件套+LOOP 协议)+黄金评估集 v0(首件=暖阳小卖部)+9g 预算分档字段;**agentic 基建 ✅ 终裁(2026-06-12):全平台单一框架化基建=AgentScope 2.x 主力**(评审版 HJ-AGI-001;五资产契约边界+L1 裸通路定案;换轨触发写死,W-G1 即 spike 门,验不过切 LangGraph 开源核心);**附带**:TPL 产品命名选项给创始人(产品文档 A/C「玩法模板」是否改名,属产品改名非清毒) - [ ] **W-G1 模型竞标 bake-off(创始人 2026-06-12 裁定:Fable 只造引擎,生产生成=便宜模型)**:同 brief 同 harness,M2.7/M3/DS-V4-Pro/Flash 比 过门率/重试数/¥每过门款,对照 ¥0.15 L1 门;品类=现有 8 插件可承载(经营/回合 RPG/弹幕/氛围);**20 游戏能力矩阵=覆盖目标与插件缺口定义**(矩阵入 W-G1 spec);**spec 增列 agent-loop-v1 处置**(冻结只修 P0/资产〔judge 决策表·ledger 幂等·预算闸〕契约化迁 AgentScope/退役时点——审计②#2);⚠️ 前置=你侧 DS key 激活 -- [ ] **T1b-β(双 spec 先行,范围已并审计裁决)**:①**裁决①落地(2026-06-12 创始人拍):粒子/物理/后处理三件改引擎能力包装层+littlejsengine 真接线**(R6 门:bundle grep 实证;受控面开包装能力透传通道;SIZES 按"引擎+包装层"重锚=R3 血统;e2e 像素口径适配 WebGL 读回);②Runner v2 产品化;③1.x 退役三件套改写(srcdoc→URL+GamePlayer/inject/bridge+CDP 走查门,2b 无 warn 并入);④参考件发布入 feed(解封链路③⑤);⑤P7/P8 决策+SDK StoragePlugin 契约补丁+probe 注入时钟拆分 -- [ ] **审计整改包(HJ-AUDIT-NIH-001)**:✅裁决①已拍(并入 β);✅**全文档清毒完成(2026-06-12)**——单源高危件主会话亲笔(AGENTS×3/tech-decisions×5 含补刀两处漏网/协议 §4.1/安全规则"配置非代码"死断言迁移)+长尾 agent 18 改 1 新建(知识 3/技能 6 含 add-game-template·ai-generation-pipeline 整篇 DEPRECATED/Doc B T-AGC-18 作废注+T-RT-27 现状注/契约 deprecated 件/DifyCallback 诚实注记×4/双 .agent/执行 spec 横幅),活文档残毒终扫清零(历史 spec 留痕挂横幅纪律);余:R6 尽调补录四件(CDP/ajv/registry/weapp-adapter)+R3 红线血统回填——并入 β/W-G0 顺手做;**待你一拍(不急)**:产品文档 A/C 的「玩法模板(TPL)」乃产品域功能命名(用户浏览品类入口),技术玩法模板废除后是否随之改名(如「玩法蓝图」)——属产品改名非清毒,W-G0 对齐时给你选项 +- [ ] **T1b-β(双 spec 先行,范围已并审计裁决)**:①**裁决①落地(2026-06-12 创始人拍):粒子/物理/后处理三件改引擎能力包装层+littlejsengine 真接线**(R6 门:bundle grep 实证;受控面开包装能力透传通道;SIZES 按"引擎+包装层"重锚=R3 血统;e2e 像素口径适配 WebGL 读回);②Runner v2 产品化;③1.x 退役三件套改写(srcdoc→URL+GamePlayer/inject/bridge+CDP 走查门,2b 无 warn 并入);④参考件发布入 feed(解封链路③⑤);⑤P7/P8 决策+SDK StoragePlugin 契约补丁+probe 注入时钟拆分;⑥审计整改余项顺手做(R6 尽调补录四件:CDP harness/ajv/prompt registry/weapp-adapter + R3 存量红线血统回填:SDK 8KB/B1 350KB/零依赖/标准库优先/RSS 2G) - [ ] **插件库扩展波 v2(缺口由 20 游戏矩阵定义,Fable 设计协议+Opus 实现 lane)**:候选四件=平台角色控制器/瓦片关卡与房间系统/2D 光照视野/行为体与程序生成工具箱——补齐后矩阵覆盖 ~19/20(Q1K3 类 3D 出 Tier1 圈归 Tier2) - [ ] **studio 链路③⑤ UI 走查闭合(⛔ 重锚至 β 后)**:5 bug 中 OG 修已落(`1921f85`),余 3 件+真走查全需 feed 有内容——W-CLEAN 后池空(2026-06-12 实测),等 T1b-β 参考件发布入池;cover 无源=生成特性归 W-G1;authorName 扩 API 可先写码但 e2e 同等内容 - [ ] **feed 翻页桩**(触发线已失效:池 50→0,W-CLEAN 清空;降为 β 内容回灌后再评,不再"必修") - [ ] **W4 单位经济埋点·后端段**(按 [`单位经济敏感性模型.md`](./单位经济敏感性模型.md) §7 测量计划扩 B2 回路) - [ ] **链路① 纯 `updater='0'` 无鉴权线程实测**(settle job 触发,Wave4 留债精确 follow-up) - [ ] M4 变现真实化(广告联盟〔穿山甲/优量汇〕+ pay 接线 + **三方自动分账 IP15-20/创作者55-60/平台20-25 + Token 计费**,规则=《可行性验证落地方案》)/ OSS 真实存取 / MQ 聚合 —— 待完成线重锁后排期 -- [x] 待办雷 ✅ 清雷完毕(2026-06-12):~~PromptResourceLoaderTest 钉 1.0.0~~ **核验无需改**(测试本就版本无关防漂移设计,硬钉反会挂 clicker 1.1.0+复活 C6 教训——原登记前提错误);**ExecutorLlmClient 显式 max_tokens=4096 已修**(`09d8678`,对拍 llm_client.py 双侧固化,mini-desktop 实测两测试类 15/15 绿);GamePlayer 2b 分支无 warn → 并入 β(1.x 整体重写);~~Golden v1.1.3~~ 退役(旧口径被 golden v0 取代) ## 队列〔🧑 你〕 - [ ] **A1 线下四件**:域名+ICP 提交 · 短信报备提交 · 律所约谈 · LLM 实名口径确认(看板:[`A1闸门看板.md`](./A1闸门看板.md)) - [ ] **W-CH 余两件**(P1 前置;~~真机~~ ✅ 已备 Android+iOS 双端):微信小游戏 AppID+上传密钥 / 抖音开发者账号 · 一台 Win/Mac 机——**C-B Cocos 实测待 Mac(创始人令延后);C-A LittleJS 拿到 AppID 即可 Linux 先行 P1-lite**(miniprogram-ci 纯 Node 预览/上传) -- [x] **拍板台 ✅ 全清(2026-06-12)**:C1 口径定「自研流即时发布+双渠道精选发行」(原文已更词)· C2=以渠道合规为准绳(游戏集稳定化默认,律所校准,更严则照办)· HJ-GEN-001 ✅ 终审过(Q1~Q7 全默认,主线=agent 写码于插件库分档)· **T1b-α 开工令下**(mmx 资产+亲玩打分门) - [ ] **奇绩投递** + 面试备好 IP 框架协议文件(★2 口径以线下已签文件为据,实未签须改回口头意向) - [ ] **BP 3★ 确认**:团队表述 ×2 + 唯一融资口径 - [ ] **A2 种子供给**:锁 ~5 个种子创作者 + 定首批 10 个 demo 题材 diff --git a/docs/mvp/MVP进度总账.md b/docs/mvp/MVP进度总账.md index e788d834..1cba2280 100644 --- a/docs/mvp/MVP进度总账.md +++ b/docs/mvp/MVP进度总账.md @@ -3,7 +3,7 @@ > **本文件是项目管理唯一活账**:把「计划 ↔ 完成 ↔ 待办 ↔ 执行记录」对在一起。 > **铁律**:每次波次收口、每次里程碑状态变化,**必须按 [`wave-close-checklist`](../../.agents/skills/wave-close-checklist.md) 七步收口**(本表+表头日期、作战清单+归档、回填、蒸馏、索引;`.agent` 仅结构变化时),否则视为未收口。 > 计划权威来源:`.agents/knowledge/mvp-scope-and-milestones.md`(55 P0 / 137 技术项 / M0-M5)、`docs/architecture/{产品需求清单,技术架构与模块,需求模块映射}.md`(Doc A/B/C)、`docs/superpowers/specs/mvp-execution-spec-design.md`。 -> 维护:主 agent | 最近更新:**2026-06-12**(Tier1 重设计 W-T1a 收口:约束框架定稿〔15KB 废除→三层框架〕+引擎 eval-spike 终裁=**LittleJS**+模板双层架构拍板;对账至 commit `c514d60`+本次收口)。 +> 维护:主 agent | 最近更新:**2026-06-12**(T1b-α 收口:插件库 9 件+拔高样板「暖阳小卖部」**创始人亲玩主门 PASS**,好玩基线 v2 立标;同日补账渠道波/W-CLEAN/战略与审计簇〔生成主线裁定+AgentScope 终裁+NIH 审计清毒〕;对账至 commit `12716d1`+本次收口)。 --- @@ -96,7 +96,7 @@ ### P0-真实化(决定 M2-M5 能否达成,是 MVP 的真正大头) - [x] **aigc:真实生成(M2 攻坚点)✅ M2 整体收口(2026-06-10,两段证据分别引用)**——①成功率口径达标 = batch-001 实测 **80.0%**(20 创意全自动/零 infra/双锚复核,产物 `agent-loop-v1/runs/batch-001/`)∧ ②生成链路贯通 = M-b 薄轮询执行器上线(42d3237,部署 #3.1 实证:HTTP 18s/UI 27s succeeded + dodge 正确失败 + watchdog 收尸,5 独立样本全自动达终态、审计列 '0' 落库)。**真实用户在 UI 一句话→18-27s 拿到可玩游戏。** 渲染面已扩(M-b② theme/scoreLabel 入画布)。Dify 暂不部署,回调契约兼容后接零改 -- [ ] **runtime:真实编译打包**——口径已随 Tier1 重设计改写为 **Runner v2 产物**(引擎已终裁 LittleJS;GamePackage 真实产出随 W-T1b/β 落地,见 `docs/agent-specs/2026-06-11-T1引擎终裁包.md` §6) +- [ ] **runtime:真实编译打包**——口径已随 Tier1 重设计改写为 **Runner v2 产物**(引擎已终裁 LittleJS;**T1b-α 主门已过**:插件库 9 件+参考件出厂链实证;GamePackage 真实产出+Runner v2 产品化随 **T1b-β** 落地,见 `docs/agent-specs/2026-06-12-T1b-α收口报告.md` §4) - [ ] **OSS:MinIO bucket 级隔离 + 真实存取**(本波跳过,桩) - [ ] **telemetry:MQ 消费聚合 + quality_score + feed 反哺**(M5 数据回路) - [ ] **ad/trade:真实广告联盟 + pay 模块接线**(M4) @@ -140,6 +140,11 @@ --- | **Tier1 重设计 W-T1a(约束框架+引擎 eval-spike 终裁)** | 2026-06-11~12 创始人专门会话(Fable Max):①**15KB 红线废除→三层约束框架**(SLO@千元机+4G P75 / B1 入场券 gz≤350KB·raw≤1.5MB / 工程增强层 E1-E6)拍板落 `docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md`,文档回填 A/B/C 三类 11 档;②四路引擎尽调(KAPLAY「LLM friendly」证伪淘汰/自研+微库淘汰)→ **双游戏×双引擎=4 包 spike**(月光捕手 action+王蓝莓小卖部 经营/CJK,五门×4 全过零假绿,CDP 真实输入三重实证;Codex 5.5 Xhigh 评审通道首跑×3 全成功)→ Phase2 节流测量(**冷开 LittleJS 0.54-0.59s vs Phaser 2.82-2.86s=4.8~5.3×**,编译缓存省 2.1s 仅救二开起;fps/内存/CSP 全过)→ 终裁包 v1.1(**85/82**+裁量分敏感性分析:拉平后 S2 硬差+8 仍定向);③**创始人终裁=LittleJS**(2026-06-12)+ 亲玩判词「玩法简单缺艺术气息」(engine-neutral)→ **好玩基线 v2 五要素**(手感/美术统一性/音乐/结构深度/角色壳)+ **模板双层架构拍板**(核心代码模板=平台核心层 / 玩法模板=品类层带质量底线;美术=程序化系统+像素资产包混合)→ 拔高样板列 W-T1b 首件;副产=「每游戏=小增量」实测成立(游戏②净增量 2.2/2.5KB gz) | 提交链 `75d01f0`→`c514d60`(10 提交);spike 证据 `2026-06-11-tier1-engine-spike/{lane-littlejs,lane-phaser,phase2}/`;终裁包 `2026-06-11-T1引擎终裁包.md`(兼本波收口报告) | 4 包五门证据三重实证(真输入轨迹+host 单时钟七锚点+递进截图);Phase2 三遍中位+不稳定项声明;终裁包经 Codex 对抗复核 P0×3 整改;spike 代码隔离 spike 目录零碰生产路径 | +| **渠道波 W-CH(判定 HJ-CH-001 + α对比spike P0 段)** | 渠道适配判定定稿(小游戏=精选整包 L1 分发面「一壳多游·主题合集」/ H5=UGC+L2 主场,平台禁动态代码 L2 改码不上渠道;LayaAir 尽调出局;政策复核:清退谣言解除+「备案锁内容」新雷登记);W-CH-α P0 段五产物交付**验证门 6/6 PASS**(adapter 21 测绿〔逮修 1 真 bug〕/合规 schema 30 用例/probe 八锚点哈希链/SIZES 实测 C-A 主包 gz 37.5KB=4MB 闸门 0.92%·每模板边际 gz 2.9KB/双 RUNBOOK+证据校验器);C-B Cocos 实测待 Mac(创始人令延后);C1-C2 已拍(自研流即时发布+双渠道精选发行/合规为准绳) | `6fb3a33`→`bb12d30`+`270a1d9` | 判定=`2026-06-12-渠道适配判定-小游戏双渠道.md`;spike 证据 `2026-06-12-channel-spike/` | +| **W-CLEAN + 模板哲学重申** | 创始人重申**模板=LittleJS 插件/二次开发件,玩法/美术/关卡/UI=agent 生成域**(玩法模板层废除=同质化根源)→ 全档回填;奉令清除 legacy 4 模板+存量游戏数据:DB 15 表 1022 行+遥测 2 表 291 行(先归档 mini-desktop:/root/backups/w-clean-20260612/)+前端 837 行+后端白名单清空+运行 jar 重部署生效(`template/list` 空列表铁证);副作用=feed 池空→链路③⑤真走查重锚 T1b-β 后 | `2cfaed2`+`7bf2cd1` | smoke 8/12(4 FAIL 全为预期差异留档);HJ-GEN-001 终审随后(生成主线=agent 写码于插件库分档) | +| **T1b-α 插件库+拔高样板(主门=创始人亲玩 PASS)** | spec v2.1 对抗审 11 条全采纳→Gate0 七件+core-protocol-v0 冻结(受控面 6 项禁直透引擎)→8 件插件三 lane **155/155 测绿**→集成段三门 PASS(**SIZES 九件全≤配额,全栈 gz 16.5KB**,mini-desktop CDP probe 链/vfx 像素哈希)→参考件轮 1「暖阳小卖部」(Fable dev agent:logic/host 双层 49 测+mmx 资产 16 件统一水彩风)→e2e 四件套 REF_E2E PASS(**7 轮调试链全在 harness/壳侧,游戏逻辑零返工**;收编+门逮 2 真缺陷:esbuild const 赋值/canvas 压下 29px 裁底)→我判 ≈4.1 达线→**创始人亲玩判「quality passed」(轮 1/3 即过),好玩基线 v2 立标**;成本对账:Fable 单件 398,678 tok≈¥50-80(L3 顶配档参照系)、mmx quota 零差;顺手清雷:ExecutorLlmClient 显式 max_tokens=4096(`09d8678`,mini-desktop 15/15 绿) | `2446b71`→`a4b2eef`(spec/Gate0/插件/集成/参考件/e2e/判定全链);收口报告 `2026-06-12-T1b-α收口报告.md` | 155+49 node 测;SIZES 增量法实测;evidence 四件套 `games/wanglanmei-ref/evidence/round-1/`;创始人亲玩门;demo serve `100.64.0.7:4320`(t1ba-ref-play 登记保留) | +| **战略与审计簇(生成主线/agentic 基建/NIH 审计+全档清毒)** | ①创始人裁定**生成主线:Fable 只造引擎,生产生成=便宜模型**(M2.7/M3/DS-V4+harness 门兜底,W-G1 竞标实测);②agentic 基建复议(自研薄内核被推翻,同引擎终裁逻辑)→HJ-AGI-001 **终裁=AgentScope 2.x 主力**(五资产契约边界+L1 裸通路框架外定案,换轨触发写死,W-G1 即 spike 门);③NIH 自研偏误全链审计(Fable Max 只读):病理=切面性,根因 R1-R7,逮**第三案现行**(粒子/物理/后处理平行重造引擎内建)→创始人裁决①**三件改引擎能力包装层**(β 真接线门)→新规 `.agents/rules/build-vs-buy.md` 七条+**全文档清毒**(单源高危件亲笔+长尾 agent 18 改 1 新建,活文档残毒终扫清零,历史 spec 挂横幅纪律) | `8509bfd`/`430f832`→`58a30d5`/`5a40824`→`12716d1` | 审计报告 `2026-06-12-自研偏误全链审计-报告.md`;评审版 `2026-06-12-agentic基建框架选型-review.md`;清毒残扫零未标记命中 | +| **T1b-α 收口(wave-close 七步)** | 七步全跑:总账补今日五波欠账+表头;作战清单完成项移归档+完成线提请重锁;回填声明(已随清毒六连提交完成,无新增);新建 `game-runtime/.agent`(结构性新工作区);蒸馏新 skill `game-e2e-cdp-harness.md`(编排形制/驱动器六律/出厂红线);索引双同步(README+AGENTS §5);e2e runbook 自 /tmp 入库+收口报告落档 | 本次收口提交 | 提交前 30 秒自检过(表头日期=收口日;作战清单 ✅ 残留=0) | ## 7. 风险与口径提醒 diff --git a/game-runtime/.agent b/game-runtime/.agent new file mode 100644 index 00000000..7b8b98b4 --- /dev/null +++ b/game-runtime/.agent @@ -0,0 +1,23 @@ +# game-runtime/.agent —— LittleJS 增强发行版工作区(Tier1 引擎+能力插件库) + +> 进度一律以 `docs/mvp/MVP进度总账.md` 为准,本文件只记**职责边界与结构**。 + +## 定位 + +平台维护的「LittleJS + 插件套件」增强发行版工作区:引擎能力插件(碰撞/手感/粒子/物理/调色板/音频/存档/探针等)即插即用、可组合、版本化。**玩法/美术/关卡/UI 不在此层**——四者是 agent 造游戏时的生成域(2026-06-12 模板哲学重申)。 + +## 结构 + +- `src/core/` — core-protocol-v0:Plugin 接口+注册器+受控面(6 项,禁直透引擎) +- `src/plugins/` — 9 件插件(_example 为活样板,规格模板=`docs/PLUGIN-TEMPLATE.md`) +- `schema/` — plugin-manifest schema(零依赖校验器在 scripts/) +- `scripts/` — build/size/test/validate(esbuild 打包;SIZES.md 由 size.mjs 生成勿手改) +- `test/harness/` — 浏览器证据 harness(CDP) +- `games/wanglanmei-ref/` — 拔高样板「暖阳小卖部」(好玩基线 v2 立标件;LOOP-LOG.md=循环台账;test/=e2e 驱动+runbook;evidence/=四件套证据) + +## 边界与现状 + +- **裁决①(2026-06-12 创始人拍)**:粒子/物理/后处理三件须改**引擎能力包装层**(包 littlejsengine 内建而非裸 Canvas2D 平行重造);β 设真接线门(bundle grep 实证含 littlejsengine)+受控面开包装透传通道+SIZES 按「引擎+包装层」重锚。collision/gamefeel 确为引擎缺件,维持自研。 +- T1b-α ✅ 主门过(创始人亲玩 PASS);收口报告=`docs/agent-specs/2026-06-12-T1b-α收口报告.md`。 +- TODO 归 T1b-β(双 spec 先行):裁决①落地 / Runner v2 产品化 / 1.x 退役 / 参考件入 feed / P7-P8 决策。 +- 插件协议升格正式契约 = W-G0 第 9 契约组(契约权威在 `contracts/`,此处为实现)。 diff --git a/game-runtime/games/wanglanmei-ref/test/ref-e2e-runbook.sh b/game-runtime/games/wanglanmei-ref/test/ref-e2e-runbook.sh new file mode 100755 index 00000000..2375d072 --- /dev/null +++ b/game-runtime/games/wanglanmei-ref/test/ref-e2e-runbook.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# ref-r1-runbook.sh — 参考件轮 1 ④评估段编排(仅 mini-desktop;主会话经 ssh bash -s 投递) +# 形状沿 run-integration.sh:不跑 -e 全局(探活/清理容错),关键门各自判退出码;长驻进程一律 systemd-run。 +set -u +SHA="${1:?需要精确 commit SHA}" +SCRATCH="$HOME/t1ba-ref-r1" +RT="$SCRATCH/game-runtime" +EV="$RT/games/wanglanmei-ref/evidence/round-1" +PORT=4320 +CDP_PORT=9222 +U_SERVE=t1ba-ref-r1-serve +U_CHROME=t1ba-ref-r1-chrome + +echo "=== [0] 环境与净场 ===" +hostname; node --version +systemctl stop "$U_SERVE" "$U_CHROME" 2>/dev/null; systemctl reset-failed "$U_SERVE" "$U_CHROME" 2>/dev/null +rm -rf "$SCRATCH" + +echo "=== [1] scratch 检出精确 SHA ===" +git clone -q --depth 50 --branch dev/2.0.0 ssh://git@101.200.34.71:2222/zizi-al/games-development-ai.git "$SCRATCH" || { echo "GATE: CLONE FAIL"; exit 1; } +git -C "$SCRATCH" checkout -q "$SHA" || { echo "GATE: SHA FAIL"; exit 1; } +echo "checkout=$(git -C "$SCRATCH" rev-parse --short HEAD)" + +echo "=== [2] 依赖+构建(esbuild 锁参) ===" +cd "$RT" || exit 1 +npm init -y >/dev/null 2>&1 +npm i --no-audit --no-fund esbuild ws >/dev/null 2>&1 || { echo "GATE: NPM FAIL"; exit 1; } +node scripts/build.mjs games/wanglanmei-ref/entry.js games/wanglanmei-ref/dist/ref-bundle.js --global-name=WanglanmeiRef || { echo "GATE: BUILD FAIL"; exit 1; } +ls -l games/wanglanmei-ref/dist/ref-bundle.js +echo "GATE: BUILD OK" + +echo "=== [3] IP gate(产物+对外文本,码位构造防自触发) ===" +node -e " +const fs=require('fs');const b=String.fromCharCode(0x738b,0x84dd,0x8393);let bad=false; +for(const f of ['games/wanglanmei-ref/dist/ref-bundle.js','games/wanglanmei-ref/index.html','games/wanglanmei-ref/assets/manifest.json']){ + const hit=fs.readFileSync(f,'utf8').includes(b);console.log(f, hit?'VIOLATION':'clean'); if(hit) bad=true; +} +process.exit(bad?1:0)" || { echo "GATE: IPGATE FAIL"; exit 1; } +echo "GATE: IPGATE OK" + +echo "=== [4] 起 serve+chrome(systemd-run durable 单元) ===" +mkdir -p "$EV" +systemd-run --unit="$U_SERVE" --setenv=NODE_NO_WARNINGS=1 \ + /usr/bin/env node "$RT/test/harness/static-serve.cjs" "$RT/games/wanglanmei-ref" "$PORT" >/dev/null 2>&1 +CHROME="$(command -v google-chrome google-chrome-stable chromium chromium-browser 2>/dev/null | head -1)" +[ -n "$CHROME" ] || { echo "GATE: NO CHROME"; exit 1; } +systemd-run --unit="$U_CHROME" "$CHROME" --headless=new --no-sandbox --no-zygote \ + --remote-debugging-port=$CDP_PORT --remote-allow-origins='*' --autoplay-policy=no-user-gesture-required \ + about:blank >/dev/null 2>&1 +echo "units: $U_SERVE / $U_CHROME ($CHROME)" + +echo "=== [5] 探活门(就绪等待→serve 5×6s 持续在线 + CDP 就绪) ===" +# 就绪等待:listen 绑定有毫秒级延迟,首拍 curl 会竞速误杀(2026-06-12 run3 实翻)——先容忍 10×0.5s。 +READY=0 +for i in $(seq 1 10); do curl -sf "http://127.0.0.1:$PORT/" >/dev/null && { READY=1; break; }; sleep 0.5; done +[ "$READY" = 1 ] || { echo "GATE: SERVE NEVER READY(5s)"; journalctl -u "$U_SERVE" --no-pager | tail -10; systemctl stop "$U_SERVE" "$U_CHROME" 2>/dev/null; exit 1; } +ALIVE=1 +for i in 1 2 3 4 5; do + curl -sf "http://127.0.0.1:$PORT/" >/dev/null || { ALIVE=0; echo "probe $i: serve DOWN"; break; } + echo "probe $i: serve OK"; [ "$i" -lt 5 ] && sleep 6 +done +[ "$ALIVE" = 1 ] || { echo "GATE: SERVE FAIL"; systemctl stop "$U_SERVE" "$U_CHROME" 2>/dev/null; exit 1; } +CDPOK=0 +for i in 1 2 3 4 5 6 7 8 9 10; do curl -sf "http://127.0.0.1:$CDP_PORT/json/version" >/dev/null && { CDPOK=1; break; }; sleep 2; done +[ "$CDPOK" = 1 ] || { echo "GATE: CDP FAIL"; systemctl stop "$U_SERVE" "$U_CHROME" 2>/dev/null; exit 1; } +echo "GATE: SERVE+CDP OK" + +echo "=== [6] e2e driver(四件套取证) ===" +node games/wanglanmei-ref/test/e2e-input.cdp.cjs "http://127.0.0.1:$PORT" "$EV" 2>&1 | tee "$EV/driver-console.log" +RC=${PIPESTATUS[0]} +echo "driver rc=$RC" + +echo "=== [7] 轮终收尾(停 unit+日志归档,不留孤儿) ===" +journalctl -u "$U_SERVE" -u "$U_CHROME" --no-pager 2>/dev/null | tail -120 > "$EV/serve-units.log" +systemctl stop "$U_SERVE" "$U_CHROME" 2>/dev/null +systemctl reset-failed "$U_SERVE" "$U_CHROME" 2>/dev/null +ls -la "$EV" +echo "=== RUNBOOK DONE rc=$RC ===" +exit "$RC"