fix(saa): GAMEDEF_SYSTEM 加 tap-targets few-shot(harness 探针证 9/9 正确)+ 快走查 repair 可配
plan 2026-06-18-001 U3 迭代2轮:据 cutover 早读「tap-targets 类系统性 5/9(E_live/F_wiring)」根因诊断+整改。 根因决断(harness 受控探针,无 LLM):把**手写 known-correct tap-targets gameDefinition**直接过全 harness → **9/9 真过**(E_live distinct=8/8、F_wiring 12 引擎调用)。**故运行时+装配器+tap-targets driver+约定全正确**; whack/tictactoe 失败 = **便宜模型生成质量**(tap-handling 写错:点击未判中→无 spawn/fx/计分→画面恒定),非基建/集成 bug。 GAMEDEF_SYSTEM 加 tap-targets few-shot(SaaPrompts.java):tile 网格每格 tags:["target"]+idx+occupied, justTapped→pointer overlap 判中→occupied 翻+spawn 标记(可见)+addScore+fx;win=score>=N。 few-shot 本身经探针证 9/9 正确(教对 idiom);实测使模型确给 target 打标(gd-whack 9/10 tagged)。 残留 tap-handling 精度=R3 便宜模型质量,靠 **repair 回环(真图 5+3 轮,本机只跑 3)+ stage2 升档(强档)** 解。 快走查:MAX_RETRIES 改 QC_MAX_RETRIES 环境可配(真图 maxRepairs=5,本机早读取 3 平衡时延)。 结论:**gamedef 路两大品类(realtime/physics + tap-targets)路径均证正确**;首攻便宜模型质量随品类波动, cutover 率 = repair 预算 + 模型档 的函数(二者在 mini-desktop 全图满配)。≥60% authoritative=mini-desktop。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
099fb8106d
commit
c24b7fb4d2
@ -207,6 +207,28 @@ final class SaaPrompts {
|
||||
"scenes":[{"id":"main","entityRefs":["world","player"]}],
|
||||
"rules":[{"id":"survive","condition":"rt.score >= 20","outcome":"win"}]
|
||||
}
|
||||
|
||||
【参照2(离散点击/tap-targets 类:井字棋/打地鼠/翻牌/三消点选——每个可点目标打 tags:["target"]+idx+occupied,点中→翻态+spawn 标记可见+计分)】
|
||||
{
|
||||
"components":[
|
||||
{"id":"bg","kind":"render","shape":"fill","color":"#10101a"},
|
||||
{"id":"tile","kind":"render","shape":"rect","color":"#33384a","w":100,"h":100}
|
||||
],
|
||||
"entities":[
|
||||
{"id":"world","transform":{"position":{"x":0,"y":0}},"components":["bg"]},
|
||||
{"id":"t0","transform":{"position":{"x":75,"y":350}},"tags":["target"],"idx":0,"components":["tile"]},
|
||||
{"id":"t1","transform":{"position":{"x":195,"y":350}},"tags":["target"],"idx":1,"components":["tile"]},
|
||||
{"id":"t2","transform":{"position":{"x":315,"y":350}},"tags":["target"],"idx":2,"components":["tile"]},
|
||||
{"id":"t3","transform":{"position":{"x":75,"y":520}},"tags":["target"],"idx":3,"components":["tile"]},
|
||||
{"id":"t4","transform":{"position":{"x":195,"y":520}},"tags":["target"],"idx":4,"components":["tile"]},
|
||||
{"id":"t5","transform":{"position":{"x":315,"y":520}},"tags":["target"],"idx":5,"components":["tile"]}
|
||||
],
|
||||
"behaviors":[
|
||||
{"id":"tap","trigger":"update","code":"if(!rt.input.justTapped()) return; const p=rt.input.pointer; for(const t of rt.query('target')){ if(!t.occupied && rt.overlap({x:p.x,y:p.y,w:8,h:8},{x:t.x,y:t.y,w:100,h:100})){ t.occupied=true; rt.spawn({x:t.x,y:t.y,components:[{kind:'render',shape:'circle',color:'#ffcc00',r:30}]}); rt.addScore(1); rt.fx.burst(t.x,t.y,'#ffcc00'); rt.fx.beep('score'); break; } }"}
|
||||
],
|
||||
"scenes":[{"id":"main","entityRefs":["world","t0","t1","t2","t3","t4","t5"]}],
|
||||
"rules":[{"id":"win","condition":"rt.score >= 6","outcome":"win"}]
|
||||
}
|
||||
""";
|
||||
|
||||
// ============================================================================
|
||||
|
||||
@ -27,7 +27,8 @@ SAA_PROMPTS = (REPO_ROOT / "game-cloud/game-module-aigc/game-module-aigc-server/
|
||||
GAME_RUNTIME = REPO_ROOT / "game-runtime"
|
||||
GEN_DIR = GAME_RUNTIME / "games" / "_wg1-gen"
|
||||
BRIEFS = Path(__file__).resolve().parent / "briefs"
|
||||
MAX_RETRIES = 2 # repair 回环上限(mirror studio.py max_repairs 默认;总尝试=MAX_RETRIES+1)
|
||||
import os
|
||||
MAX_RETRIES = int(os.environ.get("QC_MAX_RETRIES", "3")) # repair 回环上限(可环境覆盖;真图 maxRepairs=5,本机早读取 3 平衡时延)
|
||||
|
||||
|
||||
def extract_block(name):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user