zizi c99014c243 test(aigc-3b-B): 派发面 e2e 真证安全面+全自动管线闭合(HMAC双向),P5 生成质量转 L1
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>
2026-06-14 16:20:28 +00:00

317 lines
8.5 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"game_id": "gen-9304",
"stage": "stage1",
"pass": false,
"repairs": 5,
"player_rounds_used": 0,
"design_text": "【轻量接球游戏·设计稿】\n\n1. **核心机制**:手指左右滑动,控制底部挡板接住从顶部随机位置下落的小球。每接住一颗得1分,漏掉则立即结束游戏,追求最高分。\n\n2. **胜负条件**: \n - 输:漏掉任意一颗小球,游戏结束(失败态)。 \n - 赢:无限模式,分数可不断累积,目标为获得更高分数(无固定胜利,仅追求高分)。\n\n3. **操作**:触摸滑动手指,挡板 x 坐标平滑跟随手指 x,限制在屏幕左右边缘(0~390px 内)。无其他按键。\n\n4. **关键数值**(逻辑像素 390×844): \n - 挡板:宽 120px,高 20px,底部 y = 814(距离底边 30px)。 \n - 小球:半径 10px;初始下落速度 150px/s;每得 5 分速度提升 10%。 \n - 生成间隔:随机 0.5~1.5s;x 范围 [20,370]。\n\n5. **juice 反馈**: \n - 接住小球:播放“叮”声效(引擎音频),小球缩小的动画。 \n - 漏球:引擎震动(shake 0.2s),短暂红屏,低沉失败音。\n\n6. **画面要点**: \n - 背景:从上到下渐变色(深蓝→浅蓝),铺满。 \n - 挡板:白色半透明圆角矩形。 \n - 小球:随机亮色(红/黄/青)。 \n - HUD:顶部分数显示(白色大字号,带轻微的缩放脉冲动画)。\n\n7. **可观测进展**:分数实时增加(每接住一次 +1)。漏球后 phase 从 \"playing\" 切换为 \"gameover\",分数锁定并显示“最终分数”及重玩按钮。\n\n```gatespec\n{\n \"exportState\": [\"phase\",\"score\",\"ballPosX\",\"paddleX\"],\n \"driver\": {\"type\":\"paddle-intercept\",\"ballPath\":\"ballPosX\",\"paddleY\":814},\n \"controlCheck\": {\"paddlePath\":\"paddleX\",\"tapXs\":[50,340]},\n \"assertAfterPlay\": [{\"path\":\"score\",\"op\":\"increased\",\"why\":\"接住小球得分\"}],\n \"expectLatch\": true\n}\n```",
"gatespec": {
"exportState": [
"phase",
"score",
"ballPosX",
"paddleX"
],
"driver": {
"type": "paddle-intercept",
"ballPath": "ballPosX",
"paddleY": 814
},
"controlCheck": {
"paddlePath": "paddleX",
"tapXs": [
50,
340
]
},
"assertAfterPlay": [
{
"path": "score",
"op": "increased",
"why": "接住小球得分"
}
],
"expectLatch": true
},
"attempts": [
{
"attempt": 0,
"role": "code",
"model": "deepseek-v4-flash",
"stage_fail": "seven_gate",
"usage": {
"in": 4060,
"out": 6004
},
"seven_gate_pass": false,
"guards": {
"A_boot": true,
"C_frame": true,
"I_control": false,
"D_render": true,
"E_live": true,
"B_uncaught": true,
"F_wiring": true,
"G_input": true,
"H_progress": false
}
},
{
"attempt": 1,
"role": "fix",
"model": "deepseek-v4-flash",
"stage_fail": "seven_gate",
"usage": {
"in": 4278,
"out": 5191
},
"seven_gate_pass": false,
"guards": {
"A_boot": true,
"C_frame": true,
"I_control": true,
"D_render": true,
"E_live": true,
"B_uncaught": true,
"F_wiring": true,
"G_input": true,
"H_progress": false
}
},
{
"attempt": 2,
"role": "fix",
"model": "deepseek-v4-flash",
"stage_fail": "seven_gate",
"usage": {
"in": 4189,
"out": 9126
},
"seven_gate_pass": false,
"guards": {
"A_boot": true,
"C_frame": true,
"I_control": true,
"D_render": true,
"E_live": true,
"B_uncaught": true,
"F_wiring": true,
"G_input": true,
"H_progress": false
}
},
{
"attempt": 3,
"role": "fix",
"model": "deepseek-v4-flash",
"stage_fail": "seven_gate",
"usage": {
"in": 4189,
"out": 7909
},
"seven_gate_pass": false,
"guards": {
"A_boot": true,
"C_frame": true,
"I_control": false,
"D_render": true,
"E_live": true,
"B_uncaught": true,
"F_wiring": true,
"G_input": true,
"H_progress": true
}
},
{
"attempt": 4,
"role": "fix",
"model": "deepseek-v4-flash",
"stage_fail": "seven_gate",
"usage": {
"in": 4187,
"out": 6430
},
"seven_gate_pass": false,
"guards": {
"A_boot": true,
"C_frame": true,
"I_control": true,
"D_render": true,
"E_live": true,
"B_uncaught": true,
"F_wiring": true,
"G_input": true,
"H_progress": false
}
},
{
"attempt": 5,
"role": "fix",
"model": "deepseek-v4-flash",
"stage_fail": "seven_gate",
"usage": {
"in": 4189,
"out": 6097
},
"seven_gate_pass": false,
"guards": {
"A_boot": true,
"C_frame": true,
"I_control": false,
"D_render": true,
"E_live": true,
"B_uncaught": true,
"F_wiring": true,
"G_input": true,
"H_progress": true
}
}
],
"seven_gate_verdict": {
"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": []
},
"player": null,
"tokens": {
"prompt": 25813,
"completion": 42252
},
"tokens_by_model": {
"deepseek-v4-flash": [
25813,
42252
]
},
"cost": {
"by_model": {
"deepseek-v4-flash": {
"in": 25813,
"out": 42252,
"rmb": 0.08738
}
},
"total_rmb": 0.08738,
"gate_rmb": 0.15
},
"wall_s": 785.7,
"models": {
"design": "deepseek-v4-flash",
"code": "deepseek-v4-flash",
"fix": "deepseek-v4-flash",
"player_vision": "MiniMax-M3",
"player_text": "deepseek-v4-flash"
}
}