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

8.0 KiB
Raw Blame History

本地启动、加载、登录真实验收

日期: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 验收。