3a canary:pong 真 bundle→buildGamePackage→发布→feed 引擎真渲真玩(gameId 9301,brick-2 真值通路 mvn 13/13 验)。3b-A 派发面:执行器对 generic dispatch 外置 worker→worker 回调→buildGamePackage→feed,stub worker e2e 实证(任务129→版本93111→gameId 9302 引擎真渲 CDP 11/11)。
改动:① 点亮 AigcTemplateConstants(List.of(generic))+PromptResourceLoader ② 派发面 AigcGenerateExecutor(dispatchGeneric 分支:仅 dispatchTemplateId=generic 走、其余进程内 LLM 旧路逐行不变=零回归)+WorkerDispatchClient+AigcExecutorProperties/Configuration ③ 内网回调 AdminAigcTaskController @PermitAll /dify/callback-internal(注入系统身份解 updater-null=部署窗口#3 同根因复发,镜像 executeWithSystemIdentity)④ stub worker scripts/wg1_stub_worker.py + 灌库/发布桩 p3_*/p3b_* + config worker-url ⑤ 单测 +3 派发面用例(dispatch/失败/零回归 clicker 不 dispatch)⑥ 蒸馏 ai-generation-pipeline.md §⓪′ 派发面范式+2 红线。
零回归硬约束:AigcGenerateExecutorTest 20/0/0、AigcTaskServiceImplTest 9/0/0,clicker 仍进程内(dispatchSender 零交互)。主笔亲核 gating diff(:342-344 仅 generic)+肉眼复核 feed 真玩截图。🔴 安全红线(留 3b-B):/dify/callback-internal 跳 RBAC 仅恃内网兜底,真 worker/外部接入前必补 HMAC/mTLS 服务间签名。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
51 lines
3.3 KiB
SQL
51 lines
3.3 KiB
SQL
-- ============================================================================
|
||
-- P3·3b-A 派发面 e2e·发布翻转(把 gameId=9302 的 feed 卡翻到【回调链新建的】version)
|
||
-- 缘由:回调链 handleCallback 建【新】version(N)+runtime_package(engineBundle=stub 回的 pong),但
|
||
-- 新 runtime_package 落库 status=0(未发布),且 project.current_version_id/feed_rank 仍指占位 93020。
|
||
-- 本脚本把三处翻到回调新版本 N,使 feed 服务【回调链产物】(=派发面真产物),证 plumbing 闭环。
|
||
-- 自动选 N:gameId=9302 下 gen_task_id 非空(=回调建的,占位 93020 的 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 非空 = 回调链建的;占位 93020 gen_task_id 为 NULL 被排除)
|
||
SET @vid := (SELECT id FROM game_version
|
||
WHERE game_id = 9302 AND gen_task_id IS NOT NULL AND deleted = b'0'
|
||
ORDER BY id DESC LIMIT 1);
|
||
|
||
-- 防御:未找到回调新版本则不翻(保持占位态,避免把 feed 指向不存在版本)
|
||
-- (@vid 为 NULL 时下方 UPDATE 的 WHERE 不命中任何行,安全空操作)
|
||
|
||
-- ① 把回调新版本对应的 runtime_package 发布(status 0→1);占位 93020 包仍在但不再被 feed 指
|
||
UPDATE game_runtime_package SET status = 1, updater = 'p3b-flip', update_time = NOW()
|
||
WHERE game_id = 9302 AND version_id = @vid AND @vid IS NOT NULL;
|
||
|
||
-- ② project.current_version_id 指向回调新版本 N
|
||
UPDATE game_project SET current_version_id = @vid, updater = 'p3b-flip', update_time = NOW()
|
||
WHERE id = 9302 AND @vid IS NOT NULL;
|
||
|
||
-- ③ feed_rank.version_id 指向回调新版本 N(feed 卡 /play 取此 version 的包 = 回调产物 pong)
|
||
UPDATE game_feed_rank SET version_id = @vid, updater = 'p3b-flip', update_time = NOW()
|
||
WHERE game_id = 9302 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=9302
|
||
UNION ALL SELECT 'feed_rank.version', version_id FROM game_feed_rank WHERE game_id=9302
|
||
UNION ALL SELECT 'new_pkg.status', status FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid
|
||
UNION ALL SELECT 'new_pkg.bundleSize', bundle_size FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid;
|
||
-- 校验 engineBundle 真入包(LENGTH>0 = 回调把 pong 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=9302 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=9302 AND version_id=@vid;
|