P2 = 把 P1 装载契约从「装载王蓝莓一款」泛化为「装载任意 GamePackage」,经发布主链入 feed、 真人浏览器真玩。4 决策落实(O2(b)纳入 Phase C / DB-manifest 内嵌 / 灌库桩 / __GameBundle)。 三轨实现 - 后端:GamePackage schema 加 engineBundle additive 可选字段;buildGamePackage 加 engineBundle put (P3 生成路用,P2 恒 null→put 跳过→字节零变,单测 packageBytesReproducible 证);灌库桩 p2_seed_engine_bundle.mjs + 四态脚手架 p2_scaffold_4state.sql(W-CLEAN 后重建已发布游戏) - 运行时:P1 bootRef 泛化为 bootGameHost(opts)(引擎骨架照搬+参数化工厂来源/插件/视口), bootRef 退化薄包装;固化 build:ref-bundle 产 dist/ref-bundle.iife.js(--global-name=__GameBundle) - studio:inject.ts 引擎包分支(pkg.engineBundle? → 内联 script 暴露 window.__GameBundle → bootGameHost 挂引擎真渲;否则旧 startRuntime 路保兼容);掏空壳改引擎分支(Phase C);CSP 不放外域 对抗代码复审逮 2 mustFix(主 agent 亲核亲修 + 6c6g 复验) - 灌库桩读错产物(ref-bundle.js harness vs .iife.js)→ mini-desktop 灌库返工死循环 - 引擎分支漏发 game_start → 会话/play_count 静默吞、门②检不出 → 补发(DB session 行实证已修复) +2 shouldFix(兜底可观测信号 / 灌库 SQL @pj 防撞 max_allowed_packet) + 真机门逮 2 环境缺陷已修(seed charset=utf8mb4 防双编码断 checksum 链 / 四态脚手架补 W-CLEAN 空库) mini-desktop 真机门 6 门(逐门实数,主 agent 肉眼复核证据) ①build:ref-bundle 265374B/__GameBundle 真入包 ②Java 编译过+字节复现单测 ③studio staging 重建消 mock ④灌库 status=1∧checksum 64hex∧engineBundle 键齐∧manifest sha256 一致 ⑤真人 feed 点卡→引擎真渲 暖阳小卖部(warm=1246073px)非「重构中」+game_loaded+game_start+防 demo 三锚+console 零错+DB session 行 ⑥回滚:无 engineBundle→demo 壳/错误态,向后兼容未破。证据 game-studio/evidence/p2-feed/ 诚实 gap:game_end(到结算)未在自动化窗口内达成=ref gameover 需分钟级真玩+srcdoc 坐标盲点的取证局限, 非引擎/渲染能力缺陷(机制已通,留人工真玩到打烊补全)。受控面 6 项+game-host.d.ts 零改。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
71 lines
4.1 KiB
SQL
71 lines
4.1 KiB
SQL
-- ============================================================================
|
||
-- P2 真机门·四态脚手架(W-CLEAN 清库后重建一款已发布游戏供 engineBundle 灌库桩附着)
|
||
-- 缘由:seed 脚本 p2_seed_engine_bundle.mjs 原假设已存在已发布种子(9001 四态齐备),
|
||
-- 但 staging DB 已被 W-CLEAN 清空(0 version/0 package/0 feed_rank),故须先建四态脚手架。
|
||
-- (mini-desktop 2026-06-13 P2 真机门实测可用,gate 报告逮出后落库归仓。)
|
||
-- 四态:game_project.status=4(PUBLISHED) ∧ game_version.status=3 ∧ game_runtime_package.status=1 ∧ game_feed_rank 行
|
||
-- ID:gameId=9201 / versionId=92010 / pkgId=92010 / feedRankId=92010(高位区,零碰撞)
|
||
-- engineBundle 由后续 p2_seed_engine_bundle.mjs 9201 覆写 package_json(本脚本先建空 package_json 占位行)
|
||
-- 幂等:先 DELETE 同 ID 行再 INSERT(纯重建,可重复执行)
|
||
-- tenant:staging application-staging.yaml tenant.enable=false → tenant_id=0 即可
|
||
-- 用法:docker exec -i game-staging-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" < 本文件
|
||
-- ============================================================================
|
||
USE `ruoyi-vue-pro`;
|
||
-- charset 防御(与 seed 脚本同口径):强制 utf8mb4,避免中文 title 被客户端默认 latin1 双编码
|
||
SET NAMES utf8mb4;
|
||
|
||
START TRANSACTION;
|
||
|
||
-- 清旧(幂等重建)
|
||
DELETE FROM game_feed_rank WHERE game_id = 9201;
|
||
DELETE FROM game_runtime_package WHERE game_id = 9201;
|
||
DELETE FROM game_version WHERE game_id = 9201;
|
||
DELETE FROM game_project WHERE id = 9201;
|
||
|
||
-- ① project:已发布(status=4),current_version_id 指向 92010,launch_zone_id 留 NULL(→feed zone 0)
|
||
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
|
||
(9201, 1, '王蓝莓小卖部(引擎真渲)', 'P2 通用宿主真机门:ref 引擎 bundle 经 bootGameHost 真渲入 feed',
|
||
'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==',
|
||
'P2,engine,wanglanmei', 'wanglanmei-ref', 'all',
|
||
4, 92010, NULL, b'0', 0, 0,
|
||
'p2-scaffold', NOW(), 'p2-scaffold', NOW(), b'0', 0);
|
||
|
||
-- ② version:已发布(status=3),package_url 空(走 DB-manifest 端点),checksum 先占位(seed 脚本覆写运行包不动版本)
|
||
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
|
||
(92010, 9201, 1, NULL, '', 0, '',
|
||
3, 'p2-scaffold', NOW(), 'p2-scaffold', NOW(), b'0', 0);
|
||
|
||
-- ③ runtime_package:先建 status=1 行 + 空 package_json 占位(engineBundle 由 seed 脚本 UPDATE 覆写本行)
|
||
-- sandbox_attr/allow_origins 取既有发布默认;package_url 空=DB-manifest 内嵌路
|
||
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
|
||
(92010, 9201, 92010, 'wanglanmei-ref', '', 'index.html', '1.0.0', 'eager',
|
||
0, '', 'allow-scripts', '', 1,
|
||
'p2-scaffold', NOW(), 'p2-scaffold', NOW(), b'0', 0, NULL);
|
||
|
||
-- ④ feed_rank:zone_id=0(混合流) + status=1 入流 + sort_score=0
|
||
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
|
||
(92010, 9201, 92010, 0, 0.0000, 0.0000, 0.0000, 0, 1,
|
||
'p2-scaffold', NOW(), 'p2-scaffold', NOW(), b'0', 0);
|
||
|
||
COMMIT;
|
||
|
||
-- 回读四态
|
||
SELECT 'project' k, id, status, current_version_id FROM game_project WHERE id=9201
|
||
UNION ALL SELECT 'version', id, status, game_id FROM game_version WHERE id=92010
|
||
UNION ALL SELECT 'runtime_pkg', id, status, version_id FROM game_runtime_package WHERE id=92010
|
||
UNION ALL SELECT 'feed_rank', id, status, zone_id FROM game_feed_rank WHERE id=92010;
|