lili
|
8ea972340e
|
chore: 工作树散落活账整理提交(多工作线)
- .gitignore:忽略 AgentScope 2.0.2 源码克隆(.claude/skills/agentscope-skill/agentscope/,本机开发直读参考、~17MB、含自带 .git、非本仓产物、可重克隆)
- .claude/skills/agentscope-skill/SKILL.md:agentscope skill 更新
- contracts/prompts/04-config/cheap-system.md:便宜档 system prompt 加「核心操作非无脑」第9条好玩自检(否决项:⑨不命中则①-⑧全中也只是有元素的无趣游戏)+ 决策层与九门自动验收解耦(基础分保盲驱动器过门 / 技巧分给真人爽感)
- game-runtime/evidence/integration/evidence.json:集成 evidence 更新
- game-studio/public/mock-manifests/:U5+U2 真 UI 走查 runbook + walk 脚本 + mock manifest
- wg1/gen-worker/results/gamedef-quickcheck.json:bake-off 结果(同既有 27 tracked 同类)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-01 19:00:42 -07:00 |
|
lili
|
e6525aaa3d
|
feat(cheap-worker): 便宜档生成丰富度 + M1 达标门富化重验(切片一 A/B)
接 sim-business 设计指导到生成 agent(cheap_roles+prompt.mjs 双源,先设计后写码+MVP-first);新建纯 LLM 丰富度验证 agent cheap_verify(非阻塞·不进 verdict·零 code-presence 断言,红线落地);bake_off 加 richness 列;cheap_roles 三级回落配置热取(C2a 加载器);cheap_studio trace 接线(C1b)。富游戏 M1 三品类各 5/5=100% 过九门达标。测试 test_roles 12 / test_cheap_verify 11 / test_bake_off 17 / test_cheap_trace 4 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:06 -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
|
9ddd173c06
|
feat(cheap-worker): 经营品类黄金脚手架 _template-shop(扩模板数据点)
蒸馏 6/7 过九门的 bake-shop-serve 实证 pattern 成 per-genre 黄金骨架:
顾客→桌位→上菜收钱→耐心→限时循环 + _forensicsView 的 targets/score 取证契约
(自动驱动器据此点 occupied 桌驱动上菜、score 涨过 H_progress)。母语化 API
(sessionScore.add / juice.burst / drawButton 返命中矩形)+ core.js 顶部多样性参数
空间(DISH_MENU/数值)+ fill-in 标记界定结构层 vs 身份层;修 patienceRatio 的
_elapsedMs 潜伏 bug。独立过九门(H_progress score 0→154),core 单测 8/8。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
f9393ccbb8
|
feat(cheap-gen): 阶段一B #12 collision Aabb 统一接受 {x,y,w,h} 与 {x,y,hw,hh}
附A #12(最后一处·几何约定统一):collision Aabb 用中心+半宽高 {x,y,hw,hh},与 hud-ui Rect/
drawButton 的 {x,y,w,h}(左上角+尺寸)不一致——AI 易混,skill 原要专门警告"非 {x,y,w,h}"。
加 _normAabb 归一化:circleVsAabb/aabbVsAabb/raycastAabb 现同时接受 {x,y,w,h}(自动按左上角换算中心)
和 {x,y,hw,hh}(原样),AI 可用与 Rect 一致的 {x,y,w,h}、不必记区别。低风险(存量 {x,y,hw,hh} 透传不变)。
全链路同改:collision/impl.js(_normAabb + 3 直接函数归一化)+ api.d.ts Aabb 文档 + skill:113。
验证:collision 16/16(存量 center-form 不破)+ 确定性({x,y,w,h} 与等价 {x,y,hw,hh} 三函数结果全一致)。
注:SpatialHash broadphase(进阶、便宜档罕用)仍取 center-form {x,y,hw,hh};AI 常用的直接查询函数已统一。
至此附A 15 处可改签名全部完成(#1-#15)+ 正交泛型门修复。
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
|
fb01654311
|
feat(cheap-gen): 阶段一B #14 palettePost 加 applyPreset 常用后处理观感预设
附A #14:palettePost 原不内置成品观感,AI 要逐项配 vignette/dither/scanline 的 enabled/strength
才出效果。加 applyPreset(name) 一键套预设:'none'(全关)/'soft'(柔暗角)/'retro'(扫描线+暗角)/
'crt'(扫描线+暗角+抖动)/'dither'(抖动),委托 setPost。换色色板(from/to RGB)仍由游戏注入
(那需源色、非预设态)。全链路同改:impl(applyPreset 委托 plugin.setPost)+ api.d.ts 声明 + skill:117。
验证:palette-post 12/12 + 确定性(retro 开扫描线+暗角、none 全关)。prompt 不细列 palettePost 故仅 skill。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
ea229edf78
|
docs(cheap-gen): 阶段一B #7+#11 timer 单位钉死 + juice.render 每帧手调钉死
附A #7(文档钉死类·timer 是 ms 时钟、改秒是破坏性重构,取显式标注):timerScheduler.after/every
收毫秒、与 update(dt) 的 dt=秒相反——AI 易混(3 秒误写 after(3))。skill:129 + prompt.mjs/cheap_roles.py
双源钉死"3 秒=after(3000)、别 after(3)、与 dt 秒相反"。
附A #11(文档钉死/自动化·自动化不可行=render 需游戏侧 g):juice.render(g) 须每帧在游戏 render 里手调,
忘了粒子/打击感不显示。skill:116 强化(原已钉死、补 #11 标记 + 后果)。
均 doc-only(timer 本就标 ms、juice.render 本就钉死),本次显式化 + 双源对齐。验证:prompt node --check
+ cheap_roles py_compile 绿、双源一致。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
8196e07c2c
|
feat(cheap-gen): 阶段一B #8+#9 audioMusic 音效放开语义名 + play 强度容错
附A #8:playSfx 原限 blip/thud/chime 三预设,AI 直觉用 'click'/'hit'/'win'/'coin' 等语义名会静默失败。
加 SFX_ALIASES 语义名→预设映射(click/jump/coin→blip、hit/fail/land→thud、win/success/levelup→chime),
未识别名兜底 blip(不静默)——AI 用任意音名都出声。
附A #9:play(intensity) 入参是情绪强度 0..1、非曲目名,AI 误传字符串 → NaN 强度。play/loop 对非数容错
为默认强度;api.d.ts/skill 文档钉死"入参是强度非曲目名,曲子先 loadSong"。
全链路同改:impl(SFX_ALIASES + playSfx 兜底 + play/loop 容错)+ api.d.ts(playSfx 放宽 string + 文档)
+ skill line118。验证:audio-music 16/16 + 确定性(playSfx 任意名不抛、play 非数不抛)。prompt 不提 audioMusic 故仅 skill。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
5cb73a6d82
|
feat(cheap-gen): 阶段一B #4 gamefeel 加 CoyoteTimer/ComboWindow 工厂方法(免 new+传 time)
附A #4:gamefeel 的 CoyoteTimer/ComboWindow 是 class、须 new 且要传受控 TimeSource——AI 拿不到
受控 time、做不出来。加工厂方法 gamefeel.createCoyoteTimer(opts)/createComboWindow(opts):
用 init 时捕获的受控时间源自动注入,AI 直接调、免 new + 免找 time。全链路同改:
- gamefeel/impl.js:init 捕获 ctx.time,加两个工厂方法(new CoyoteTimer/ComboWindow(time,opts))
- gamefeel/api.d.ts:GamefeelPlugin 接口加两个工厂声明
- skill line115:列工厂方法(免 new + 自动注入受控 time);内置 inputBuffer 改 gamefeel.inputBuffer
验证:gamefeel 18/18 + 确定性(init 后工厂可调、返带 isAvailable/hit 的实例)。prompt 不提 gamefeel 故不同改。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
b29a379f9c
|
feat(cheap-gen): 阶段一B #3 collision 几何查询函数挂实例(向母语直觉)
附A #3:collision 实例原只有 spatial,7 个几何查询函数(circleVsCircle/circleVsAabb/
aabbVsAabb/satVsPolygon/raycastCircle/raycastAabb/raycastSegment)仅模块级导出——但 skill:113
本就把它们列在 collision 能力下,AI 直觉 collision.circleVsCircle(...) 取不到=真 gap。
把 7 个纯函数挂上实例(引模块级、不依赖 this),api.d.ts CollisionPlugin 接口同补。skill:113
原措辞现在成真、无需改。验证:collision 16/16 + 确定性(实例 circleVsCircle/aabbVsAabb/raycastAabb
可调且算对)。注:Aabb{x,y,hw,hh} 与 Rect{x,y,w,h} 的几何约定统一(#12)风险高、留后续careful。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
d79e1b9f89
|
feat(cheap-gen): 阶段一B #2+#13 physics 几何挂实例 + ProjectileState px/py→x/y
附A #2:physics 实例原为空 {}、几何运动函数仅模块级导出,AI 直觉 physics.integrateProjectile(...)
取不到。把 6 个运动原语(integrateProjectile/springStep/criticalDamping/moveWithConstraint/
clampSpeed/applyFriction)+ Projectile 类挂上实例(引模块级纯函数,不依赖 this),api.d.ts 接口同补。
附A #13:ProjectileState 位置 px/py → x/y(向母语直觉,与 Vec2/命中矩形的 x/y 统一)。impl/test/
PLUGIN.md 同步(px/py 仅 ProjectileState 字段,replace_all 安全)。
注:physics 当前无 prompt/skill 指引(便宜档 niche、projectile 罕用),本次是完整性 + 正确性
(实例可用 + 字段直觉),不改生成侧行为。验证:physics-lite 16/16 + 确定性(实例 integrateProjectile/
clampSpeed 可调、ProjectileState 返 x/y)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
c6d31c0d81
|
docs(cheap-gen): 阶段一B #15 scene 回调签名钉死(防臆造首参)
附A #15(文档钉死类、非 API 改):scene-fsm 回调表里 update 只收 (dt)、render 只收 (g)
(api.d.ts:38 本就如此),但 prompt/skill 未明示防臆造首参。加钉死:别写 update(scene, dt)
这类场景名/state 首参、与五法同形。prompt.mjs + cheap_roles.py 双源 + skill define footgun 同改。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
bdcd7d472c
|
feat(cheap-gen): 阶段一B #10 juice 加 burst(x,y) 便利方法(向母语直觉)
附A #10:AI 母语直觉是 juice.burst(x,y),旧 API 只有 spawnEmitter('burst',x,y)、burst 仅预设名
——prompt 原本教"particles-juice 没有 burst"当幻觉拦。加 burst(x,y,overrides?) 便利方法委托
spawnEmitter('burst',...) 后,直觉名直接可用。全链路同改:
- particles-juice/impl.js:加 burst(x,y,overrides) 委托 plugin.spawnEmitter('burst',...)(引 plugin 自身不依赖 this)
- particles-juice/api.d.ts:实例接口加 burst 声明
- prompt.mjs + cheap_roles.py 双源:删"particles-juice 没有 burst"(它现在有了)
- skill line116:spawnEmitter 旁注 burst(x,y) 母语别名
验证:particles-juice 18/18(含 burst 别名 spec 等价测试)+ 确定性 burst≡spawnEmitter('burst')
+ [check] PASS(juice.burst 被 API 门认可)+ 双源一致。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
8c361f4a5b
|
feat(cheap-gen): 阶段一B #6 sessionScore 加 add 别名(向母语直觉)
附A #6:AI 母语直觉是 score.add(10),旧 API 只有 addScore——skill 原本把 add 当
幻觉拦(❌ add → ✅ addScore)。改签名加 add 别名后,直觉名直接可用,翻转 skill。
全链路同改:
- session-score/impl.js:加 add(delta) 别名(引 plugin 自身委托 addScore、不依赖 this)
- session-score/api.d.ts:实例接口加 add(delta): number 声明
- skill:line 145 由"❌ add→✅ addScore"翻为"add=addScore 别名直接可用";line 126 方法表注别名
- prompt.mjs/cheap_roles.py 无需同改(它们不提 addScore,仅 skill 提)
验证:session-score 插件测试 7/7(含 add 别名断言)+ 确定性验 add≡addScore + 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
|
74a7135746
|
feat(cheap-gen): 便宜档降AI参与 设计落仓 + 阶段一A 清脏数据(治传导断裂)
探索会话诊断+设计(Codex+Opus 双评审、证据驱动重定位),认领进 plan① 切片一里程碑。
落仓产物:
- 动因 evidence(母语vs方言:M3 不弱、便宜档现状方言产同款要 ~26× token)
- 方向设计(降AI参与=减摩擦[小头]+扩模板覆盖[大头未验];附A 22处摩擦/15可改签名清单)
- tech-decisions §5.1 + agent-specs/_index 蒸馏
阶段一A 清脏数据 + 文档治理锚(prompt.mjs + cheap_roles.py 双源 + skill 三文件):
- 治"传导断裂"根因:植入定位锚——便宜档=AI参与深度低的高质游戏(轻量≠简单),
复杂度靠工程脚手架+L2 插件库、少写多调;"极小/最小游戏「点圆得分」"重框成
"脚手架起点、借插件能力改造成高质游戏"
- collision.pointInRect(不存在)收敛 hudUi、删干净
- 漂移范例 catch-fruit/wanglanmei(旧 opts 签名)→ _template(唯一匹配现契约)
- 插件数口径统一"注入 11 + runtime-probe 取证不注入"
验证:prompt.mjs node --check + cheap_roles.py py_compile 绿;九门复验跑一局打地鼠
(历史翻车品类)attempts=1、verdict.pass、failedGates=[]、¥0.95——清脏数据未破坏生成。
核心结论(创始人确认):便宜档≠简单游戏;L2 插件库是降AI参与核心载体非税;
"换母语扔插件"=升参与、与策略相反,已推翻。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-30 01:39:05 -07:00 |
|
lili
|
ffe3a5c993
|
fix(WU-C 5.4): tap-targets harness 认单数/可空 target — 解 M2 Node 退役阻塞
M2 auto-vs-golden 门抓到的生成契约漂移修复(Codex 实现 + 主代理诊断/受控验证)。
根因:~20% click-score 款 _forensicsView 暴露单数 target(对象、菜单态为 null)
而非复数 targets(数组),tap-targets harness 只认复数数组:① _build_play_spec
推断漏判→误推 key-cycle;② 驱动器 targetsPath 找不到单数 target。
两处修(认两种合法形态、既有数组行为零变):
- cheap_run.py:_build_play_spec 以【键存在性】判 tap-targets(targets/target 键
在即可,菜单态 null/空数组仍归 tap-targets)——非值类型(空数组过/null 不过的
非对称是漏判根因)。
- play.cdp.cjs:runTapTargets 取值非数组时回退读单数 target、包成 1 元素数组。
验证:退化款 avg-click-score-14 auto 路 E_live/G_input/H_progress 0.667→1.0
(3/3 确定性复现);test_ensure_play_spec 8→13 绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 10:41:16 -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
|
8b491d1330
|
fix(九门): latch 终态口径修法 — 命名同义 + 限时类有进展降 advisory
便宜档当前 HEAD 九门真实基线诊断(n=5 收敛环):harness 健康、3/5 真可玩;
0/5 主因 = latch 终态词表 bug(只认 gameover、漏 over/win/lose)+ 限时类
driver 玩不到终局。按创始人 2026-06-25 口径修 play.cdp.cjs:
- latch 认 gameover/over/win/lose 同义(对齐 driver 家族 runTapTargets)
- 未达终态但有真进展的限时/无快速失败态类 → latch 降 advisory(不致命),
无进展仍致命(不放水)
- 验证:base1-5 重跑 0/5→3/5(base1/4/5 真可玩转绿,base2/3 卡 menu 无进展仍正确挂)
SoT① §5.4 同步 latch 口径演进(文档↔代码兑现)。
附:docs/内网凭据与端点.md 登记 glm-5.2(opus 高级档/512K,作复杂档证路高级档)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 22:26:37 -07:00 |
|
lili
|
b31cc37a4f
|
chore(brand): 造梦AI→绘境AI 全活层品牌不变量收口(441 文件)
把活层退役旧品牌「造梦AI」统一改为现行「绘境AI」,brand-invariant 门红线归零。构成:
~412 Java @author 署名 + game-studio/index.html 浏览器标题 + game-runtime/package.json 描述
+ game-admin/.env VITE_APP_TITLE 运营后台标题 + contracts API title/@Schema 用户协议示例/events 描述
+ docs-design mockup 品牌位 + 各模块注释。全是注释/显示/元数据,零逻辑改动。
zaomeng 拼音持久化标识符按 2026-06-24 评审 GR-05 不动(347 处保留)。
白名单(docs/ip 法律备案 / _archive / 带日期留痕)与 AGENTS.md 门定义自身不动。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 08:29:11 -07:00 |
|
lili
|
d55030bf4a
|
feat(runtime): 删 gamedef 运行时核心(gd-runtime/build-from-source/2d-api)
gamedef 声明式 JSON + new Function 解释路线的 game-runtime 核心,随
gamedef 判废一并清除:
- 4 测试:src/host/{gd-runtime.test,gd-archetypes.test,build-from-source.test,gameplay-pitfalls.test}.mjs
- 4 被引文件:src/host/{gd-runtime.js,build-from-source.mjs,runtime-api-2d.d.ts,runtime-api-2d.md}
这 8 文件互相引用闭环、仅被彼此与那 4 个 gamedef 测试引用;A-model 全线
(src/core / src/plugins / host / _template / _generic)不依赖它们。
src/core/game-host.d.ts L25 一句史化石注释提及 gd-runtime(非 import),
属"绝不动"的 A-model 核心,保留,列入残留报告。
验证(必跑·删后绿基线):
- 核心 node --test src/core+src/plugins = 211 pass / 0 fail
- games/_generic 壳 = 5 pass / 0 fail(确认未误伤 _generic 标准插件壳)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 02:04:46 -07:00 |
|
lili
|
0ccce16aa2
|
feat(amodel-gen): gen.mjs --brief-file + SAA→A-model 执行版 plan(集成C)
--brief-file 容大段富化设计稿(避 argv 长度/引号坑;U3 Java shell-out 复用),design+saa 双模式生效。plan 已折叠两轮 Codex+Opus 双评审。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 19:45:33 -07:00 |
|
lili
|
f5918e449e
|
feat(amodel-gen): Phase1 MVP-first 设计护栏(治"富设计→code thrash")
v5/v6 e2e 实证一个系统张力:driver-可达护栏让设计转单击成单(✓),但也让策划 agent 产出越来越富
(v4 5.3KB → v5/v6 7.5KB:离线收益/6级/广告/7商品/hitstop/9插件)→ **code agent 实现负担过重 →
read-thrash → loop-detection 截停、finished:false**(v5 26步/v6 27步均未收敛;对比 v4 精简设计 9 步收敛)。
护栏(design prompt + sim skill §8 加 MVP-first 铁律):设计聚焦可玩核心 = 核心循环 + 1 主机制
+ 1 资源环(进货)+ 3–4 级解锁 + 基础数值/音效,商品 ≤3 起步;离线收益/广告/雇员/多档 BGM/hitstop
/6+ 商品 一律标「后续·MVP 不做」。**先出能玩核心,再谈丰富** —— 降 code agent 负担、保收敛。
待:v7 验(精简设计 → code 收敛 + 单击成单 → H 过 → 护栏闭环全绿)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 11:36:47 -07:00 |
|
lili
|
75dc86ad56
|
feat(amodel-gen): Phase1 e2e 验证 + driver-可达性设计护栏(两步成单 footgun)
本地 e2e(design→code)实证策划 agent 价值:一句话「做一个网兰梅的街角小卖部经营小游戏」
→ 策划 agent 读真 sim skill(115s)→ 比手写 v2/v3 brief 更丰富的设计(进货-库存-补货环 + 6 级解锁
阶梯 + 满意度 + 数值表 + 客流节奏区间 rush≥35s + 好玩自检 4/4 + clean gatespec score↑/currency↓)
→ code agent **9 步**收敛(vs v3 的 39 步)check/build/smoke 全绿。**设计层补料 → 更好玩 + 更快 + 更省 兑现。**
九门验 v4 = 8/9(A/B/C/D/E distinct=82/82/F/G/I 全绿,游戏真活、输入真响应),**仅 H score 0→0**:
根因 = 设计选了**两步成单**(选顾客锁定→点货架商品),零-LLM tap-targets driver 只单击 occupied 目标、
跟不动两步 → 选客不成单 → 营收 0(截图实锤:蓝顾客被选中高亮但没卖出)。**好游戏被误判,非代码 bug。**
护栏(设计-guidance,非改 driver/九门——守"九门玩法无关"):
- sim skill §9 + design prompt 可达性自检 + littlejs _forensicsView 契约 三处加「driver 可达」铁律:
核心成单/得分动作**单击 occupied 目标即完成**(casual 友好 + driver 可达);深度靠进货/库存/解锁/节奏,
不靠两步匹配;确需多步则 _forensicsView.targets 随状态把"下一步该点的"标 occupied。
待:re-gen v5(验护栏 → 单击成单 → H 过)+ U3(designNode Java shell-out)+ U6 蒸馏。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 10:48:21 -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
|
db3c42c5de
|
feat(amodel): 运行时日志基建(ctx.log+插件自带+harness捕获) + 九门A(play-spec透传)+B2(F_wiring) + 预算
创始人指令:游戏要有日志,读日志诊断运行时问题,模板+可选插件自带日志。
日志基建:
- plugin.js:受控面 ctx 加 log(tag,...args) → window.__gameLog 环形(800)+ console;用受控 time.nowMs。
- boot-game-host.js:B2 插件 Proxy wrap 顺手记插件语义调用进 __gameLog(跳 draw/update/current/get 等高频)→ 插件自带日志免逐个改;recHook 仍记 __engineCalls 供 F_wiring。
- _template game-logic.js:ctx.log 生命周期(init/scene play/over)→ 模板自带。
- play.mjs smokeBoot:抓 __gameLog 写 staged evidence/game-log.json + 末12条进 out.logTail(boot 成败都抓,失败时最有诊断价值)。
- 实证:scaffold→smoke logtest → logCount:165、game-log.json 有 [p:sceneFsm:define/start]+[game:init];读日志诊断可用。
九门对齐(C 之 A+B2,recon ad3c564):
- A(SaaGenNodes validateAmodelStaged):amodel 路 validate-ok→play 短路了 scaffoldNode(唯一写 play-spec.json 处)→ 补写 play-spec.json(从 design 产 K_PLAY_SPEC)→ 九门可驱动(治 E_live/G_input/H_progress 机制)。
- B2(boot-game-host):插件 recHook wrap → F_wiring callCount>0(实证 e2e 从 [E_live,F_wiring] → [E_live,H_progress],F_wiring 已过)。叠加式,factory/gamedef 零回归。
预算(gen.mjs):maxSteps 45→70 / maxWallMs 12→20min —— SAA design 富化 brief 比 raw(7步)需更多步。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-22 22:21:29 -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
|
baedcd8153
|
fix(amodel-gen): reading 'w' 根因 footgun(host-config wiring)+ m3 timeout 300s
钻 reading 'w' 根因(minified 栈实锤):bootGameHost 读 i.viewport.w,而 buildTemplateHostConfig 返回的 viewport=undefined → M3 改 host-config 时破坏返回契约(漏 viewport 键/删 render.js export W/H)。非 minification、非产不出(两局当前 src 生产 min build 后 smoke PASS)。
更广模式:M3 游戏逻辑写得了(check+build 过),但反复搞坏插件 wiring——3 契约点:① host-config return shape(viewport)② registerOrder ③ game.js 取插件漏 .plugins 一层(createGame(opts.runtime) 后从 runtime 解构 → sceneFsm=undefined → reading 'define')。
本次改进:
- footgun ×2(prompt.mjs 红线 + littlejs skill ❌→✅):buildTemplateHostConfig 必返 5 键+viewport{w,h};取插件走两层 opts.runtime.plugins。
- m3.mjs timeout 180→300s:M3 大上下文 turn 触发 thinking 单 turn 实测 ~215s(裸简单调用仅 1-3s);180s 误超时+重试更拖。实测效果:wfix3 从 read-thrash(63读0build)转为真写码(27write/check+build PASS)、viewport bug 未再现。
注:踩了 prompt.mjs 模板字面量反引号坑 2 次(node --check 拦下,未浪费 run)——红线:prompt.mjs 内禁反引号。
未达绿:amodel e2e 仍 0/1——wiring 错类是 whack-a-mole(footgun 一个、M3 露下一个),且 per-attempt 步数预算下难一次收口。下一步战略(待创始人定):结构性把 host-config + 工厂 glue 设为固定 plumbing(agent 只写游戏逻辑),根除 wiring 错类。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-22 07:54:13 -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 |
|
lili
|
c44681b580
|
feat(runtime): A-model 地基——4 编排插件 + 2 skill + _template/catch-fruit + SAA 改写评审版
- 新增 4 编排层插件(session-score/hud-ui/scene-fsm/timer-scheduler),barrel 注册 12 件,各 impl/api.d.ts/manifest/PLUGIN.md/test,全 node 测绿;audio-music manifest 描述修红门
- skill littlejs-game-dev(code 层:12 插件 API/结构/写-vs-调/资产-mmx/工厂契约)+ sim-business-game-design(design 层:经营模拟范式 + 反"无趣"配方)
- _template(游戏克隆起点,10/10)+ catch-fruit(sonnet 扮生成 agent 只凭 skill 产出,25/25,真浏览器可玩 + canvas 自适应修复)
- docs/agent-specs SAA→A-model 改写评审版(Opus+Codex 双评审收口;D1=A 全压 A-model/D6=A 押 SAA,D6 已 mini-desktop 活验证 1/1)
- staging-ops 加「ssh 绕代理直连内网 IP」配方
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-21 09:58:52 -07:00 |
|
lili
|
9d463f0873
|
feat(saa): Phase 4 E_live 校准——像素活性 OR 状态活性(治无运动点击类假阴)
play.cdp.cjs E_live(守卫E):加 stateProgressed(score/remaining 玩前→玩后真变=游戏在响应输入) + 玩前/玩后态捕获(s0/s1);E_live pass = 像素 distinct≥2 OR 状态活性。
- 治无运动点击类(打地鼠等):画面只在命中瞬间变、像素采样易错过→E_live 假阴;但 score/remaining 会真变。
- 只加 OR、只放宽不收紧:真冻屏(score/remaining 不变、含仅计时 elapsed 变的)→stateProgressed=false→E_live 仍判否,绝不放过真冻屏。
- 验证:node --check 过;stateProgressed 5 例核验(命中→true / 冻屏→false / null→false / 仅时间变→false);对 gd-breakout 跑确定性 harness(无 M3)——liveByState 字段出、E_live pass、harness 不崩。
- 范围(创始人定):VLM 门(gateMode=vlm)降 backlog(VLM 单帧比 E_live 弱、有'好玩'判定天花板);#7 打地鼠经查实为 H_progress(已 Phase 1 移出硬门)非 E_live。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 13:00:30 -07:00 |
|
lili
|
5bc0afb4bb
|
fix(saa): 复审整改 C2 客观门必达集 + M3 碰撞尺寸不拷顶层 + Phase 3 玩法坑离线门
CodeRabbit/Codex 双复审整改(针对 4e5a7bbf):
- C2(critical, SaaGenNodes.objectiveGatesPass):改「A-E 五门全在场且 pass,缺任一即失败」。旧「出现才查」会被 harness 中途崩(runDriver 在 D/E 前抛、未 try/catch)钻空子——verdict 只剩 A_boot/C_frame 即 sawObjective=true 放行=崩掉的游戏判过。缺门=未跑完=失败才安全。
- M3(major, gd-runtime RESERVED += w/h/r):碰撞尺寸 w/h/r 不拷实体顶层——它们是 rt.overlap 读顶层的命中框(缺省16),拷上去静默改存量游戏命中框且违反 prompt 契约「顶层 e.w 永 undefined」。
- Phase 3(OpenGame +6.9 离线 linter):build-from-source 加两族【零误伤】玩法哑火坑门——①.tags 是 Set 误用数组法/下标/length ②漏 rt. 前缀裸引擎调(补 LOGIC_BANS 不拦 getEngine/getInput/restart 的洞,含此坑源装配过却运行期夭折)。命中→repair,真玩前修省一轮 CDP。self 跨 behavior 泄漏因误伤过门款(gd-tictactoe/simon 带 bug 却过门,self 确 per-behavior)降级待非阻塞 warning 通道。新增 gameplay-pitfalls.test.mjs:正例拦坑 + gd-breakout/tictactoe/simon 零误伤,32/32 全绿(含既有回归)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 12:28:41 -07:00 |
|
lili
|
4e5a7bbfb9
|
feat(saa): M3 生成质量收敛——客观门解耦 + 流式 anthropic 思考 → e2e 11/12(91.7%)
rc 门解耦修复(SaaGenNodes.playNode):play.cdp.cjs 退出码=九门聚合(verdict.pass?0:1),driver 门(G/H/I)挂→rc=1 反向否决客观 pass,致 Phase 1 客观门解耦形同虚设、空跑救场烧 token;改 rc∈{0,1}+objectiveGatesPass,all9 旧口径保留可回退。
思考治理(SaaStudioGraph):关 openai 路 M3 adaptive thinking(内联污染 JSON+撞 max_tokens 截断);改走 Anthropic Messages 协议(原生 thinking 块分离)+ StreamingCallChatModel 流式收取(治阻塞整取 SocketTimeout;#4407 对 spring-ai 1.1.2+生成无工具调用不触发,n=1 实测确认)+ webClient NO_PROXY + max_tokens 256k。
配套:gd-runtime 去脚枪(Plan A·S2 自定义标量拷实体,治冻屏) + play.cdp seek-food 驱动 + Phase 1b prompt 解耦 + e2e 旋钮(protocol/maxTokens)。
实测 conc=12 gamedef:thinking-off 8/12(67%,E_live 哑火×4) → thinking-on 11/12(91.7%,哑火修 3/4,残留 #7 打地鼠);代价 ~10x 慢 + 1.6x token。按创始人拍板以 n=12/91.7% 宣告达标(放宽原 plan003 n>=30 门)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-20 11:26:26 -07:00 |
|
lili
|
db14845d12
|
fix(review): U1 资产渲染——ce-code-review 整改(P0 assets 层级 + P1 契约同步 + 校验洞 + P2 群)
6-reviewer ce-code-review 揪出并整改:
- P0(api-contract,读 schema 实证): assets 在 source-project.schema sourceProject 顶层(非 gameDefinition,
后者 additionalProperties:false)→ 原加进 GAMEDEF_KEYS 丢合规顶层 assets。改:validateSourceProject 从顶层
sp.assets 抽取(容差回退 gd.assets)并入 cleaned.assets;GAMEDEF_KEYS 移除 assets;测试改顶层。
- P1(api-contract+project-standards 双证): runtime-api-2d.d.ts 同步—GameDefinition.assets / RenderComponent
shape:'sprite'+asset?/ref? / AssetSpec / createRuntime boot.assets(contract-first)。
- P1(adversarial conf100 复现): 非字符串 asset.ref(对象)绕过校验→零 repair 信号死循环 → ref 须非空字符串。
- P2(adversarial+maintainability): id/ref key 空间歧义 → drawSprite 经 asset.ref 查 boot.assets(宿主按 ref 键)。
- P2(maintainability): 数组化循环复用 GAMEDEF_KEYS 去重 / placeholderColor 补 music 色 / 弃 c.sprite 别名 / 32px 具名 DEFAULT_SPRITE_SIZE。
- P2(project-standards+api-contract): 宿主预载半-wired → game-host.d.ts + boot-game-host.js 加 HOST TODO 指针。
测试: 重写 assets(顶层/非串ref/非数组/端到端) + sprite 7 路(ref键/无图/image=null/抛错/悬空/music/asset:0)。node --test src/host 31/31 绿。
残留(已 TODO 指针 + plan U1 剩余 + task 记录): 宿主 loadAssets→boot.assets 真 wiring(浏览器耦合、node 难测)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-19 01:32:07 -07:00 |
|
lili
|
73d3391696
|
feat(engine): U1 引擎资产渲染地基 + asset 孤儿闭合(死代码修)
plan 2026-06-19-001 Plan B · U1。
- build-from-source: GAMEDEF_KEYS 纳入 assets(原缺→line 101 strip 掉=六类资产产物永不被消费的死代码,
评审 P0);assets 六类(sprite/character/effect/scene/ui/music)/ref 校验转 repair 信号。
- gd-runtime: drawEntity 加 shape:'sprite' 分支 → 经 boot.assets(additive,宿主 init 预载图源)drawImage 居中;
无图源降级类目色占位 rect(前向兼容,宿主预载落地后自动转真图,不崩不空屏)。
- game-host.d.ts: additive 扩 boot.assets(assetId→{image})落实 init「装资产」意图,零破坏既有 boot。
- 测试: build-from-source「assets 存活白名单+六类/ref 校验」、gd-runtime「sprite drawImage/无图占位双向」。
node --test src/host 31/31 绿(无回归)。
剩余 U1 wiring(单列·触宿主实现侧): 宿主 init 预载管线 asset ref→image map→boot.assets;
六类资产 demo 截图 + 孤儿闭合截图需 mini-desktop CDP。R11 代理判据待真图源接通后验。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-19 00:57:26 -07:00 |
|
lili
|
95b2572e65
|
docs(game-runtime): U1 约定正式化 runtime-api-2d.d.ts(rt 接口 TS 契约 · 第10类契约 additive)
plan 2026-06-18-001 U1 正式化产物(plan「1-2 轮后正式化」已满足:4 轮迭代+跨品类 9/9 实证+clickable 基元,约定已稳)。
手写 TS 契约(同 api.d.ts/game-host.d.ts 范式),与 gd-runtime.js 同形:
- gameDefinition 声明式模型:Render/Physics/Clickable/Marker 组件 + EntityDef/BehaviorDef(code)/RuleDef/SceneDef。
- rt 面(behavior 侧):实体 getEntity/entities/query/spawn/destroy + Entity 实例形 + input(轮询)/time(确定性,无 nowMs)/
dt/random/score-win-lose(latch)/clamp-dist-overlap/fx/view。
- ForensicsState:固定取证键 + 逐实体 id 投影命名位(ball.x…)+ tag=target → targets[]。
- createRuntime(boot,gameDefinition)→Runtime(init/update/render/state/destroy/errors)签名。
落 game-runtime/src/host/(同 game-host.d.ts 之理:内部宿主↔behavior 接线面,非跨仓 SSOT);
additive 第 10 类契约,**不动现 8 契约**(故未改 source-project.schema.json;clickable 入其 kind 枚举=additive,
留 6c6g/创始人 决,contract-first 补正)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 06:38:50 -07:00 |
|
lili
|
80aaa116ab
|
feat(game-runtime): clickable 声明式点击基元(harness 探针证 9/9)+ tap-targets prompt 迭代——治便宜模型 tap-handler 顽疾
plan 2026-06-18-001 U3 迭代3-4轮(据快走查根因)。
根因(全budget+stage2 都不解,3轮prompt不解):便宜/强模型均**顽固把 tap 命中门控在分离 state 实体/计时器/turn 上**
→ 盲点驱动点不中 → tap-targets 类系统性 E_live/F_wiring/G_input/H 挂。即「让模型写 tap-handler」这条路便宜模型走不通。
引擎线根治(gd-runtime.js):新增 **clickable 声明式基元** `{kind:'clickable',score?,mark?:{shape,color,r},hitW?,hitH?}`——
运行时内置:本帧点中带此组件且 !occupied 的实体 → 自动翻 occupied+spawn 标记(可见)+计分+fx。**离散点击类声明它即可、免写 handler**。
验证:gd-runtime 单测 16(含 clickable 派发) + 全套 60/60;**手写纯声明式(behaviors:[])clickable tap-targets gamedef 过 harness 9/9**(E_live distinct=8/F_wiring/G_input/H 全过)——证基元+管线正确。
GAMEDEF_SYSTEM:教 clickable(替「写 tap-handler」)+ 参照2 改纯声明式 clickable few-shot(经探针证 9/9)。
runtime-api-2d.md:补 clickable 组件文档。
**关键测量定论(终结本机迭代)**:便宜模型 tap-targets 单管线生成**高方差**(同 brief 一轮 8/9 一轮 5/9)——
N=1~2 小样 lili-mac 早读**信噪比不足**,无法可靠优化「模型产出过门率」(我前几轮在追噪声)。
**管线/运行时/约定已证正确(手写金样两品类均 9/9)+ 引擎补了 clickable 基元**;**模型产出 cutover 率是统计量**,
需大样+全 repair 预算 → **authoritative=mini-desktop SaaFullGraphE2eTest -Dsaa.e2e=1**(多 brief+5+3 repair+stage2)。
快走查工具:加 stage2 救场升档(QC_STAGE*)+ gamedef assert 字段 coerce 到 score(治 design 造 moves/totalRound 等取证读不到字段)。
设计决策待 6c6g:design↔gamedef 的 assertAfterPlay 字段词汇契约(design 应约束到 gamedef 暴露集 score/remaining,
或运行时暴露更多)——触共享 DESIGN_SYSTEM。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 06:13:18 -07:00 |
|
lili
|
fd5b245baa
|
feat(saa): U2 接缝 + U3 真产 gameDefinition + U4 多模型回退(gamedef 路 additive 灰度)
plan 2026-06-18-001 U2(后端接缝)/U3/U4 · 后端线 · 真结构化生成上产线(saaSourceMode=gamedef,默认 factory 字节不变)。
U3 真产 gameDefinition:
- SaaPrompts 新增 GAMEDEF_SYSTEM(与现 SYSTEM 物理隔离,公平性铁律)+ buildGameDefMessages;内容=runtime-api-2d.md
约定提炼(schema/rt 面/命名约定/硬约束)+ 内联 scan-clean few-shot;硬约束由 build-from-source 静态扫描兜底。
- SaaStudioNodes.generateNode gamedef 分支:产结构化 gameDefinition(looseParse 脏 JSON 容错)落 K_SOURCE_PROJECT;
factory 路(含 regenerate 消费 base 源)字节不变。
U2 后端接缝(gamedef→可玩,scaffold/build/play/harness/build.mjs 全零改):
- build-from-source.mjs 加 CLI(node build-from-source.mjs <src> <out> / --validate;被 import 不执行)。
- SaaGenNodes.validateNode(gameRuntimeRoot,sourceMode) gamedef 分支:经 build-from-source.mjs 子进程校验+装配
sourceProject→factorySrc(下游 scaffold/build 零改消费);CLI 失败回喂 repair。
- 确定性点改解锁:modifyNode(sourceMode) gamedef 路真改源不 fail-loud;modifyRouter(sourceMode) gamedef
deterministic→validate(装配 patched 源重验)/ factory→fail-loud;assetNode 幂等(已有 assets 跳过,不覆盖点改)。
U4 多模型回退链:generateNode 主模型(含 stage1/stage2)耗尽 180s×3 重试后,回退同 role 跨家档(M_CODE/FIX_FALLBACK
=MiniMax-M3)再试;接现 callWithTimeoutAndRetry/looseParse/救场阶梯不另起限次。GenModels record 收敛入参。
线程:AigcExecutorProperties.saaSourceMode(默认 factory)→ SaaGraphDispatcher → SaaStudioGraph.build 9 参重载 →
assemble → generate/validate/modify/modifyRouter;8/7/5 参 build 旧重载 delegate "factory" 不破现调用。
worker prompt.py 不动(gamedef 为 SAA 路专属、http worker 仍 iife,无 shared prompt 漂移=无 split-brain)。
验收(lili-mac 快走查):mvn test-compile 过(main+test);模型无关单测 SaaStudioGraphTopologyTest 30/30
(含新增 gamedef deterministic→validate 路由证)+ SaaStudioNodesRegressionTest 8/8,零失败;build-from-source CLI
实证(--validate exit0/2、assemble 产正确 import 路径工厂)。**gamedef 全链过门率≥60% cutover 门需 NEWAPI_KEY+
mini-desktop(authoritative,未在本机跑)**。默认 factory 路行为字节不变(灰度 opt-in)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-18 00:05:18 -07:00 |
|
lili
|
160d9bc3e0
|
fix(game-runtime): U1/U2 双评审整改(correctness×adversarial)——driver 命名路径 + 边界静态扫描 + rt 加固
子代理双评审(ce-correctness + ce-adversarial)对引擎线 9+9 条发现,逐条核证为真后整改:
gd-runtime.js:
- [HIGH] state() 派生九门 harness driver 命名路径:逐实体按 id 投影顶层位(ball.x/paddle.x/bird.vy…
+w/h/r/angle)+ tag='target' → targets[{x,y,idx,occupied,safe}](对齐 gatespec driver 契约)。
此前 driver 读 undefined→无法驱动→机制门必挂(plan U1 step5 要求,原缺)。
- [High] addScore 守 num(NaN/字符串不污染 score 共享契约);[High] 冻结 rt 纯 API 面
(input/fx/time/view+本体,防 behavior 改写共享 API 串味全局,实体仍可变)。
- [Med] 重复实体 id:addEntity 保先到者可寻址+记信号,reap 仅删 byId 指向的死亡实例(不误删存活者)
+ 实体上限 5000(防失控 spawn 静默膨胀)。
- 移除 rt.time.nowMs(墙钟=非确定性逃逸口);elapsed 帧末推进(首帧 now()=0);输入沿恒帧末清
(含 latch 后,杜绝滞留);overlap 显式 0 被尊重(不被 truthy 误当默认)。
build-from-source.mjs:
- [keystone] 校验边界静态扫描 behavior.code/rule.condition:拦死循环(while(true)/for(;;))、沙箱逃逸
(process/require/eval/.constructor/Function/globalThis)、确定性逃逸(Math.random/Date)、DOM/网络、
condition 副作用(;/赋值/win-lose-spawn-destroy)→ 转 validationErrors 回灌 repair。同步 JS 不可进程内
硬中断+new Function 不沙箱,故在边界拦截(模型代码只在浏览器执行,esbuild 仅静态打包);信任模型写进 header。
- [Med] 非数组 components/entities 强制数组化(不抛裸 TypeError);behavior code 须非空字符串;
id 唯一性+null/undefined id 不入引用集(杜绝 'null'/'undefined' 假命中);循环引用 JSON fail-loud
(带 validationErrors);`<`→< 转义(inline-injection 安全,防 </script> 提前闭合宿主内联 script)。
runtime-api-2d.md:补「边界硬拦截」「取证/driver 命名约定」(实体命名 ball/paddle、目标打 target 标)——交 U3 prompt 教模型。
验收:node --test 全 runtime 套件 59/59(原 50 + 9 条修复验证:命名路径/addScore守卫/rt冻结/重复id/
nowMs移除/非数组/非串code/静态扫描/循环引用+</script>转义);archetype few-shot 经核证 scan-clean(不教被拒模式)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 23:39:57 -07:00 |
|
lili
|
c8526f1dd6
|
docs(game-runtime): U1 运行时约定文本 runtime-api-2d.md(交 U3 prompt 嵌入)
plan 2026-06-18-001 U1 交付物「约定文字同步喂进 prompt → 交 U3 落 SaaPrompts 新 SYSTEM」。
新增 game-runtime/src/host/runtime-api-2d.md——写 gameDefinition behavior 逻辑时能用的全部 rt 面
的人/模型可读契约:gameDefinition 结构 / behavior 代码契约(new Function('rt','self','dt',code)+
trigger 语义+四条硬约束)/ rules / rt 面全 API 参考 / 组件 / 4 原型 few-shot / 常见坑(治真实模型
漂移:禁约定外 helper、禁 Math.random、终态置 latch、behavior 不画图、关键事件挂 fx)。
U3 的 GAMEDEF_SYSTEM prompt 直接嵌入本文。状态 v0(已过 4 类原型表达力证),保留补 idiom 余量。
落点同 game-host.d.ts 之理(内部宿主↔behavior 接线面 → game-runtime/src/host/);
是否升格 contracts/ 跨仓契约由 6c6g(contracts owner)定。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 23:11:14 -07:00 |
|
lili
|
4292f4e793
|
test(game-runtime): U1 收敛判据——rt 约定跨 4 品类表达力覆盖(并作 U3 few-shot 库)
plan 2026-06-18-001 U1 验收「3-5 类游戏 behaviors 用约定全跑通、零约定外 helper 漂移」。
新增 game-runtime/src/host/gd-archetypes.test.mjs——4 类原型 gameDefinition 经 createRuntime 真驱动:
- ① paddle-intercept(realtime+连续输入键/指针 + overlap 反弹 + lose latch)
- ② event-clicker(event+离散 justTapped + addScore + rule 胜)
- ③ dodge-spawn(realtime + rt.spawn/query/destroy + rt.random + overlap lose)
- ④ runner(realtime + physics 组件重力积分 + justTapped/justPressed 跳 + spawn 障碍 + 碰撞 lose)
headline 断言 = runtime.errors() 为空(零约定外 helper 漂移/零抛错)+ 各原型出合理状态转移
(移动/计分/终态 latch + 输入响应 + physics 重力 + spawn 真生成)。证 rt 面够表达目标品类谱。
定位:此为「约定表达力」证(手写金样,非真实模型输出)——真实模型 idiom 漂移收集随 U3
(GAMEDEF_SYSTEM prompt + NEWAPI_KEY)落;这 4 份金样并作 U3 prompt few-shot 库源。
验收:node --test src/host/gd-archetypes.test.mjs 4/4;全 runtime 套件 50/50 无回归。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 23:08:51 -07:00 |
|
lili
|
b112f888cf
|
feat(game-runtime): U2 build-from-source 装配器(gameDefinition → 可玩工厂源文本)
plan 2026-06-18-001 U2 · 引擎线 · 解锁「源 → 可玩」装配链。
新增 game-runtime/src/host/build-from-source.mjs:
- validateSourceProject(sp) → {ok,errors,gameDefinition}:轻量校验 + top-level strip
(产线容错必做——剥模型塞的 schema 外键);引用完整性(entity.components→components[].id /
scene.entityRefs→entities[].id)+ behavior 缺逻辑 code 揪错。守 game-runtime「本机零依赖」
不引 ajv(inner 键宽松保留运行时用的 vx/vy/tags,待 schema 迭代再收紧)。
- assembleFactoryFromSource(sp,{runtimeImportPath?}) → generated-factory.js 源文本:
对齐已冻装载契约(game-host.d.ts:default export 工厂 → GameInstance{init,update,render,
destroy,_forensicsView}),五法委托 U1 createRuntime;gameDefinition 内联为 JS 字面量、
behavior.code 作数据串随之内联(运行期 new Function 编译)。校验失败 fail-loud(err.validationErrors
供 buildNode 回灌 repair feedback)。
接现有零改下游:产出文本 → scaffoldNode 落 generated-factory.js → scripts/build.mjs(esbuild,
不动)→ bundle.iife.js → 九门 harness(零改);entry-bundle.template.js 不动。
验收(lili-mac 快走查):
- node --test src/host/build-from-source.test.mjs 5/5——校验+strip / 装配产物含装载契约要件 +
node --check 过 / fail-loud / **端到端功能证**(装配文本经 createRuntime 真跑到 win + fx 真接线);
全 runtime 套件 46/46 无回归。
- 真 esbuild 链探针(探针目录已清,不入仓):金样 gameDefinition → assemble → scaffold(正确深度)→
真 build.mjs → bundle.iife.js(215KB,语法过,__GameBundle 全局在);metafile 实证
gd-runtime.js + boot-game-host.js + littlejsengine 全内联。
范围说明:U2 的后端 Java 接线(SaaGenNodes.buildNode/scaffoldNode 从 K_SOURCE_PROJECT 装配、
SaaStudioNodes.modifyNode deterministic 解除 fail-loud)属后端线、需 mvn/mini-desktop 验证,
随 U3 后端线一并落(plan 允两线并行)。本提交 = U2 引擎线核心(本机可验的装配地基)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 23:04:46 -07:00 |
|
lili
|
000f87d98b
|
feat(game-runtime): U1 运行时约定基座 createRuntime/rt(2D 适配器 behavior 侧 API)
plan 2026-06-18-001 U1 · 引擎线 · 真结构化 gameDefinition 产线化地基。
新增 game-runtime/src/host/gd-runtime.js:
- createRuntime(boot, gameDefinition) → 建可变世界(entities 实例)+ 产 rt 对象;
rt 即 U2 装配器编译每 behavior 时 new Function('rt','self','dt',code) 注入的那个 rt。
- rt 面(落 plan KTD2):实体 getEntity/entities/query/spawn/destroy(.x.y.vx.vy.alive
.components.tags+.get/set/destroy);输入轮询 input.isDown/justPressed/justTapped/pointer
(包 ctx.getInput 受控事件);时间随机 time.now(相对 elapsed,非绝对钟)/dt/random/randRange
/randInt(走 boot.ctx 受控种子,禁 Math.random/Date.now);分数胜负 score/addScore/setScore
/win()/lose()(置 latch 终态 gameover,不可逆=H门);工具特效 clamp/dist/overlap(AABB)+
fx.burst/beep(经 ctx.getEngine 真调引擎粒子/合成核=满F门,无引擎优雅 no-op)。
- behaviors 各带逻辑 JS 经 new Function 编译(init 跑一次/其余每帧),抛错隔离+回灌质量信号;
rules condition 编 JS 布尔(win/lose latch、score/advance 上升沿);物理组件 opt-in 积分;
声明式渲染器逐实体按 render 组件画 rect/circle/fill(behaviors 只逻辑不画)+极简 HUD。
受控面铁律:经 boot.ctx(PluginContext)注入,不触裸引擎/DOM;缺 ctx fail-loud。
迭代状态 v0(plan「别冻早」):契约 runtime-api-2d.d.ts 待收 3-5 类真实模型输出补 idiom 再正式化。
验收(lili-mac 快走查):node --test src/host/gd-runtime.test.mjs 10/10 过——
三条必验(rt.random 同种子可复现/win latch 驻留不可逆/fx.burst 真触发 ctx.getEngine)
+ 集成(behavior 编译跑通/rule latch/spawn-destroy-回收/输入轮询/物理积分/渲染出图)+缺 ctx 守卫。
全 runtime 套件 41/41 无回归。测试文件就近 src/host/(贴 npm test 的 src/**/*.test.mjs 约定,
非 plan 所写 test/unit/——遵仓内既有 co-located 约定)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 22:53:38 -07:00 |
|