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>
48 lines
3.1 KiB
SQL
48 lines
3.1 KiB
SQL
-- ============================================================================
|
||
-- P3·3b-B 派发面终局 e2e·发布翻转(把 gameId=9303 的 feed 卡翻到【回调链新建的真生成 version】)
|
||
-- 缘由:回调链 handleCallback 建【新】version(N)+runtime_package(engineBundle=worker 真生成 bundle),但
|
||
-- 新 runtime_package 落库 status=0(未发布),且 project.current_version_id/feed_rank 仍指占位 93030。
|
||
-- 本脚本把三处翻到回调新版本 N,使 feed 服务【回调链产物】(=真生成游戏),完成终局闭环。
|
||
-- 自动选 N:gameId=9303 下 gen_task_id 非空(=回调建的,占位 93030 的 gen_task_id 为 NULL)的最新 version。
|
||
-- 幂等:纯 UPDATE 翻指针,可重复执行(再跑选同一 N)。
|
||
-- 用法: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;
|
||
|
||
-- 选回调新建的最新 version N(gen_task_id 非空 = 回调链建的;占位 93030 gen_task_id 为 NULL 被排除)
|
||
SET @vid := (SELECT id FROM game_version
|
||
WHERE game_id = 9303 AND gen_task_id IS NOT NULL AND deleted = b'0'
|
||
ORDER BY id DESC LIMIT 1);
|
||
|
||
-- ① 把回调新版本对应的 runtime_package 发布(status 0→1);占位 93030 包仍在但不再被 feed 指
|
||
UPDATE game_runtime_package SET status = 1, updater = '0', update_time = NOW()
|
||
WHERE game_id = 9303 AND version_id = @vid AND @vid IS NOT NULL;
|
||
|
||
-- ② project.current_version_id 指向回调新版本 N
|
||
UPDATE game_project SET current_version_id = @vid, updater = '0', update_time = NOW()
|
||
WHERE id = 9303 AND @vid IS NOT NULL;
|
||
|
||
-- ③ feed_rank.version_id 指向回调新版本 N(feed 卡 /play 取此 version 的包 = 回调真生成产物)
|
||
UPDATE game_feed_rank SET version_id = @vid, updater = '0', update_time = NOW()
|
||
WHERE game_id = 9303 AND @vid IS NOT NULL;
|
||
|
||
COMMIT;
|
||
|
||
-- 回读:翻转后的指针 + 新版本运行包态(@vid 即 feed 现服务的 versionId,供 CDP driver 用)
|
||
SELECT @vid AS flipped_version_id;
|
||
SELECT 'project.current_version' k, current_version_id v FROM game_project WHERE id=9303
|
||
UNION ALL SELECT 'feed_rank.version', version_id FROM game_feed_rank WHERE game_id=9303
|
||
UNION ALL SELECT 'new_pkg.status', status FROM game_runtime_package WHERE game_id=9303 AND version_id=@vid
|
||
UNION ALL SELECT 'new_pkg.bundleSize', bundle_size FROM game_runtime_package WHERE game_id=9303 AND version_id=@vid;
|
||
-- 校验 engineBundle 真入包(LENGTH>0 = 回调把真生成 bundle 落进 package_json)
|
||
SELECT 'engineBundle_in_pkg_len' k,
|
||
CHAR_LENGTH(JSON_UNQUOTE(JSON_EXTRACT(package_json, '$.engineBundle'))) v
|
||
FROM game_runtime_package WHERE game_id=9303 AND version_id=@vid;
|
||
-- 校验 checksum 自洽(列值 == 对所存 package_json 重算的 sha256)——宿主完整性校验链不变量
|
||
SELECT 'checksum_selfconsistent' k,
|
||
(checksum = LOWER(SHA2(package_json, 256))) v
|
||
FROM game_runtime_package WHERE game_id=9303 AND version_id=@vid;
|