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>
90 lines
5.7 KiB
SQL
90 lines
5.7 KiB
SQL
-- ============================================================================
|
||
-- P3·3b-B 派发面终局 e2e·四态脚手架 + generic 生成任务(gameId=9303,一句话真生成)
|
||
-- 缘由:3b-B 证「提交 generic 任务 → 执行器轮询 CAS 认领 → dispatchGeneric 投递真 worker →
|
||
-- worker 真烧便宜模型 design+九门生成 GameHostFactory → 回调携 engineBundle 经 HMAC 验签落包入 feed」。
|
||
-- 与 3b-A(9302·stub 回 pong) 的差异:本款 engineBundle 是【真生成】(brief=限时点击小怪物得分),非固定 pong。
|
||
-- 本脚本建:① 已发布 project(gameId=9303)+占位 version(93030)+占位 pkg+feed_rank(供组包/入 feed 四态成立);
|
||
-- ② game_aigc_task 一行(status=0 queued, template_id=generic, game_id=9303, prompt=一句话创意),
|
||
-- 供执行器 @Scheduled 扫到 → CAS 认领(0→1) → dispatchGeneric 投 worker :9401。
|
||
-- 回调链会另建【新】version(N)+runtime_package(engineBundle=worker 真生成 bundle);随后跑 p3bB_publish_flip.sql 翻 feed。
|
||
-- ID:gameId=9303 / 占位 versionId=93030 / pkgId=93030 / feedRankId=93030 / taskId 自增(高位区,与 9201/9301/9302 零碰撞)
|
||
-- trace_id:'wg1-3bB-gen9303-001'(贯穿全链;worker 回调 reqVO.traceId 须与此一致,handleCallback 据此定位任务)
|
||
-- 手工 seed 行 creator/updater 填 '0'(DefaultDBFieldHandler 无登录态取不到 userId 的同根因兜底)
|
||
-- tenant:staging tenant.enable=false → tenant_id=0
|
||
-- 幂等:先 DELETE 同 gameId/占位 ID 行 + 同 trace_id 任务再 INSERT(纯重建,可重复执行)。
|
||
-- 用法:docker exec -i game-staging-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" < 本文件
|
||
-- ============================================================================
|
||
USE `ruoyi-vue-pro`;
|
||
SET NAMES utf8mb4;
|
||
|
||
START TRANSACTION;
|
||
|
||
-- 清旧(幂等重建;删该 gameId 全部 version/package/feed_rank + 同 trace_id 任务,重跑前清场)
|
||
DELETE FROM game_aigc_task WHERE trace_id = 'wg1-3bB-gen9303-001';
|
||
DELETE FROM game_feed_rank WHERE game_id = 9303;
|
||
DELETE FROM game_runtime_package WHERE game_id = 9303;
|
||
DELETE FROM game_version WHERE game_id = 9303;
|
||
DELETE FROM game_project WHERE id = 9303;
|
||
|
||
-- ① project:已发布(status=4),current_version_id 先指占位 93030(flip 后改指回调新版本 N)
|
||
INSERT INTO game_project
|
||
(id, creator_user_id, title, summary, cover_url, tags, template_id, age_rating,
|
||
status, current_version_id, launch_zone_id, featured, play_count, like_count,
|
||
creator, create_time, updater, update_time, deleted, tenant_id)
|
||
VALUES
|
||
(9303, 1, '打地鼠(generic 真生成·回调入feed)', 'P3 3b-B 派发面终局 e2e:一句话创意经 worker 真生成 GameHostFactory 过九门,回调携 engineBundle 入 feed',
|
||
'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==',
|
||
'P3,3b-B,dispatch,generic,real-gen', 'generic', 'all',
|
||
4, 93030, NULL, b'0', 0, 0,
|
||
'0', NOW(), '0', NOW(), b'0', 0);
|
||
|
||
-- ② 占位 version:已发布(status=3),仅供脚手架四态成立;回调会另建新 version(N)
|
||
INSERT INTO game_version
|
||
(id, game_id, version_no, gen_task_id, package_url, bundle_size, checksum,
|
||
status, creator, create_time, updater, update_time, deleted, tenant_id)
|
||
VALUES
|
||
(93030, 9303, 1, NULL, '', 0, '',
|
||
3, '0', NOW(), '0', NOW(), b'0', 0);
|
||
|
||
-- ③ 占位 runtime_package:status=1 + 空 package_json(占位包;flip 前 feed 卡指它,flip 后指回调新包)
|
||
INSERT INTO game_runtime_package
|
||
(id, game_id, version_id, template_id, package_url, entry, runtime_version, preload_policy,
|
||
bundle_size, checksum, sandbox_attr, allow_origins, status,
|
||
creator, create_time, updater, update_time, deleted, tenant_id, package_json)
|
||
VALUES
|
||
(93030, 9303, 93030, 'generic', '', 'index.html', '1.0.0', 'eager',
|
||
0, '', 'allow-scripts', '', 1,
|
||
'0', NOW(), '0', NOW(), b'0', 0, NULL);
|
||
|
||
-- ④ feed_rank:zone_id=0(混合流) + status=1 入流(flip 后把 version_id 改指回调新版本 N)
|
||
INSERT INTO game_feed_rank
|
||
(id, game_id, version_id, zone_id, quality_score, boost, sort_score, pinned, status,
|
||
creator, create_time, updater, update_time, deleted, tenant_id)
|
||
VALUES
|
||
(93030, 9303, 93030, 0, 0.0000, 0.0000, 0.0000, 0, 1,
|
||
'0', NOW(), '0', NOW(), b'0', 0);
|
||
|
||
-- ⑤ generic 生成任务:status=0 queued → 执行器 @Scheduled 扫到 CAS 认领 → dispatchGeneric 投 worker
|
||
-- prompt=一句话创意(whack/点击得分型,避开 4 短板:文本HUD/网格/CCD/拖拽);
|
||
-- prompt_hash 给占位非空值(NOT NULL char(64);缓存键,本端到端不依赖命中);
|
||
-- failure_reason/result_package_url 占位空串(NOT NULL)。
|
||
INSERT INTO game_aigc_task
|
||
(creator_user_id, game_id, version_id, template_id, prompt, prompt_hash,
|
||
status, progress, quality_score, failure_reason, result_package_url, retry_of, trace_id,
|
||
creator, create_time, updater, update_time, finish_time, deleted, tenant_id)
|
||
VALUES
|
||
(1, 9303, NULL, 'generic', '限时点击不断冒出的小怪物得分',
|
||
'0000000000000000000000000000000000000000000000000000000000000000',
|
||
0, 0, NULL, '', '', NULL, 'wg1-3bB-gen9303-001',
|
||
'0', NOW(), '0', NOW(), NULL, b'0', 0);
|
||
|
||
COMMIT;
|
||
|
||
-- 回读四态 + 任务
|
||
SELECT 'project' k, id, status, current_version_id FROM game_project WHERE id=9303
|
||
UNION ALL SELECT 'version', id, status, game_id FROM game_version WHERE id=93030
|
||
UNION ALL SELECT 'runtime_pkg', id, status, version_id FROM game_runtime_package WHERE id=93030
|
||
UNION ALL SELECT 'feed_rank', id, status, version_id FROM game_feed_rank WHERE id=93030;
|
||
SELECT 'aigc_task' k, id, status, game_id, template_id, prompt, trace_id
|
||
FROM game_aigc_task WHERE trace_id='wg1-3bB-gen9303-001';
|