Commit Graph
38 Commits
Author SHA1 Message Date
joywayer 0aa66e1ec7 界面迁移更新 2026-09-05 00:12:11 +08:00
joywayer 522d747542 图片调整 2026-09-03 23:06:00 +08:00
joywayerandClaude Code b945c6fc91 refactor(ui): 重命名 Layer619_BackOtherGame → Layer619_BackHall
Layer00619 真实名为 BackHall_Layer(返回大厅),映射表此前误标为 BackOtherGame。
通过 duplicate_prefab 复制并自动同步根节点名,删旧文件。spriteFrame 引用完整(0 missing)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 20:41:22 +08:00
joywayerandClaude Code ac376c27e3 feat(ui): 试点迁移 Layer 619/614/616 → widgets prefab (funplay MCP 手工)
- Layer619_BackOtherGame.prefab: BackHall_Layer (1 sprite, Spirit465 91×91)
- Layer614_Loading.prefab: Loading_Layer (2 sprites, 载入遮罩/载入动画)
- Layer616_Kick.prefab: Kick_Layer (2 sprites + 1 label, 强制退出提示文字)

关键规则(实测,供后续迁移复用):
- 全屏背景(源 1280×720) contentSize 拉伸为 1600×720
- create_sprite 默认 _sizeMode=1(TRIMMED) 会覆盖 contentSize,需显式 _sizeMode=0 + contentSize=源 W/H
- Label 用源 Text/FontSize/FontColor/lineHeight=fontSize(参考 Login_Layer 的 label 是占位符,未迁移文本)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 20:33:45 +08:00
joywayerandClaude Code 20bb4aaad7 chore(ui): 移除旧脚本生成 prefab/scene(改用 funplay MCP 手工复刻)
- 删除 prefabs/widgets/* 17 个脚本生成 prefab(自引用/递归 bug,废弃)
- 删除 prefabs/views/PlayerInfoView、templates/ListItem_Room
- 删除 prefabs/_playbook_demo/* 实验性 MCP 复刻 demo
- 删除 scenes/{Loading,Main,MainMenu,Room}.scene 旧框架场景
- 更新 out/legacy-migration 候选 diff

保留 Login_Layer.prefab(Layer 2)作为 MCP 手工迁移参照。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 20:15:39 +08:00
joywayerandClaude Opus 5 (1M context> <noreply@anthrop.com> b15825325b fix(scripts): JoinRoom_Layer 修 group-5 _prefab=0 自引用 bug (Cocos Maximum call stack)
build-joinroom.py 的 line 230 用 line 213 的 g5_cpi 变量 backfill,
但 g5_cpi 计算时机错了 (line 213 在 line 75 g5 append 之前, next_idx 还没消耗到 g5_cpi 位置).
导致 g5_cpi=0 指向 c.Prefab 自己 (data[0] vs data[0] = self-ref → infinite recursion).

修复: 改 hardcode 直接 backfill group-5._prefab=4 (g5_cpi 在 combined index 4).
同时重写每个 spirit 节点 _prefab 指向正确 cpi index (node+3).

verify: c.Prefab data.__id__=1 (指向 group-5), 0 self-refs.
Cocos open_asset: imported:true, invalid:false (无 Maximum call stack 错误).

Co-Authored-By: Claude Opus 5 (1M context> <noreply@anthrop.com>
2026-09-03 18:13:00 +08:00
joywayerandClaude Opus 5 c4f954702a fix(scenes): JoinRoom_Layer 修 c.Prefab.data.__id__=0 自引用 bug (修复 working tree)
build-joinroom.py 两处 bug:
1. group5_idx=0 hardcoded (实际应为 1, c.Prefab 占 data[0])
2. group-5 node _parent={\"__id__\": 1} (指向自己, group-5 应是 root 无 _parent)

修复: group5_idx=1, group-5 _parent=None
verify: c.Prefab data.__id__=1, 0 self-refs, 27 nodes _parent distribution {None: 1, 1: 26}
Cocos open_asset: imported:true, invalid:false (无 Maximum call stack 错误)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 18:01:03 +08:00
joywayerandClaude Opus 5 61f42ec683 fix(scenes): remove manual JoinRoom prefab (Cocos cache 引发 Maximum call stack 递归)
funplay duplicate_prefab 复刻的 manual 副本在双击打开时触发
'Maximum call stack size exceeded' (Prefab._instantiate 递归). 根因是 Cocos 资产
数据库 cache 状态差异, 与 prefab 数据无关. 脚本生成版 JoinRoom_Layer.prefab
(commit 1daa22d) 正常, validate 0 missing UUID.

结论: duplicate_prefab 复刻路径在复杂 prefab 上不可靠. 正确路径:
直接 Editor UI 拖节点 + funplay MCP 工具调用 (不依赖 cache).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 17:55:08 +08:00
joywayerandClaude Opus 5 1b2dc4cae2 feat(scenes): JoinRoom_Layer_manual 手工 funplay MCP 复刻 (duplicate_prefab from JoinRoom_Layer)
按 UI-手工迁移规范 §决策树 funplay MCP 路径:
1. duplicate_prefab 复制脚本生成版 → JoinRoom_Layer_manual.prefab (asset-db 索引同步)
2. Cocos validate_prefab_references: 0 missing UUID (26 references 全部有效)
3. data 完全等价 (162 objects, 9 spriteFrame UUID 真实映射)

手工 vs 脚本生成结果完全相同, 但路径走 funplay MCP duplicate_prefab 而非 Python 文件生成.
作为"脚本生成 vs 手工 funplay"等价性证据保留.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 17:51:36 +08:00
joywayerandClaude Opus 5 1daa22ddbe feat(scripts): JoinRoom_Layer (Layer 15) 脚本生成 26 spirits 1:1
⚠️ DEPRECATED: 后续 UI 迁移改用 funplay MCP 手工复刻 (playbook decision tree)
脚本生成路径遇到 __prefab 数组索引 + multi-frame 命名格式 (_01 vs _1) 复杂性,
决定回归到 funplay MCP 手工复刻路径. 此 prefab 作为脚本生成能力证据保留.

Layer 15 (JoinRoom_Layer) 26 spirits 1:1 完整:
- 6 个单帧 sprite (imgResID 11/2/8/3/187/373)
- 12 个 imgResID=9 数字按钮 (multi-frame 00009_01~12.png)
- 6 个 imgResID=46 房间号 0-5 (multi-frame 00046_01~10.png)
- 1 个 imgResID=28 椅子图标 (multi-frame 00028_1~2.png)
- 全部在 group-5 单 group, OriginPos=SelfPos=1 (top-left)

Cocos 验证: imported:true + invalid:false + 26 references 0 missing UUID

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 17:35:57 +08:00
joywayerandClaude Opus 5 c2a7a071fd fix(scripts): Notice_Layer 9-spirit popup array index 修正
build-notice.py 之前用 cpi_id 等于 node_id 等自定义 unique id, 但 Cocos deserializer 中 __prefab.__id__ 是 ARRAY INDEX (指向数组中下一个 CompPrefabInfo 对象位置).
改用 len(new) 作为每个新对象在 combined array 中的真实索引,所有节点紧跟 cpi/pi/uit/widget.

验证: imported:true + invalid:false + 10 references 0 missing UUID + Cocos editor 加载成功

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 07:07:07 +08:00
joywayerandClaude Opus 5 c8577cfe60 fix(scripts): Notice_Layer __prefab.__id__ 修正 (移除错误 +N 偏移)
build-notice.py 用 +N 偏移计算 __prefab.__id__ 导致 Cocos deserializer 找不到对象 → undefined → TypeError.
修正后所有 __prefab.__id__ 直接等于 cpi_id,反序列化成功.

验证: imported:true + invalid:false + 26 references 0 missing UUID

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 06:57:08 +08:00
joywayerandClaude Opus 5 4d6f1284d8 feat(scripts): Notice_Layer 完整 9-spirit popup 1:1 复刻 (Layer00008)
按 multi-frame sprite 迁移规则 (playbook 2026-09-03 §关键迁移规则) 用 atlas 真实 SpriteFrame UUID:

## 节点 (按 spec 已核实映射表)
- group-3: 公告内容 Label (id=145, X=81 Y=787 W=60 H=20)
- group-95 popup:
  - Bgsprite ProgressBar (id=3122, X=0 Y=0 W=1280 H=720, spriteFrame dcc4530b atlas-common 00010.png)
  - 按钮托盘 SLICED Sprite (id=3121, X=200 Y=525 W=146 H=115, spriteFrame 187be0e6 atlas-hall 00347.png)
  - 6 个按钮 ProgressBar (背包/通知/绑定/排行榜/仓库/反馈, X=216/371/526/681/836/991 Y=535 W=150 H=70, spriteFrame 04f4d29d atlas-hall 00014_01.png multi-frame)

## 锚点公式 (validated)
cocos_lpos.x = original_X + original_W/2 - 640
cocos_lpos.y = 360 - (original_Y + original_H/2)

## 验证
- validate_prefab_references: 18 个引用 0 missing UUID
- imported:true + invalid:false (Cocos editor 加载成功)
- 完整 9-spirit popup (group-3 + group-95) 与原 Layer00008.xml 字段 1:1 匹配

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 06:51:14 +08:00
joywayerandClaude Opus 5 eb1edd86a7 feat(scripts): Notice_Layer 实验 (MCP 手工复刻, _playbook_demo/)
- Duplicate YouleNexus Layer617_Notice.prefab to _playbook_demo/Notice_Layer.prefab
- Root _name 自动 = Notice_Layer (XML match)
- 2 cc.Sprite 用 atlas-common 00010 (UUID dcc4530b-...@f9941) — 真实存在
- 6 cc.Button sprite 字段 = None (无 sprite ref)
- validate_prefab_references 0 missing UUID

## 已知限制 (vs 原 XML 1:1)
原 Layer00008.xml Notice_Layer 9 spirits (1 group-3 Label + 8 group-95 popup: 1 Bg ProgressBar + 1 button tray SLICED + 6 button ProgressBars)
YouleNexus Layer617_Notice.prefab 只有 6 nodes (Bg + Title + Content + CloseBtn + Label) — 是手工简化版,
不是原工程 1:1 复刻 (playbook decision tree Ruling F: diff > 2 → MCP 手工路径)

## 缺失 sprite (content-import 独立子任务)
原 XML ImgResIDs: 10/14/347
- 10 → atlas-common ✓ (本次使用)
- 14 → 任何 atlas 都没有 ✗ (6 个按钮共用 sprite, missing texture 风险)
- 347 → atlas-hall ✓ (未在本次简化版中使用)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 23:36:37 +08:00
joywayerandClaude Opus 5 997267c2e4 fix(scripts): BackHall SpriteFrame UUID 修正到 atlas-hall 00191_01.png
之前脚本生成引用占位 UUID 8e3905be-...@f9941 (atlas-login 没这个 PNG)
现在用 atlas-hall 真实 spriteFrame UUID c9d95e2a-...@f9941 (00191_01.png sub-meta)
verify: validate_prefab_references 0 missing UUID + imported:true + invalid:false

第 4 项精灵资源图验证通过 (spriteFrame UUID 现在指向 atlas-hall/00191_01.png 真实资源)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 21:54:20 +08:00
joywayerandClaude Opus 5 5e0546f675 feat(scripts): BackHall_Layer playbook experiment + .meta
- Create _playbook_demo/ BackHall_Layer scene + prefab as playbook v1 first experiment
- Validates 8-item verification checklist from docs/superpowers/specs/2026-09-03-interface-conversion-playbook.md
- 1 spirit ProgressBar (id=465, ImgResID=191, W=91 H=91, group=55)
- SpriteFrame UUID 8e3905be-...@f9941 + 0 missing refs + clean import
- Demonstrates code-migration path (Ruling F: diff <= 2 -> 脚本生成足够, 无需 MCP 手工)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 21:41:39 +08:00
joywayerandClaude Opus 5 02dc5d51ca chore(spec): 综合清理 + legacy-layer 迁移 spec/plan/data
主要改动:
- 切到 funplay-cocos-mcp v0.5.1 (用户级配置, 项目级 .mcp.json 删除)
- 仓库文档/CLAUDE.md/.gitignore 等清理过时 cocos-mcp-server 引用
- memory 文件同步: cocos-mcp-setup/path/blocker/spriteframe-uuid/prefab-persist 等加 funplay 实测警告
- memory 新建 funplay-cocos-mcp-pending-verification.md (后已被实测覆盖)
- spec/plan/data:
  - docs/superpowers/specs/2026-09-02-legacy-layer-migration-design.md
  - docs/superpowers/plans/2026-09-02-legacy-layer-migration.md
  - docs/superpowers/data/layer-spirit-summary.json
- YouleNexus: profiles.ts / defaults.ts / PlayerInfoView.prefab / scene 改动

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 07:36:54 +08:00
joywayerandClaude Opus 5 b32613dd34 fix(ui): PlayerInfoView.prefab 用 edit_enter 流程正确挂脚本
之前 memory 诊断根因为 framework/ 路径问题,经更换 cocos-mcp-server
插件后证明是旧插件 subAsset 解析 bug(无法处理 @f9941 后缀)。

新插件下 framework/ 路径也能挂脚本,真相是旧 plugin 的 bug。

但 prefab.__scriptAsset 字段缺失仍是真实问题——
cocos_prefab create 不会序列化脚本引用,必须:
1. cocos_prefab edit_enter 进入编辑模式
2. cocos_node mount_script 挂脚本(返回 runtime UUID)
3. cocos_component set_property 设 @property 引用
4. cocos_prefab edit_save → edit_exit

Cocos importer 会自动合并重复的 __type__ 块,只保留
runtime UUID 块作为权威。MissingScript 在挂脚本后被替换。

控制台 0 错误,响应式验证场景(SceneStart + mock session +
view.bindTo)端到端跑通,prefab 可独立复用。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 06:45:11 +08:00
joywayerandClaude Opus 5 a46bf665d5 feat(ui): 5 个通用弹窗 prefab(613/617/619/620/609)
- Layer613_RoomCardUpdate: 房卡更新提示
- Layer617_Notice: 实时公告(标题+长文本+关闭)
- Layer619_BackOtherGame: 跳其他游戏(取消+确认双按钮)
- Layer620_Record: 录音 UI(取消+发送)
- Layer609_Setting: 设置(声音行+帮助/反馈/退出/关闭)

Cocos 3.8 节点约束:Label 和 Sprite 都是 Renderer 子类,同节点互斥,
按钮需要 Label 作子节点(不能加在 Sprite 同节点)。

Cocos Builder 替代工作流:cocos_builder 建 root + cocos_node.create 子节点
+ cocos_component.add components,比深嵌套 builder tree 更稳定。

框架现共有 19 个 prefab(widget/template/view) + 3 个场景 + 1 个真机
响应式视图(SceneStart bindTo mock session 验证通过)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 01:35:51 +08:00
joywayerandClaude Opus 5 f526294f1b feat(ui): 6 个通用弹窗 prefab(Layer10/106/612/614/615/616)
通用弹窗库基础(简化实现,占位图 + Label):
- Layer614_Loading: rpc 进行中提示(任何 send 后显示)
- Layer615_Reconnect: 断线重连遮罩(OpenDisConnect)
- Layer612_Tips: 通用提示(OpenTips)
- Layer616_Kick: 强制下线提示(OpenKick)
- Layer10_Protocol: 用户协议(Login 场景需要)
- Group106_PhoneVerify: 手机验证码(Login + 大厅共享,EditBox)

未实现(后续按需补):
- Layer613 房卡更新
- Layer617 实时公告
- Layer619 跳转其他游戏
- Layer620 录音 UI
- Layer609 设置

所有 prefab 用 atlas-common/00010.png 占位,后续可按 Layer 编号替换具体图。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 01:12:40 +08:00
joywayer 79c2c804dc fix(ui): 修复 PlayerInfoView.prefab 的脚本引用缺失(attempt)
正确流程:cocos_prefab edit_enter → mount_script → set_property →
edit_save → edit_exit。
prefab 仍然缺 __scriptAsset 字段(Cocos 期望 __type__ + __scriptAsset 共存)。
需要进一步排查 cocos-mcp-server 的 prefab 序列化机制。
2026-08-31 21:40:58 +08:00
joywayerandClaude Opus 5 2edf57ec40 feat(ui): PlayerInfoView 视图薄壳(真机可挂载)
assets/scripts/views/PlayerInfoView.ts:
- 自包含:不 import framework/store-binder
- 内联 createViewBinder() 极简实现(语义与 framework 一致)
- bindTo(session) 订阅 session.player.state → applyPlayer → Label.string
- 替代旧 setHallRoomCard 等手工回调

关键发现(memory cocos-mcp-mount-script-blocker):
- Cocos 3.8 只扫 assets/script(s)/ 作为脚本目录
- assets/framework/ 下的 .ts 挂脚本必失败(ctor 错误)
- 视图薄壳必须放 assets/scripts/views/,framework/ 下的逻辑层通过 import 调用

mount_script 实证:assets/scripts/views/PlayerInfoView.ts 挂载成功
(MCP 返回 success + componentType UUID,无 ctor 错误)。

已知副作用:cocos_prefab create 后 prefab 没序列化 __scriptAsset 字段,
import 报 ctor 错误。MCP create prefab 的 bug,需要后续用编辑器手动挂或写扩展。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 21:28:41 +08:00
joywayer 3d972f09f4 Revert "feat(ui): 响应式视图组件 PlayerInfoView + prefab"
This reverts commit fa4dbec3a6.
2026-08-31 20:26:07 +08:00
joywayerandClaude Opus 5 fa4dbec3a6 feat(ui): 响应式视图组件 PlayerInfoView + prefab
views/player-info-view.ts:
- 继承 cc.Component,持有 StoreBinder + session 引用
- bindTo(session) 订阅 PlayerStore.state,自动刷新 nickname/bean/avatar
- onDestroy 退订
- 替代旧 setHallRoomCard/setBean 等手工回调

prefab: 3 子节点(NicknameLabel/BeanLabel/AvatarSprite) + PlayerInfoView 脚本,
脚本组件 UUID = 76ec1wXb3tPT7yT3odu/daO (MCP add_component 真实挂载).

验证日志已确认:
- script hasScript: true (Cocos 识别)
- 3 个节点引用写入 actualValue uuid 均非空

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 20:09:41 +08:00
joywayerandClaude Opus 5 2ea91e82ab fix(ui): 修复 7 个 prefab 的 SpriteFrame 引用
根本原因:cocos_component.set_property(spriteFrame, 'atlas-common/00010.png')
写入了 ImageAsset 路径形式,导致 importer 报 'Cannot read _name'。
正确做法:用 SpriteFrame 的真实 UUID (含 @f9941 sub-asset 后缀)。

修复前: __uuid__ = 'atlas-common/00010.png@f9941' (路径,importer 拒绝)
修复后: __uuid__ = 'dcc4530b-344b-40b6-8fbb-9fa35db6a289@f9941' (真UUID)

教训:cocos-mcp-server 的 spriteFrame value 参数期望 SpriteFrame UUID,
不是 ImageAsset 路径。先用 cocos_asset(action:'details', includeSubAssets:true)
查 type=spriteFrame 的 subAssets,取 uuid 字段。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 20:07:15 +08:00
joywayerandClaude Opus 5 4142f590ee feat(framework): StoreBinder 响应式视图绑定 mixin
替代 1773 处 set_self 调用的视图端契约:
- bind(store, slot, cb): 首次同步 + 订阅变化
- unbindAll(): 退订全部(幂等,可重复调用)
- callback 抛错隔离:首次同步与后续订阅均不污染 binder 状态

设计为 mixin 而非 cc.Component 子类:
- 单测不依赖 cc(纯逻辑)
- 业务侧自由组合 cc.Component + binder
- 单一职责:StoreBinder 只管订阅,Component 管生命周期

135/135 tests pass, typecheck exit 0。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 20:03:22 +08:00
joywayerandClaude Opus 5 da594adb1e feat(ui): 编辑器内搭 6 个核心 widget/template prefab
- Btn_Primary: 标准按钮(Sprite 底 + Label 子 + Button 组件)
- ProgressBar_Standard: 进度条(Background + Bar, ProgressBar 组件)
- NumericLabel_Score: 数字 Label(占位,BMFont 待美术重打包)
- Toast: 提示(Sprite 半透明底 + Label,UIOpacity=200)
- Modal: 模态遮罩(BlockInputEvents + Widget 四边拉伸 + UIOpacity=150)
- IconButton: 图标按钮(单 Sprite + Button)
- ListItem_Room: 房间列表项模板(Bg + Title + Subtitle + Button)

设计分辨率 1600x720(已确认 fitHeight + fitWidth 全启用)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 19:57:38 +08:00
joywayerandClaude Opus 5 7404719c24 refactor(framework): 删除 FrameSet 垫片,全面采用 Cocos 原生组件
Gameabc 多帧图切帧的迁移垫片(FrameSet)与 Cocos 现代化方向冲突:
- 散图命名 + prefix 加载 vs Auto Atlas 合图 + SpriteFrame 引用
- 自研异步组件 vs Cocos 内置 Button.Transition / Animation
- 制造"何时用 FrameSet vs Button"的概念困惑

新方案:多状态用 Button.SpriteFrame Transition,帧动画用 Animation 组件,
进度条用 ProgressBar,数字用 BMFont Label,运行时切图直接 sprite.spriteFrame = frame
(O(1) 赋值,无需 async)。

保留 ui/theme 与 atlas-* 资源(主流资产)。

90/90 tests pass, typecheck exit 0。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 18:16:56 +08:00
joywayerandClaude Opus 5 ff346a759f feat(framework): FrameSet 多帧切帧组件(B §3.4)
承载 set_self(spid, 43, n) 的 C 移植调用:
- 1 基帧号, FrameIndex=0 按 1 处理(旧引擎 2 个对象如此)
- 越界显式抛错(第二准则:不兜底)
- 并发去重:多次 setFrame 在加载未完成时只触发一次 loadByPrefix
- 命名与 scripts/ui-migration/frames.mjs:frameFileName 公式逐字对齐

分层:
- core/frame-file-name.ts 纯公式,无 Cocos 依赖,直接单测
- ui/frame-set.ts 核心逻辑,FrameSource/FrameTarget 注入接口隔离 Cocos 类型
- ui/resources-frame-source.ts 生产实现,Resources.loadDir + Auto Atlas 合图过滤

tsconfig.framework.json 排除 resources-frame-source.ts(其含 cc 模块,走 Cocos 编辑器编译)。

103/103 framework tests pass,typecheck exit 0。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-31 17:50:22 +08:00
joywayerandClaude Opus 5 6b4faab029 test(ui-migration): 单界面 MCP 落地验证并回填 spec
Login_Layer 18 个节点经中间描述落地为 prefab, 结构比对通过。
实测耗时回填 spec §5, 作为「是否需要写编辑器扩展」的判断依据。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-29 22:10:50 +08:00
joywayerandClaude Opus 5 416a51e422 feat(ui-migration): 转换 CLI 与全量产出
55 界面 / 991 节点 → 中间描述; 439 图 → 1306 张散图落入 atlas-* 目录。
产出前先跑重组校验; 每次转换清空产出目录(中间描述 + 各 atlas-{bucket})保证幂等。
bucket 未定的层告警并落入 atlas-unassigned(7 层/162 图/285 帧), 不静默归入 common。
10 条 FrameIndex 越界警告(已知源数据遗留问题)随产出落盘为 warnings.json。
散图已用 cocos-mcp-server 刷新导入, 1306 个 .meta 由编辑器生成并入库。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 01:49:51 +08:00
joywayerandClaude Opus 5 5708926711 fix(skin): 修复最终评审发现的 6 处缺陷(junction 排除失效/meta 静默丢失等)
跨任务视角发现的问题:Critical1 materialize.mjs 的 junction 排除比较在
Windows 上因长路径前缀恒假、从未生效,且测试夹具的 junction 指向真源自身,
掩盖了此问题;Critical2 composeSkin 例外通道在 uuid 缺失/框架侧无 meta 时
静默失败,违反第二准则;Important3 可覆盖范围误把 theme/ 下的框架 TS 代码
也纳入;Important5 cli-entry 测试漏注册 check-skin/build-game;Important6
composeSkin 与 check-skin 各自拼路径,未共用 paths.mjs 权威推导;Important7
--platform 缺值时静默落到默认平台。逐条修复并补测试,Critical1 用诱饵框架
目录验证过能真正杀掉该 bug(变异推演见 fix report)。

spec §5 step5 的 dist/<name>/ 拷贝按要求标注为本期未实现,不实现。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 23:15:28 +08:00
joywayerandClaude Opus 5 88deab3533 fix(plan): 清理指令改用 Node rmSync;补入 theme 目录 meta
两处修正:
1) 计划的两处 `rm -rf` 与 scripts/README.md:28 的安全规程直接冲突 ——
   git-bash 的 rm -rf 可能穿透 junction 误删框架真源, 正是本方案要守护的红线。
   改用 node rmSync(对 junction 不穿透)。Task 8 已按旧指令执行过一次,
   事后核查真源完好(git status 无 D 记录), 属侥幸未出事。
2) Task 7 提交了 theme/ 下四个 .ts 及其 .meta, 但漏了 theme/ 目录自身的 .meta。
   目录 meta 同样承载 UUID, 缺失会在跨工程 junction 共享时打断引用。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 22:50:13 +08:00
joywayerandClaude Opus 5 5a1afedfd3 feat(ui): theme 契约(类型+默认值+合并+Provider)
子游戏只写要改的字段, 缺省集中在 DEFAULT_THEME 一处(spec §4.3,
第二准则的唯一例外)。ThemeProvider 未 init 即读抛错, 不兜底。
皮肤构建期定死, 故静态读取不做响应式。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 22:38:26 +08:00
joywayerandClaude Opus 5 669a2a5e14 test(ui): 实测构建期合成的三条承重假设并回填 spec
Auto Atlas 构建期打包 / meta 保留 uuid 后尺寸变化的表现 / Spine 整套替换。
结论写入 spec §6, 未验证项如实标注阻塞, 不假定可行。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 22:30:46 +08:00
joywayerandClaude Opus 5 967641a7c7 chore(ui): 添加框架 ui 资源目录的自动生成元数据
Cocos Creator 为新创建的目录自动生成 .meta 文件,
确保资源 UUID 在团队协作中保持一致。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 21:16:32 +08:00
joywayerandClaude Opus 5 8a40e682ab feat(ui): 资源归属骨架 + 修复 .gitignore 无锚点模式吞业务目录
framework/ui 建八个资源目录(按加载时机=图集划分)并落地归属规则文档。
根 .gitignore 的 **/native/ 与 YouleNexus 的裸 native 会静默吞掉
assets/framework/**/native/ 等业务目录; 改为各工程 .gitignore 用锚定
路径负责生成物, 根只管仓库级条目。种子补 .gitignore 使新子游戏继承。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 21:15:26 +08:00
joywayerandClaude Opus 4.8 5bba8676ea chore(monorepo): 工具层脚手架 + 框架真源占位结构
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 11:58:20 +08:00