3b-B e2e(mini-desktop 真跑·证据 wg1/gen-worker/evidence-3bB/): ✅ P0-P4 安全面+全自动管线=真证闭合(铁证 backend-callback-hmac.log + p4*.txt): - HMAC 双向证:缺签名头→HTTP 401 / 错签(deadbeef≠482147b5)→HTTP 401 / 正签→过门(走到下游"任务不存在"非401) =关死 /dify/callback-internal 裸 @PermitAll 缺口 - 全自动派发链真通:执行器认领 taskId→dispatchGeneric 投 §6.1 job→worker 真生成(真烧模型)→ HMAC 签名回调→验签通过→handleCallback 落库(gen-9303/9304/9305 三轮齐全) ❌ P5 一句话真生成=未达终局:三款全 nine_gate_failed。但截图(gen-9303-after-play.png)证生成 真出 on-theme 可渲可动的「点击小怪物」游戏(Score/3s 倒计时/多彩怪物 monsters/targetScore=12), 仅点击→计分坏(Score 仍 0)→九门确定性地板正确拦截「看着像但玩不了」=质量门正确履职、拒发不可玩。 判:L0 交付(管线+安全+质量门)已完成且证;缺=便宜模型把「点击命中→计分」写对=L1 生成域 (prompt 点击坑+模型档+player/calibration,run_studio 自修 max_repairs 未救回)→转 L1 v3 迭代。 附带:serve-and-play.sh 跨平台 Chrome 探测(CHROME_BIN 覆盖>Linux /usr/bin>macOS>PATH 兜底, Linux 在前因 mini-desktop x86 是权威 e2e 机);p3bB_*.sql 发布四态/翻 feed 桩。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
117 lines
2.4 KiB
JSON
117 lines
2.4 KiB
JSON
{
|
|
"gameId": "gen-9304",
|
|
"url": "http://localhost:4320/games/_wg1-gen/gen-9304/index.html",
|
|
"ts": null,
|
|
"guards": {
|
|
"A_boot": {
|
|
"pass": true
|
|
},
|
|
"C_frame": {
|
|
"pass": true,
|
|
"f0": 60,
|
|
"f1": 90,
|
|
"delta": 30
|
|
},
|
|
"I_control": {
|
|
"pass": false,
|
|
"paddlePath": "paddleX",
|
|
"results": [
|
|
{
|
|
"tapX": 50,
|
|
"before": 195,
|
|
"after": 195,
|
|
"moved": 0,
|
|
"distToTarget": 145,
|
|
"pass": false
|
|
},
|
|
{
|
|
"tapX": 340,
|
|
"before": 195,
|
|
"after": 195,
|
|
"moved": 0,
|
|
"distToTarget": 145,
|
|
"pass": false
|
|
}
|
|
]
|
|
},
|
|
"D_render": {
|
|
"pass": true,
|
|
"bright": 1091360,
|
|
"maxCh": 255
|
|
},
|
|
"E_live": {
|
|
"pass": true,
|
|
"distinctStates": 31,
|
|
"samples": 31
|
|
},
|
|
"B_uncaught": {
|
|
"pass": true,
|
|
"uncaught": []
|
|
},
|
|
"F_wiring": {
|
|
"pass": true,
|
|
"callCount": 89,
|
|
"sample": [
|
|
"particles.spawnEmitter",
|
|
"particles.spawnEmitter",
|
|
"audio.synth.synthSfx",
|
|
"particles.spawnEmitter",
|
|
"audio.synth.synthSfx",
|
|
"particles.spawnEmitter",
|
|
"audio.synth.synthSfx",
|
|
"particles.spawnEmitter",
|
|
"audio.synth.synthSfx",
|
|
"particles.spawnEmitter",
|
|
"audio.synth.synthSfx",
|
|
"particles.spawnEmitter"
|
|
],
|
|
"expected": []
|
|
},
|
|
"G_input": {
|
|
"pass": true,
|
|
"inputHash": "2f4267bc",
|
|
"controlHash": "1ceee3f7",
|
|
"atFrame": 1176,
|
|
"ctrlFrame": 1181
|
|
},
|
|
"H_progress": {
|
|
"pass": true,
|
|
"checks": [
|
|
{
|
|
"path": "score",
|
|
"op": "increased",
|
|
"before": 0,
|
|
"after": 2,
|
|
"pass": true,
|
|
"why": "接住小球得分"
|
|
}
|
|
],
|
|
"latch": {
|
|
"pass": true,
|
|
"dwelledMs": 600,
|
|
"after": "gameover",
|
|
"reason": ""
|
|
},
|
|
"state0": {
|
|
"phase": "playing",
|
|
"score": 0,
|
|
"remaining": 1,
|
|
"progress": null,
|
|
"gameoverReason": "",
|
|
"ballPosX": 210.06992567097768,
|
|
"paddleX": 195
|
|
},
|
|
"state1": {
|
|
"phase": "gameover",
|
|
"score": 2,
|
|
"remaining": 0,
|
|
"progress": null,
|
|
"gameoverReason": "ball_lost",
|
|
"ballPosX": -1,
|
|
"paddleX": 195
|
|
}
|
|
}
|
|
},
|
|
"pass": false,
|
|
"notes": []
|
|
} |