17 Commits

Author SHA1 Message Date
lili
882ca3f357 feat(cheap-gen): W-AXIS 波2 判定语义重置——独立模型玩法判定阻断+拆残笼+判定档切 M3
裁定三落地:accepted = 机械预筛 ∧ 独立模型玩法判定,九门 pass 降为「未见明显死」预筛。

- 波2a 玩法判定器(cheap_verify.py):读 brief+run-summary+全程截图(含新增局中连拍
  midplay-1..N,play.cdp.cjs 只读并发拍、不进任何门判据),布尔裁 broken/hollow/off_brief,
  fail-closed;判定真相层落 evidence/judge.json + verdict.json 写回 accepted/judge 段;
  金标夹具 fixtures/judge-golden/ + judge_golden.py 校准跑批
- 波2b 拆残笼:check 词法 tokenizer 替换 stripCode 正则(字符串内 // 假阴根修,292 在册
  源零差异);prompt v1.6.3 外科清洗(两层奖励→纯设计语/删盲驱动器围设计/删熔断恐吓),
  registry 热取==内置逐字节一致(cheap_roles 内置回退同步);edit_file 空白归一+近似片段提示
- 判定器补修:空输出有界重试一次(glm 思考吃光 max_tokens 时 content 空)+重试放大公式
  反缩 bug 修(旧 min(×2,6000) 大 base 反缩)+finishReason 落盘;imagesSeen 模型自报+
  盲检微扰重掷、两掷均盲=仪器故障 degraded(闲鱼中转静默丢图实锤,不再错杀 hollow)
- 判定档切 MiniMax-M3(创始人 2026-07-10 拍板,裁定三①边界随 v2 plan 修订):
  generation.yaml judge.model+max_tokens=202752(512K 网关实探 400 拒,取实探上限);
  3 例盲案 M3 重判全 accept、¥0.026/局
- 三路消费对齐:CLI 预筛语义修(cheap_studio 喂 verdict.pass 而非 finished,违裁定三的
  放行已纠)/Service 路 apply_gameplay_judge 显式 prefilter 参数/result_out 权威改读
  accepted(无键回落预筛,旧产物兼容)+trace.gameplayJudge additive 透传;
  tier2 gate_judge/genconfig 同步判定配置与消费

测试:test_gameplay_judge 33 项新增,全仓 pytest 480 绿;真判定闭环 accept ¥0.061。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 04:27:18 -07:00
lili
69307df8a5 fix(cheap-gen): 修 check 假阴性——stripCode 字符串内 // 致级联误抹真代码
n=5 跨主题验证 trpg-cyber 失败根因坐实:赛博主题文案用 '> JACK IN // FLOOR 01' 这类
字符串内含 //。旧 stripCode 用 5 条独立正则(先剥行注释、再剥字符串),字符串里的 // 被
行注释正则误当注释、吞掉闭合引号 → 引号失衡 → 后续字符串正则跨行匹配 → 级联误抹 169 行真
代码(bundle.tick/_forensicsView/handleTap 一起抹)→ check 误报三红线缺失 → 模型明明写对
却被反复拒 → thrash 到步数硬顶熔断、烧 ¥13.84 失败。

根治:stripCode 改单遍左→右状态机(码/行注释/块注释/单引/双引/模板 六态),同一时刻只一种态、
嵌套的 // 与引号各归其态绝不越界——「注释与字符串互嵌」词法问题唯一正确解。逐字节保长、换行
保留(红线行号定位不变)。影响面广:任何 game-logic 字符串含 //(URL/路径/N//M/科技赛博文案)
都触发假阴性,部分历史失败率实为此 bug 冒充模型质量差。

验证:trpg-cyber check.ok false→true;heritage/narrative 无回归;amodel-gen 35/35 绿
(check-banned 加 2 条 //-in-string 回归守卫)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 04:27:17 -07:00
lili
b63fd1b8f7 fix(cheap-gen): 死圈修复 fix②-check 红线报错带确切行号 + edit_file 补救指向
问题:红线判定原只输出正则 source(如"禁用 \bMath\.random\("),agent 拿不到
行号、要靠整文件重写去猜改哪行;且旧 stripCode 把跨行块注释塌成单空格,若据
stripped 串算行号会漂。这正是死圈触发面之一——报错越模糊,越逼 agent 整文件重写。

改动:
· stripCode 改为"内容抹成等量空格、保留换行":结果串与原文行号一一对应,
  长度不变且不误匹配(空格非 \w/`.`),既有 5 处调用点(形状门/API 门/结构门)语义不变。
· 抽出可测的 _bannedLineErrors(rawSrc, f):整串正则做权威判定(不漏 \s* 跨行写法),
  逐行定位命中行号(1-based、最多列 10 处),报错带"红线 X 第 N 行 + 用 edit_file
  改回 ctx 形态、别整文件重写";函数内回退/typeof 守卫后的裸调、任意嵌套照样命中。
· check 第3节红线块改调 _bannedLineErrors(同 _shapeGateErrors 抽法)。

测:新增 check-banned.test.mjs 7 测(行号正确/跨行块注释不漂/多处逐行/typeof 守卫
后仍命中/注释字符串零误杀/合规零报)+ 回归 check.test.mjs 8 形状测 + check-undef,
33 pass 0 fail 0 skip,exit=0(stripCode 改动未破坏既有门)。

待续(本计划剩项):fix③ brief 落 evidence、fix①-B 共享 tier2 熔断窄口径纠偏、n=5 收敛环。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 02:19:56 -07:00
lili
8a566c9e0e feat(amodel-gen): check 门加模块内未定义标识符+import断链静态扫描(4例实证失败模式)
动机:便宜档 M3 生成的代码语法过 check、运行时才炸,九门才拦得住,浪费整局——
解谜 gen3(renderMenu 用未定义 cy → 卡菜单 E/G/H 连锁挂)/ gen6(stepUntilMs 未定义
uncaught)/ 非遗首败(import 断链模块级即炸);node --check 只查语法不查引用。

- 新增 check-undef.mjs:esbuild(树内现货 devDependency,build 步同款)当作用域分析器,
  零新依赖、零手写 parser——
  ① 未定义标识符 = transformSync + define 探针(define 只替换模块内任何作用域都未声明的
     自由变量;声明全形态 var/let/const/函数提升/类/参数/解构嵌套默认值/catch 参/import
     绑定由 esbuild 生产级 parser 认定,实测 12 形态零误认);
  ② import 断链 = buildSync(bundle,write:false) 以 game-logic.js 为根整图静态解析
     (named/default/re-export 缺 export 的 error、namespace 成员缺 export 的 warning
     ——后者正是既有 build 步按退出码拦不住的形态、模块文件不存在的 resolve error);
  报错为生成 agent 可照修的中文(文件+行+标识符名+一句修法);esbuild 不可用(零依赖
  环境)静默降级,check 其余门照跑。
- tools.mjs check() 挂第 6 节:生成侧五文件(game-logic/core/render/balance/assets)
  逐模块扫 + 断链整图解析;输出协议(PASS/FAIL+明细)与退出码语义不变。
- 零误报口径:白名单取宽(ES 内建+浏览器宿主,"能不能用"归红线门、本门只管定义与否);
  typeof 直用守卫名/双下划线名/上下文关键字名/中文标识符/动态下标列为已知漏报面,宁漏勿误。
- 单测 15 项全绿:三实证失败模式必红且文案含标识符名 + 隐式全局赋值必红 + 声明全形态/
  typeof/globalThis/属性/对象键/label/字符串/注释零误报 + 8 现存正样本(6 模板+2 few-shot)
  0 报固化为持续回归门 + 语法坏文件不崩不添噪。
- 验证:新测 15/15 + 既有 check.test 11/11 零回归 + 7 完整正样本 scaffold-saa+check 全
  PASS(_template 仅既有 2.5 节设计内报错、新门零添报)+ 注入三类 bug 端到端 check CLI
  必红 + pytest cheap-worker 回归门 6/6 + node --check 全过。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 00:19:50 -07:00
lili
47d6394347 feat(cheap-worker): per-genre 脚手架路由接入 scaffold_template/scaffold_desc(扩模板数据点)
扩模板需让难品类 AI 从预置品类骨架起步、少写。接入(全缺省回落 _template、create 路零改):
- tools.mjs scaffoldSaa(gameId, templateName='_template'):clone 指定模板;CLI 加第 3 参;模板缺失 warn 回落。
- cheap_run.scaffold(game_id, template=None):shell-out 透传模板名。
- cheap_studio.run_studio(scaffold_template, scaffold_desc):线程到 prep + build_system_prompt。
- cheap_roles:system prompt 脚手架描述参数化(⟦SCAFFOLD_DESC⟧),让 AI 知道起点已是该品类完整游戏、换皮而非重写。

管线 routing 单测 27/27、prompt 参数化 8/8。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 01:39:05 -07:00
lili
619351052d feat(cheap-gen): 阶段一B #1 ctx.random/ctx.time 改可调用(双 API·向母语直觉,最高频)
附A #1(最高频·每游戏用):ctx.random/ctx.time 原是对象、须 .next()/.nowMs(),AI 直觉 ctx.random()/
ctx.time() 当函数调会抛错——prompt/形状门都教"是对象不是函数"当幻觉拦。改成双 API:既可直接调用
(ctx.time()=毫秒、ctx.random()=[0,1))又保留全部方法(.nowMs()/.elapsedMs()、.next()/.range()/.reseed()),
向后兼容(框架/插件内部仍用方法形态)。

单点实现:boot-game-host 复用 createHostDevContext(单一 context 源),故 buildContext 一处包装即覆盖
host-dev + 真游戏。加 _callableTime/_callableRandom 双 API 包装器,ctx 装配处 time/random 包装。

全链路同改:plugin.js(包装器+装配)+ tools.mjs(CTX_METHODS 加 time/random、API 门错误文案翻转)
+ prompt.mjs/cheap_roles.py 双源(调用形态翻转:两形态都对、但 ctx.nowMs() 漏 .time 仍错)+ skill:144。
验证:core plugin 31/31(核心不破)+ 确定性(ctx.random()/time() 可调用 + .next()/.range()/.reseed()/
.nowMs()/.elapsedMs() 双 API)+ 形状门 11/11 + [check] PASS(双形态同段)+ cheap-worker 16/16 + 双源一致。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 01:39:05 -07:00
lili
13126a08ca fix(amodel-gen): API 静态门方法名提取支持泛型声明(治 save.get<T> 被误判不存在)
#5 九门 gen 暴露的正交真 bug:check 的 API-存在静态门用正则
/(?:^|\n)\s*(\w+)\??\s*\(/ 抽 api.d.ts 方法名,遇泛型声明 `get<T = unknown>(`
时 \w+ 后是 `<` 非 `(`、抽不到 `get`,把真实存在(impl + api.d.ts:79 都有)的
save.get 误判"方法名幻觉不存在"→ 误杀一整类带存档持久化的游戏(高分榜等)。
修:两处方法名正则加可选泛型段 (?:<[^>]*>)?(apiMethodSet + apiVoidMethodSet)。

验证:形状门单测 11/11;针对性 check 一段同用 save.get('best',0)+sessionScore.add+
drawButton 的 game-logic → [check] PASS(三者均不再误判)。over-permissive 取向不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 01:39:05 -07:00
lili
dc49f5f866 feat(cheap-gen): 阶段一B #5 drawButton 改返命中矩形(黄金首件·治 #1 翻车点根因)
降AI参与·阶段一B 改签名第一处(附A #5)。逐插件改逐插件回归的黄金样板。
drawButton 由返 void 改为回吐它绘制的归一化命中矩形 {x,y,w,h}——AI 的直觉写法
const btn = hudUi.drawButton(g,{x,y,w,h},{label}); if (hudUi.pointInRect(px,py,btn)) 现在就对,
治了 #1 翻车点(drawButton 返 void 误用→变量恒 undefined→命中短路→卡菜单)的根因,而非教绕路。

全链路同改(漏一个造新脏数据):
- hud-ui/impl.js:drawButton 模块函数 + 实例方法回吐归一化矩形 r(g=null 也回吐、绝不 undefined)
- hud-ui/api.d.ts:模块函数 + 实例方法 两处 :void → :Rect + JSDoc
- tools.mjs 形状门:删 drawButton 特例分支(api.d.ts 改后自然掉出 void 名集),
  泛化判据留给仍真返 void 的方法(drawText/drawPanel/drawBar/play/flashScreen)
- prompt.mjs/cheap_roles.py(双源)/skill:指引由"返void绝不接"翻为"回吐命中矩形可直接 pointInRect"
- check.test.mjs:drawButton 测试反转(赋值不再拦)+ 链式测改 drawText
- test_roles.py/test_toolkit.py:footgun 断言 + 形状门 drawButton 测试随签名更新

验证(逐插件回归矩阵):
- 形状门单测 11/11(amodel-gen)+ cheap-worker test_roles/test_toolkit 16/16 + hud-ui 19/19
- 确定性 impl 铁证:drawButton 回吐 {x,y,w,h}、g=null 不 undefined、回吐矩形直接 pointInRect 闭环
- 真生成代码(菜单+按钮游戏)用了 drawButton、check 未拦 drawButton,证明 #5 不破坏生成
- 双源 drawButton 文案一致;prompt.mjs node --check + cheap_roles.py py_compile 绿

正交发现(非 #5):该局九门 gen 栽在 save.get() 方法名幻觉(save 插件无 get)——
是另一处方法名摩擦,记为阶段一B 后续/补密度候选,不在 #5 范围。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 01:39:05 -07:00
lili
6b334ff738 feat(amodel-gen): 形状门泛化到全 void 方法返回值误用 + 防回归单测(M1 U1)
KTD2 实证现有形状门已接住 base2/base3 两类已知幻觉(check 跑两款各 FAIL 于唯一形状门
错误;翻车产物早于形状门落地 3.5h),据此把形状门①从硬编码 drawButton 泛化为
apiVoidMethodSet 全 void 方法的赋值/链式返回值消费检测,②补 define 数组批量变体。形态
收窄到赋值/链式——base1/4/5 合法 void 调用(独立语句 / if(guard)call() 防御写法)实证
零误杀;条件/参数形态会误杀防御写法,移交 WU-C 5.4。判定抽 _shapeGateErrors 便于单测。

验证:check.test.mjs 11/11(靶子 catch + 泛化4方法 + 链式 + 零误杀6类);check base1-5
行为不变(base1/4/5 PASS、base2/3 FAIL);真跑重新生成打地鼠过九门(E_live 进对局
distinctStates=52、H_progress score 0→44)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 02:01:20 -07:00
lili
9fe50a4fee fix(amodel-gen): 治便宜档生成幻觉 + 补 play-spec 链路(九门基线剩两层根因)
便宜档九门基线诊断后,治创始人选的剩两层:
- 层1 生成幻觉:M3 对插件参数形状/返回值幻觉(drawButton 返 void 误赋值、
  sceneFsm.define 单对象批量),check 门只查方法名存在 → 带病过 check+build+smoke。修:
  · prompt.mjs + littlejs-game-dev.md 补两条 footgun 正反例(drawButton 返 void、
    命中用 pointInRect;define 逐场景调)
  · tools.mjs check 加形状静态门(拦 drawButton 返回值赋值 + define 单对象批量)
- 层2 链路假绿:stage 不产 play-spec → 裸跑 driven=false → E/H 降 advisory → 假绿。修:
  · tools.mjs ensurePlaySpec 据 _forensicsView 形态自动推 driver(有 targets→tap-targets/否则 key-cycle)
  · play.mjs smokeBoot 抓 _forensicsView().state();gen.mjs done 门 smoke 绿后调用

验证(vf-* 干净重跑):
- check 形状门对 base1/4/5 好游戏零误伤、对 base2/3 幻觉精准命中
- vf-mole 打地鼠(base2 同类):卡menu/E·G·H挂 → 九门全过、进 play(drawButton 幻觉治好)
- vf-2048 合成(base3 同类):define 已写对(幻觉治好);仍卡 menu = 新发现 key-cycle driver
  缺起局点击(menu 用 tap、play 用 key)= 第三层 driver bug、非本两层,下一步小修
- 两款 playspec 自动产、driven=true(假绿终结)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 23:15:42 -07:00
lili
57c30909cd feat(amodel-gen): Phase1 设计 agent(--mode design,读真 sim skill)+ API-存在静态门 + sim skill 扩
承 Phase1 执行版(2026-06-23-design-agent-phase1-execution.md)U5/U1/U2/U4。

U5 sim skill 扩:补「进货→库存→售卖→补货」资源环范式(经营核心,治"没进货")+ 客流/出现节奏目标值
  区间(治"顾客太快":清闲 ~2.4s/3/6s、rush 起点 ≥35s)+ §10 标注可机检 N=4(即时反馈/可见成长/解锁/音反馈 + 经营加经济扣减)。

U1+U2 设计 agent:gen.mjs 加 --mode design(tool-using 策划 agent:read_file/list_dir/done,M3,scaffold-free,
  日志走 stderr / stdout 末行 JSON {ok,designText,gatespec})+ prompt.mjs buildDesignSystemPrompt(薄指令指
  **read 真 sim skill 不手抄** + 可达性自检 + 好玩 N-of-8 + 结构化 gatespec)+ normGatespec 容错(M3 偶把
  assertAfterPlay 包成 {item:[]}/expectLatch 写字符串 → 拍平)。
  验:一句话经营 brief → 读 sim skill → 8.5KB 玩家视角设计稿(含进货环 + 节奏目标值表 rush≥5min + 好玩自检)
  + clean gatespec(expectLatch:true / score↑ / currency↓ 经济断言 / inventory changed)。

U4 API-存在静态门(tools.mjs check,玩法无关):游戏调的 plugins.<键>.<m>()/ctx.<m>() 必须在 api.d.ts 真存在
  → 廉价根除"方法名幻觉"类(stopBgm/defineScenes/ctx.nowMs);键→dir 映射(juice→particles-juice 等);
  只查已知插件键+ctx、非键跳过(over-permissive 少误报)。验:_template 零误报 + 抓 stopBgm/ctx.nowMs
  + 不误伤 loop/ctx.log。

待:U3(designNode amodel 路 shell-out,Java/mini)+ 本地 e2e(design→code 验更好玩)+ U6 蒸馏。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 10:28:16 -07:00
lili
88d3a23787 feat(amodel-gen): 根治B(input→L1 handleTap)+driver起局扫点+5 footgun蒸馏+wanglanmei E2E→studio可玩
根治 B(缩 M3 错面,结构性根除"点击在错 phase 消费/永不消费→启动不了"):
- input 订阅收归 L1(_template/src/game.js wrapper):L3 只写实例方法 handleTap(x,y)/handleKey(key),
  L1 在 pointerdown/keydown 直达派发;_template/src/game-logic.js 范例改用 handleTap。
- tools.mjs check:拦 ctx.getInput + 必须暴露 ≥1 输入方法;prompt.mjs/README/skill 同步输入契约。
- 机制+门双实证(node 全链路:menu→点开始→play、点客加分、点空白不加分;check 对 getInput/零输入方法拦截)。

driver(play.cdp.cjs):occupied 族起局从固定点 (195,422) 改中线纵向扫点,robust 命中各游戏「开始」按钮
  (原固定点落空→死菜单假阴;实测 wanglanmei「开门营业」在 y≈502)。

资产通道(boot-game-host.loadHostAssets + gen.mjs --assets-dir):M3 只决定怎么用资产、不造。
入库工具 publish-amgen.mjs:staged bundle → game_runtime_package(package_json.engineBundle,status=1)→ studio /play。

5 个 M3 footgun 蒸馏进 prompt.mjs + skill(均 wanglanmei-v2 实测翻车):
  ① scene update 回调签名 (dt) 非 (running,dt)  ② ctx.random.next() 非 ctx.random()
  ③ ctx.time.nowMs() 非 ctx.nowMs()  ④ _forensicsView 的 phase/targets 必须在 state() 内实时算(否则定格 boot 快照)
  ⑤ update(dt) 的 dt 是秒,毫秒计时要 ×1000。

验证:M3 生成 wanglanmei-tycoon-v2(+上述 5 footgun 修复)→ 九门 PASS(score 0→364,distinct 43/43)
  → 入库 → studio /play/80002/80002 加载+boot+渲染菜单真玩(art 走程序化回退,水彩 art 需引擎资产线 E2/E3)。
  (root-fix A 门可信化先于 cbe42933 提交;SAA Java 驱动绑定另track 暂不入此 commit)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 05:48:03 -07:00
lili
8ac4ccc861 feat(amodel): B 收尾——_forensicsView 必需(可测性红线)+ E_live/H 未驱动时降 advisory
创始人 B 裁:E_live/H 暂降 advisory + _forensicsView 必需 + 转优化循环。
- _forensicsView 必需:prompt 红线 + check() 验 game-logic 含 _forensicsView + skill(可观测红线;M3 之前当可选丢了致 H_progress 读不到 state)。导出 {phase,score[,targets]}。
- E_live/H_progress advisory:play.cdp.cjs verdict 改——未被驱动(spec 无 driver 且无 inputs)时这两门降 advisory(仍跑+报告 verdict.advisoryGates,不计入 pass)。自动可逆:将来 design 产 driver→driven=true→恢复致命;factory/gamedef 有 driver→不受影响。
- prompt/skill 同步:关键事件用 ctx.log 记日志(承接日志基建)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:26:42 -07:00
lili
32fd756f3f feat(amodel): 落地 3 层架构——L1 全11插件固定 + game.js 拆 wrapper/game-logic + L3 扁平契约
实现创始人 3 层模型(评审稿 2c220c13):
- L1 工程骨架(LLM 不写,writeFileTool 拒):host-config 注入全 11 插件(编排4+save+gamefeel/juice/palettePost/audioMusic/collision/physics,registerOrder 合集显式定义,viewport 硬编码 390×844 下传)+ game.js 薄 wrapper(摊平 opts.runtime→交 game-logic)。
- L3 游戏代码(LLM 只写):新 game-logic.js = createGame({plugins,bundle,viewport}) 收扁平件(无 opts.runtime 嵌套坑);必写 1=game-logic,core/render 推荐拆可内联。
- harness:tools.mjs check/真改写守卫迁 game-logic.js + 验 export createGame;writeFileTool 拒全 L1 文件(host-config/game.js/index.html/entry-bundle/entry/main)。
- prompt.mjs + skill + README:全对齐扁平契约 + 11 插件键 + 手感二分(方法名以 api.d.ts 为准,修 burst 幻觉)。

验证(全绿):
- M1 控制门:全11插件一起 boot(ctrl11 smoke PASS)+ 拆分后 boot(ctrl12 smoke PASS)——两个从未跑过的组合都过。
- 端到端 newarch1(M3 写 game-logic):**ok:true / 7 步 / 102s / 82K token / smoke PASS**,且 **M3 只写 1 文件 game-logic.js**。对比修前(5文件含wiring/thrash21-70步/600K+常失败)→ '降低 LLM 的活' 彻底兑现。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:08:46 -07:00
lili
d56ed9962e feat(amodel-gen): host-config 设为固定 plumbing——根除 M3 插件 wiring 错类(reading 'w' 终解)
钻 reading 'w' 钻到真根:M3 游戏逻辑写得了(check+build 过),但反复搞坏 host-config 插件 wiring(viewport 漏键=reading 'w' / registerOrder / game.js 漏 .plugins=reading 'define'),修一个露一个=whack-a-mole。创始人批准结构性修复方向。

改动:
- _template/src/host-config.js:viewport 硬编码 390×844(去掉 import W/H from render.js)——解耦 agent 的 render.js,agent 改 render 不再能让 viewport 失值。
- tools.mjs writeFileTool:物理拦截 src/host-config.js 写入(agent 改不了固定 plumbing)→ 根除 viewport/registerOrder 整个 wiring 错类。
- prompt.mjs:agent 只写 game/core/render/assets(host-config 进固定 plumbing 清单、write 会拒);可用插件键直接列(sceneFsm/sessionScore/hudUi/timerScheduler/save);去掉已被结构性根除的 viewport footgun,保留 game.js 取插件走 opts.runtime.plugins 两层的 #3 footgun。
- littlejs skill:host-config 标【固定 plumbing·不写】+ ❌→✅ 同步。

验证(standalone whack wfix4):**ok:true / 13 步 / smoke PASS(booted+frames)/ 6min / 180K token** —— wiring 错类全消失,M3 活变小、收敛比此前(21/70 步 thrash)快得多。对齐主流(框架 boilerplate 固定 + 用户写游戏)。aligns D1=A(agent 仍手写全部游戏逻辑 src/,仅 boilerplate 固定)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 08:28:02 -07:00
lili
cd2903baab feat(amodel-gen): Phase 2 批A — harness SAA-mode(__GameBundle 信封 + stage + 循环内 smoke-boot)
execution spec v3 Phase 2 批A(harness 侧·集成 C):
- 新增 games/_wg1-gen/_shared/entry-bundle.amodel.template.js:per-game 多文件信封,导出 bootGameHost + 经 --global-name=__GameBundle(治 review B2;game 根 entry 用 2-up、src/* 用 3-up)。
- tools.mjs:scaffoldSaa(_template + SAA 信封)/ buildSaa(__GameBundle)/ stage(原子 tmp→rename 到 _wg1-gen/<gameId>/,治 review B1)。
- play.mjs:smokeBoot(SAA 信封 __genBooted 同进程 boot+帧检,治 review HIGH-1)。
- gen.mjs:--mode saa --game-id;done 门加 stage + smoke-boot;stdout 末行 JSON 契约;max-steps 默认 45 + 12min 墙钟上限 bound thrash。
- prompt.mjs + littlejs-game-dev.md:幻觉 API footgun(❌defineScenes→✅define、❌opts.ctx→✅boot.ctx、修 bug 别引入 Math.random、方法名以 api.d.ts 为准)。

验证:控制组(_template SAA 信封)+ saae2e4 e2e 全绿(agentic→__GameBundle→stage→smoke→stdout JSON);HIGH-1 smoke-boot 两次实测捕获"编译过但起不来"。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 04:12:06 -07:00
lili
6e388d9bbb feat(amodel-gen): agentic A-model 生成 harness(ReAct+M3)+ skill + 四层设计
spike 验证通过:M3 经 new-api(openai+tools)agentic 自闭环产出可玩 A-model 游戏。

- harness game-runtime/tools/amodel-gen/(tools/play/m3/prompt/gen.mjs,零三方依赖):
  scaffold(clone _template)→ ReAct(read/write/list/check/build/done;done 门=check+build 绿;
  compaction + loop-detection)→ 循环外 play(headless Chrome boot+截图+交互 = 能跑能玩)。
- 3/3 玩法干净自闭环实证:打地鼠 / 陨石躲避 / 反应点击(13-22 步,175-378K token,play PASS)。
- skill .agents/skills/agentic-amodel-generation.md(链路/配方/8 坑/M3 实证/主流定性)+ README/AGENTS 索引同步。
- 设计 docs/agent-specs/2026-06-21-agentic-amodel-generation-design.md(§0 整链路 current→new + 四层 + §0.8 主流对照;draft 待 §6.8 双评审)。

取代旧 gamedef/factory 单次产线(A-model 生产形态);production 删 gamedef 待双评审(D1=A 无退路)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:50:38 -07:00