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>
This commit is contained in:
2026-09-02 07:36:54 +08:00
co-authored by Claude Opus 5
parent fea85c6644
commit 02dc5d51ca
100 changed files with 3480 additions and 6961 deletions
@@ -0,0 +1,122 @@
{
"_comment": "由 projects/Game_Surface_3/save/Layer*.xml (GB18030 编码) 全量解析生成。供 legacy-layer-migration 脚本逆向 gameabc.min.js 与交叉映射 YouleNexus prefab 使用。生成时间 2026-09-02。",
"summary": {
"total_layers": 68,
"total_distinct_groups": 81,
"spirit_types_found": ["0", "1", "3", "4", "5"],
"spirit_type_distribution": {
"0": {"layers_count": 44, "likely": "Sprite"},
"1": {"layers_count": 38, "likely": "Text/Label"},
"3": {"layers_count": 45, "likely": "ProgressBar"},
"4": {"layers_count": 15, "likely": "unknown - need reverse gameabc.min.js (Particle?)"},
"5": {"layers_count": 39, "likely": "unknown - need reverse gameabc.min.js (Button/Group?)"}
}
},
"all_layers": [
{"file": "Layer00001.xml", "id": "1", "name": "Logo_Layer", "spirits": 5, "types": ["0","1","3"], "groups": ["1","32"]},
{"file": "Layer00002.xml", "id": "2", "name": "Login_Layer", "spirits": 18, "types": ["0","1","3","5"], "groups": ["2"]},
{"file": "Layer00004.xml", "id": "4", "name": "MainMenu_Layer", "spirits": 32, "types": ["0","1","3","5"], "groups": ["3"]},
{"file": "Layer00006.xml", "id": "6", "name": "Layer6", "spirits": 53, "types": ["0","1","3","4","5"], "groups": ["103","3"]},
{"file": "Layer00007.xml", "id": "7", "name": "ewm_Layer", "spirits": 30, "types": ["1","3","4","5"], "groups": ["0","104","105"]},
{"file": "Layer00008.xml", "id": "8", "name": "Notice_Layer", "spirits": 9, "types": ["1","3","5"], "groups": ["3","95"]},
{"file": "Layer00009.xml", "id": "9", "name": "Feedback_Layer", "spirits": 34, "types": ["0","1","3","4","5"], "groups": ["12","42","74","98"]},
{"file": "Layer00010.xml", "id": "10", "name": "Protol_Layer", "spirits": 4, "types": ["0","5"], "groups": ["37"]},
{"file": "Layer00011.xml", "id": "11", "name": "ChargeInfo_Layer", "spirits": 4, "types": ["0","1"], "groups": ["20"]},
{"file": "Layer00012.xml", "id": "12", "name": "CombatLayer", "spirits": 27, "types": ["0","1","3","4","5"], "groups": ["7","8","9"]},
{"file": "Layer00013.xml", "id": "13", "name": "Layer13", "spirits": 6, "types": ["0","3"], "groups": ["7","8"]},
{"file": "Layer00014.xml", "id": "14", "name": "Pay_Layer", "spirits": 43, "types": ["0","1","3","4","5"], "groups": ["53","54"]},
{"file": "Layer00015.xml", "id": "15", "name": "JoinRoom_Layer", "spirits": 26, "types": ["0","3","4","5"], "groups": ["5"]},
{"file": "Layer00016.xml", "id": "16", "name": "Bind_Layer", "spirits": 7, "types": ["0","1","3","5"], "groups": ["80"]},
{"file": "Layer00017.xml", "id": "17", "name": "MenuPlayerInfo_Layer", "spirits": 15, "types": ["0","1","3","5"], "groups": ["18"]},
{"file": "Layer00018.xml", "id": "18", "name": "Auth_layer", "spirits": 9, "types": ["0","1","3","5"], "groups": ["57"]},
{"file": "Layer00019.xml", "id": "19", "name": "WorldRoomList_Layer", "spirits": 34, "types": ["0","1","3","4","5"], "groups": ["82","96","97"]},
{"file": "Layer00021.xml", "id": "21", "name": "rankList_Layer", "spirits": 20, "types": ["0","1","3","5"], "groups": ["84"]},
{"file": "Layer00022.xml", "id": "22", "name": "Share_Layer", "spirits": 6, "types": ["0","3","5"], "groups": ["11"]},
{"file": "Layer00024.xml", "id": "24", "name": "NeighborLayer", "spirits": 7, "types": ["0","3","5"], "groups": ["88"]},
{"file": "Layer00025.xml", "id": "25", "name": "wareHouseLayer", "spirits": 68, "types": ["0","1","3","4","5"], "groups": ["91","92","93","94"]},
{"file": "Layer00026.xml", "id": "26", "name": "Task_Layer", "spirits": 46, "types": ["0","1","3","5"], "groups": ["10"]},
{"file": "Layer00027.xml", "id": "27", "name": "CreateRoom_Layer", "spirits": 19, "types": ["0","1","3","5"], "groups": ["4"]},
{"file": "Layer00028.xml", "id": "28", "name": "SeniorOptions_Layer", "spirits": 56, "types": ["0","1","3","4","5"], "groups": ["83"]},
{"file": "Layer00029.xml", "id": "29", "name": "phoneInfo", "spirits": 38, "types": ["0","1","3","4","5"], "groups": ["106","108"]},
{"file": "Layer00050.xml", "id": "50", "name": "MainScene_Layer", "spirits": 11, "types": ["0","1","3","4","5"], "groups": ["21"]},
{"file": "Layer00202.xml", "id": "202", "name": "Player_Head_Score_Layer", "spirits": 60, "types": ["0","1","3","5"], "groups": ["43","44","45","46","47"]},
{"file": "Layer00402.xml", "id": "402", "name": "GameNoticeLayer", "spirits": 2, "types": ["1","5"], "groups": ["56"]},
{"file": "Layer00403.xml", "id": "403", "name": "Layer403", "spirits": 1, "types": ["3"], "groups": ["81"]},
{"file": "Layer00404.xml", "id": "404", "name": "MainSceneButton_Layer", "spirits": 6, "types": ["0","1","3"], "groups": ["28"]},
{"file": "Layer00405.xml", "id": "405", "name": "MainButton_Layer", "spirits": 6, "types": ["1","3","5"], "groups": ["21"]},
{"file": "Layer00408.xml", "id": "408", "name": "Interact_Layer", "spirits": 21, "types": ["0","3"], "groups": ["21","39"]},
{"file": "Layer00409.xml", "id": "409", "name": "Chat_Voice_Layer", "spirits": 20, "types": ["3","5"], "groups": ["76"]},
{"file": "Layer00410.xml", "id": "410", "name": "Chat_Text_Layer", "spirits": 20, "types": ["1","5"], "groups": ["75"]},
{"file": "Layer00411.xml", "id": "411", "name": "Layer411", "spirits": 6, "types": ["3","4"], "groups": ["81"]},
{"file": "Layer00413.xml", "id": "413", "name": "btnPannelLayer", "spirits": 18, "types": ["1","3","5"], "groups": ["100","21","81","99"]},
{"file": "Layer00416.xml", "id": "416", "name": "MainScene_PlayerInfo_Layer", "spirits": 16, "types": ["0","1","5"], "groups": ["38","77"]},
{"file": "Layer00418.xml", "id": "418", "name": "ChatPannel_Layer", "spirits": 54, "types": ["0","1","3","5"], "groups": ["30"]},
{"file": "Layer00420.xml", "id": "420", "name": "CheckFree_Layer", "spirits": 7, "types": ["0","1","3","5"], "groups": ["36"]},
{"file": "Layer00601.xml", "id": "601", "name": "Layer601", "spirits": 5, "types": ["1","3","5"], "groups": ["102"]},
{"file": "Layer00602.xml", "id": "602", "name": "inputPannel", "spirits": 19, "types": ["0","1","3","4","5"], "groups": ["87"]},
{"file": "Layer00603.xml", "id": "603", "name": "Layer603", "spirits": 3, "types": ["0","3"], "groups": ["107"]},
{"file": "Layer00606.xml", "id": "606", "name": "Apply_Layer", "spirits": 31, "types": ["0","1","3","4","5"], "groups": ["29","32"]},
{"file": "Layer00607.xml", "id": "607", "name": "Cal_Layer", "spirits": 20, "types": ["0","3","4","5"], "groups": ["78","79"]},
{"file": "Layer00608.xml", "id": "608", "name": "Help_Layer", "spirits": 7, "types": ["0","1","3","5"], "groups": ["19"]},
{"file": "Layer00609.xml", "id": "609", "name": "Setting_Layer", "spirits": 15, "types": ["0","3","5"], "groups": ["6"]},
{"file": "Layer00612.xml", "id": "612", "name": "Tips_Layer", "spirits": 5, "types": ["0","1","5"], "groups": ["32","89"]},
{"file": "Layer00613.xml", "id": "613", "name": "updateRoomCard_Layer", "spirits": 3, "types": ["0","1"], "groups": ["34"]},
{"file": "Layer00614.xml", "id": "614", "name": "Loading_Layer", "spirits": 2, "types": ["0","3"], "groups": ["40"]},
{"file": "Layer00615.xml", "id": "615", "name": "Reconnect_Layer", "spirits": 4, "types": ["0","3"], "groups": ["35"]},
{"file": "Layer00616.xml", "id": "616", "name": "Kick_Layer", "spirits": 3, "types": ["0","1"], "groups": ["33"]},
{"file": "Layer00617.xml", "id": "617", "name": "iMessage_Layer", "spirits": 4, "types": ["0","1"], "groups": ["41"]},
{"file": "Layer00618.xml", "id": "618", "name": "Layer618", "spirits": 2, "types": ["0"], "groups": ["85","86"]},
{"file": "Layer00619.xml", "id": "619", "name": "BackHall_Layer", "spirits": 1, "types": ["3"], "groups": ["55"]},
{"file": "Layer00620.xml", "id": "620", "name": "recordLayer", "spirits": 3, "types": ["0","3"], "groups": ["101"]}
],
"youle_nexus_prefab_mapping": {
"Login_Layer.prefab": {"target_layer": "Layer00002.xml", "name": "Login_Layer", "groups": ["2"]},
"views/PlayerInfoView.prefab": {
"resolved": "Layer00017.xml",
"name": "MenuPlayerInfo_Layer",
"groups": ["18"],
"spirits": 15,
"decision_note": "用户拍板 A (2026-09-02)"
},
"templates/ListItem_Room.prefab": {"status": "NO_MATCH", "hypothesis": "ListItem_Room 可能是跨 Layer 复用的 widget 子模板(不在任何 Layer 顶层),或者是 YouleNexus 新加组件"},
"widgets/Btn_Primary.prefab": {"status": "NO_MATCH", "hypothesis": "通用按钮 widget,可能是 YouleNexus 新加的 UI 基础组件,原项目 Layer 中以 Spirit 形式内嵌而非独立 Layer"},
"widgets/Group106_PhoneVerify.prefab": {"target_layer": "Layer00029.xml", "name": "phoneInfo", "groups": ["106","108"]},
"widgets/IconButton.prefab": {"status": "NO_MATCH", "hypothesis": "通用图标按钮 widget,可能 YouleNexus 新加"},
"widgets/Layer10_Protocol.prefab": {"target_layer": "Layer00010.xml", "name": "Protol_Layer", "groups": ["37"], "spirits": 4, "types": ["0","5"]},
"widgets/Layer609_Setting.prefab": {"target_layer": "Layer00609.xml", "name": "Setting_Layer", "groups": ["6"], "spirits": 15, "types": ["0","3","5"]},
"widgets/Layer612_Tips.prefab": {"target_layer": "Layer00612.xml", "name": "Tips_Layer", "groups": ["32","89"], "spirits": 5, "types": ["0","1","5"]},
"widgets/Layer613_RoomCardUpdate.prefab": {"target_layer": "Layer00613.xml", "name": "updateRoomCard_Layer", "groups": ["34"], "spirits": 3, "types": ["0","1"]},
"widgets/Layer614_Loading.prefab": {"target_layer": "Layer00614.xml", "name": "Loading_Layer", "groups": ["40"], "spirits": 2, "types": ["0","3"]},
"widgets/Layer615_Reconnect.prefab": {"target_layer": "Layer00615.xml", "name": "Reconnect_Layer", "groups": ["35"], "spirits": 4, "types": ["0","3"]},
"widgets/Layer616_Kick.prefab": {"target_layer": "Layer00616.xml", "name": "Kick_Layer", "groups": ["33"], "spirits": 3, "types": ["0","1"]},
"widgets/Layer617_Notice.prefab": {
"resolved": "Layer00008.xml",
"name": "Notice_Layer",
"groups": ["3","95"],
"spirits": 9,
"decision_note": "用户拍板 B (2026-09-02)"
},
"widgets/Layer619_BackOtherGame.prefab": {"target_layer": "Layer00619.xml", "name": "BackHall_Layer", "groups": ["55"], "spirits": 1, "note": "Layer name 是 BackHall 不是 BackOtherGame,但 group 唯一匹配,spirit 数 1 表示是个简单 widget"},
"widgets/Layer620_Record.prefab": {"target_layer": "Layer00620.xml", "name": "recordLayer", "groups": ["101"], "spirits": 3, "types": ["0","3"]},
"widgets/Modal.prefab": {"status": "NO_MATCH", "hypothesis": "通用弹窗 widget,可能 YouleNexus 新加的 UI 基础组件"},
"widgets/NumericLabel_Score.prefab": {"status": "NO_MATCH", "hypothesis": "数字滚动 Label widget,可能 YouleNexus 新加(用 Cocos 自定义 component 替代原 gameabc 数字渲染)"},
"widgets/ProgressBar_Standard.prefab": {"status": "NO_MATCH", "hypothesis": "通用进度条 widget,可能 YouleNexus 新加或与某个 Sprite type=3 的 Spirit 对应"}
},
"open_questions": [
"SpiritType=4 与 SpiritType=5 的语义(gameabc.min.js 逆向)",
"Layer00007 ewm_Layer 的 group=0 表示有节点不在 group-X 父节点下(直接挂在 Layer 根)"
],
"out_of_scope_per_user": [
"ListItem_Room.prefab",
"Btn_Primary.prefab",
"IconButton.prefab",
"Modal.prefab",
"NumericLabel_Score.prefab",
"ProgressBar_Standard.prefab"
],
"decision_log": [
{"date": "2026-09-02", "topic": "PlayerInfoView", "decision": "Layer00017 MenuPlayerInfo_Layer", "by": "user"},
{"date": "2026-09-02", "topic": "Layer617_Notice", "decision": "Layer00008 Notice_Layer", "by": "user"},
{"date": "2026-09-02", "topic": "6 个 NO_MATCH widget", "decision": "先不做(YouleNexus 新加)", "by": "user"}
]
}