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>
133 lines
4.9 KiB
JSON
133 lines
4.9 KiB
JSON
{
|
||
"game_id": "gen-9303",
|
||
"stage": "stage1",
|
||
"pass": false,
|
||
"repairs": 5,
|
||
"player_rounds_used": 0,
|
||
"design_text": "你是轻量 H5 小游戏的【设计 agent】。输入是“限时点击不断冒出的小怪物得分”,输出设计稿。\n\n---\n\n## 设计稿\n\n1. **核心机制**:每 1.2~1.8 秒从屏幕顶部或两侧随机刷出一只小怪物(大小约 80×80),怪物缓慢下落或横向飘移。玩家需在 30 秒内点击怪物得分,点击空白处或不点击不会惩罚,但得分过少则输。\n2. **胜负条件**:\n - **赢**:倒计时结束时,得分 ≥ 目标分 12。\n - **输**:倒计时结束得分 < 12;或点击到随机出现的炸弹怪物(每 8~10 秒混入一只)立即输。\n3. **操作**:触摸点击怪物身体区域(检测点击位置与怪物矩形中心 ≤ 40px)。无连续操控。\n4. **关键数值**:\n - 怪物出现间隔:1.2~1.8 秒(随机),首个怪物在 1.0 秒后出现。\n - 怪物移动速度:垂直下落 40~60 px/s,或水平飘移 30~50 px/s(方向随机)。\n - 炸弹怪物出现概率:每 8~10 秒一次,点击即游戏结束。\n - 倒计时:30 秒,显示在右上角。\n - 目标分:12 分。\n5. **Juice 反馈**:\n - 点击普通怪物 → 粒子爆发(8~12 个彩色碎片向外扩散 20px)+ 轻快叮声(必要)。\n - 点击炸弹 → 全屏红色闪烁 + 短时震动(200ms)+ 低音爆炸音效。\n - 倒计时最后 5 秒:加速跳动提示。\n6. **画面要点**:\n - 背景:浅绿色渐变(#D4E9D5 → #A8D8A8),全屏铺满。\n - 怪物:圆形/椭圆形,随机颜色(橙/紫/蓝/粉),眼睛是两个小黑点,简单可爱。\n - 炸弹:黑白圆形,直径 70,带引线图案。\n - HUD:左上角分数(白色粗体 36px),右上角倒计时(红色 32px,最后 5 秒变大)。\n7. **可观测进展**:\n - 分数实时增加(点击屏幕左上角数字上升)。\n - 倒计时数字递减,最后 5 秒闪烁。\n - 怪物被点击后消失(粒子动画证明击中)。\n - 炸弹出现时屏幕边缘出现红色闪烁提示。\n - 胜负切换:倒计时归零 → 切换至结算界面(显示得分+胜/败字样),点击任意处可重玩。\n\n```gatespec\n{\n \"exportState\": [\"phase\", \"score\", \"timeLeft\", \"monsters\"],\n \"driver\": {\"type\": \"none\"},\n \"controlCheck\": null,\n \"assertAfterPlay\": [\n {\"path\": \"score\", \"op\": \">=\", \"why\": \"点击怪物后得分增加\"}\n ],\n \"expectLatch\": true\n}\n```",
|
||
"gatespec": {
|
||
"exportState": [
|
||
"phase",
|
||
"score",
|
||
"timeLeft",
|
||
"monsters"
|
||
],
|
||
"driver": {
|
||
"type": "none"
|
||
},
|
||
"controlCheck": null,
|
||
"assertAfterPlay": [
|
||
{
|
||
"path": "score",
|
||
"op": ">=",
|
||
"why": "点击怪物后得分增加"
|
||
}
|
||
],
|
||
"expectLatch": true
|
||
},
|
||
"attempts": [
|
||
{
|
||
"attempt": 0,
|
||
"role": "code",
|
||
"model": "deepseek-v4-flash",
|
||
"stage_fail": "seven_gate",
|
||
"usage": {
|
||
"in": 4206,
|
||
"out": 5531
|
||
},
|
||
"seven_gate_pass": false,
|
||
"guards": {}
|
||
},
|
||
{
|
||
"attempt": 1,
|
||
"role": "fix",
|
||
"model": "deepseek-v4-flash",
|
||
"stage_fail": "seven_gate",
|
||
"usage": {
|
||
"in": 4249,
|
||
"out": 6241
|
||
},
|
||
"seven_gate_pass": false,
|
||
"guards": {}
|
||
},
|
||
{
|
||
"attempt": 2,
|
||
"role": "fix",
|
||
"model": "deepseek-v4-flash",
|
||
"stage_fail": "seven_gate",
|
||
"usage": {
|
||
"in": 4249,
|
||
"out": 5585
|
||
},
|
||
"seven_gate_pass": false,
|
||
"guards": {}
|
||
},
|
||
{
|
||
"attempt": 3,
|
||
"role": "fix",
|
||
"model": "deepseek-v4-flash",
|
||
"stage_fail": "seven_gate",
|
||
"usage": {
|
||
"in": 4249,
|
||
"out": 5575
|
||
},
|
||
"seven_gate_pass": false,
|
||
"guards": {}
|
||
},
|
||
{
|
||
"attempt": 4,
|
||
"role": "fix",
|
||
"model": "deepseek-v4-flash",
|
||
"stage_fail": "seven_gate",
|
||
"usage": {
|
||
"in": 4249,
|
||
"out": 6523
|
||
},
|
||
"seven_gate_pass": false,
|
||
"guards": {}
|
||
},
|
||
{
|
||
"attempt": 5,
|
||
"role": "fix",
|
||
"model": "deepseek-v4-flash",
|
||
"stage_fail": "seven_gate",
|
||
"usage": {
|
||
"in": 4249,
|
||
"out": 5490
|
||
},
|
||
"seven_gate_pass": false,
|
||
"guards": {}
|
||
}
|
||
],
|
||
"seven_gate_verdict": null,
|
||
"player": null,
|
||
"tokens": {
|
||
"prompt": 26160,
|
||
"completion": 36307
|
||
},
|
||
"tokens_by_model": {
|
||
"deepseek-v4-flash": [
|
||
26160,
|
||
36307
|
||
]
|
||
},
|
||
"cost": {
|
||
"by_model": {
|
||
"deepseek-v4-flash": {
|
||
"in": 26160,
|
||
"out": 36307,
|
||
"rmb": 0.07857
|
||
}
|
||
},
|
||
"total_rmb": 0.07857,
|
||
"gate_rmb": 0.15
|
||
},
|
||
"wall_s": 388.4,
|
||
"models": {
|
||
"design": "deepseek-v4-flash",
|
||
"code": "deepseek-v4-flash",
|
||
"fix": "deepseek-v4-flash",
|
||
"player_vision": "MiniMax-M3",
|
||
"player_text": "deepseek-v4-flash"
|
||
}
|
||
} |