73 lines
8.0 KiB
Markdown
73 lines
8.0 KiB
Markdown
# 本地启动、加载、登录真实验收
|
||
|
||
日期:2026-09-05。分支:`codex/local-platform-login`。代码:`4414e1b`。状态:本批启动、真实加载和两次独立预览登录验收通过;未合并、未推送。
|
||
|
||
## 工作区与范围
|
||
|
||
仅在 `G:/Works/YouleGamesCocosCreator` 主 checkout 使用 Git 分支;Creator 固定打开其下 `cocoscreator_projects/YouleNexus`(3.8.8)。不再使用 worktree。保留原有 50 项未提交文件的状态和 SHA256;不自动 stash。
|
||
|
||
本批独立 `LocalPlatformLogin` 场景只验证启动、加载、游客登录及结果显示。未改生产启动场景、默认 prod、GameEntry 契约、服务器、远程配置或原生接口;未选择子游戏,未发起其他平台或房间 RPC。
|
||
|
||
序列化新增严格为设计第 8 节授权的九项资源,全部通过 funplay MCP/Creator 生成、绑定、保存和重开验证。源 Login/Loading Prefab 未修改。
|
||
|
||
## 配置与账号单源
|
||
|
||
- `assets/framework/config/profiles.ts`:debug/local 的直接连接目标为 `ws://127.0.0.1:3088`,跳过远程配置。
|
||
- `assets/framework/config/sources/defaults.ts` 的 `BUILD_IDENTITY`:agentid、channelid、gameid、marketid、version 的构建来源。正式字段拼写为 `channelid`。
|
||
- `runtime-config.ts` → `local-startup.ts`:解析真实 `location.search`,必须显式 `profile=local`;宿主只解析一次,将同一配置交给 Runtime、诊断 GameEntry 与本地账号来源。
|
||
- `assets/framework/adapters/local/visitor-account.ts`:按身份/连接作用域读取严格缓存或生成游客;openid 为 `testopenid_<随机数>`,unionid 为 `ylgame<同一随机数>`,同时产生昵称、头像、性别和地区。
|
||
- `assets/framework/adapters/local/login-sources.ts`:同次账号准备提供设备快照,机器标识从独立缓存读取或由时间戳与随机后缀生成;本地 location 显式为 null,其他可选输入遵循来源定义。消费方不补默认值。
|
||
- 既有协议构造器产生唯一 `agent/player_login` 信封;未执行历史 `scripts/login-live.ts`。
|
||
|
||
本次真实请求使用未覆盖的 BUILD 身份,`version=1` 且类型为 number。下述 state=0 回包证明该组合被此次实际本地服务接受;不将源码配置或 TCP 可达单独当作身份匹配证据。
|
||
|
||
## 编辑器和运行环境
|
||
|
||
- 本地监听:3088,PID 20092,`G:/Works/JinXianProjects/gateway/game-gateway.exe`。只读复核,无服务端写入。
|
||
- 场景 UUID:`67e69aac-9982-4e78-a44c-1d9c42f016ae`。1600×720,Host 仅挂新组件;九项组件引用经保存、切回原场景、重新打开验证有效。
|
||
- Creator 返回预览端口 7456。通过 funplay MCP 创建独立 Electron Chromium 浏览器窗口,加载实际 Creator 页面 `http://127.0.0.1:7456/?profile=local`;关闭 Node integration、开启 context isolation/sandbox。未替换引擎或伪造编辑器内的浏览器 query。
|
||
- 输入通过 MCP 向真实预览窗口发送鼠标事件。首次坐标偏移误解未命中节点,证据确认零发送;纠正为 game 面板中心偏移后命中游客按钮。
|
||
- 原始收发仅保留于本地诊断内存。此报告不提交 openid、unionid、machineid、服务器认证/银行字段值或原始回包。
|
||
|
||
## 实际发现并修复的问题
|
||
|
||
1. Creator 的诊断工具默认选择 TypeScript 4.9.5,无法解析已有 TS 5 语法。使用仓库 TypeScript、真实 Cocos 声明及严格 ES2020 参数检查;不修改工程配置或原生桥。
|
||
2. 首次实际预览因既有 SDK 测试辅助模块的运行时 `node:assert` 导入中断。最小 TS 范围扩展:该辅助函数改为必需的调用方断言参数,更新唯一测试调用和 README;所有原断言语义保留,无浏览器 shim。独立审查通过,MCP 刷新脚本后实际场景成功运行。
|
||
3. 初次登录页不可见:新相机仅包含 UI_2D,原 Login Prefab 使用 DEFAULT。仅通过 MCP 修改授权新场景相机为 `UI_2D | DEFAULT`,重开和实际截图均通过;源 Prefab 不改。
|
||
4. 第二个独立预览暴露单次浏览器计时器提前唤醒,记录 499.8ms。通过 RED/GREEN 加入每次唤醒后的单调时间阈值复核,未满 500ms 继续等待;保留取消能力。整分支审查的对应 Important 问题已复审关闭。该失败窗口未登录;修复后另开全新窗口验证为 501.1ms。
|
||
|
||
## 首次真实登录证据
|
||
|
||
- `fp_f5d718fac951802d`:Loading 首次 draw 为 861.3ms;865.9ms 与 1090.7ms 的两张真实截图均显示加载环,角度由 -47.682° 变为 -86.688°。登录页激活为 1368.3ms,实际加载展示约 507ms。
|
||
- 本地唯一 open 目标为 `ws://127.0.0.1:3088`;资源、配置、连接和最短展示门完成后,PageModel 为 login/canLogin=true。
|
||
- `fp_72e7cc8b8f6782a8`:一次游客点击仅发送一个 `agent/player_login`;服务器返回 `state=0`。首次业务响应耗时约 1694ms。后续 26 字节入站为非业务帧,未产生额外出站 RPC。
|
||
- Store 为 logged-in/outside;服务器语义、Store、PageModel 的玩家 ID、昵称、豆豆一致;实际结果页显示登录成功。页面不直接用请求填充玩家结果。
|
||
- 诊断 GameEntry 仅完成一次校验创建/释放,没有游戏 attach、restore 或消息调用。
|
||
- `fp_e481ee99042a594f`:真实停止按钮触发后 ready=false、busy=false、pendingCount=0;观察 33.3419 秒,事件计数未变,无重连、继续渲染或浏览器异常。成功结果保留。
|
||
|
||
## 第二次独立预览与缓存复用
|
||
|
||
- `fp_9b9dc57c94603f6d`:关闭已停止的窗口,新建独立浏览器窗口 9,仍使用同一真实预览 origin 和 `profile=local`。修复后的 minimum-display-ready 为 501.1ms,login/canLogin=true,零浏览器异常。
|
||
- `fp_ed01311f246331d4`:向实际游客按钮发送鼠标事件,35ms 后观测 busy=true、登录遮罩可见、提示“正在登录,请稍候…”,仅一个业务请求;已取得实际截图。
|
||
- `fp_f75c9fb9806e6a5c`:服务器再次 state=0;openid、unionid、machineid 与首次请求均相同,返回相同玩家。Store logged-in/outside,Store、PageModel、回包和显示结果一致。比较在本地诊断内存完成,此处只记录布尔结论。
|
||
- `fp_e58e3f88615487fb`:真实停止按钮后 ready=false、busy=false、pendingCount=0;观察 47.0203 秒无新增事件、重连或浏览器异常。保留成功结果供查看。
|
||
|
||
截图位于工程 `temp/mcp-captures/`(本地证据,不提交):`local-login-loading-first.png`、`local-login-loading-rotated.png`、`local-login-visible-ready.png`、`local-login-success-first.png`、`local-login-busy-second.png`、`local-login-success-second.png`。
|
||
|
||
## 回归与审查
|
||
|
||
在 `cocoscreator_projects` 执行显式枚举全部 `framework-tests/**/*.test.ts` 的 `node --import tsx --test --test-concurrency=1`:最终 600/600,通过,exit 0,对应 `4414e1b`。计时修复前为 599/599,新增早醒回归后为 600。
|
||
|
||
指定 `architecture/import-boundaries.test.mjs` 和 `architecture/presentation-boundaries.test.mjs`:49/49,通过。框架类型、导入边界检查通过。未使用 npm test、test:framework 或旧资源生成器。
|
||
|
||
全量输出含既有 `ui/store-binder.test.ts` 故意触发的 StoreBinder/reactive `boom` 日志;测试未失败,不宣称全量日志无噪声。
|
||
|
||
各实现任务与修复均完成独立规格/质量审查。整分支审查完成至 `73d7826`,计时修复 `4414e1b` 复审通过;没有未关闭的 Critical/Important 代码问题。
|
||
|
||
## 最终范围复核
|
||
|
||
- `4414e1b` 后复核原有 50 项文件的 porcelain 状态和 SHA256,全部不变。两项历史删除 meta 和用户 scene-2d 均保留。
|
||
- 分支资源差异严格为九项授权新增文件。测试辅助模块兼容修复只修改三个既有文本文件,未增加资源授权范围。
|
||
- `git diff --check` 通过。仅主 checkout;没有 worktree,未自动 stash、合并或推送。
|
||
- 本结论仅为本批平台启动、加载、游客登录通过;不代表大厅其他 RPC、房间、真实子游戏、生产 profile 或原生 App 验收。
|