Files
youle_cocos/docs/superpowers/reports/2026-09-05-local-platform-login-acceptance.md
T

73 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 本地启动、加载、登录真实验收
日期: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 验收。