Files
ft/CodexOutput/upserver/后续实现方案.md

106 lines
12 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.
# 后续实现方案
## 当前有效状态:D4/D5已裁决,继续检查点2(2026-09-23)
独立报告D4有条件通过、D5通过,23项hash一致,主会话已[逐条裁决](阶段4B2检查点2配置与派生审查裁决-2026-09-23.md)并合入[正式版3](阶段4B2字段与模块加载合同-正式版3-2026-09-23.md)。D1–D5设计门闭合,按批准边界继续M03/M18/M31及全模块事务,然后检查点3/4;不重做已过模块。此前28/31模块局部验证、55组离线和23组4B1回归保持,尚非全阶段验收。
4B2未关闭,4B3未启动、G4未通过。P2-α正式启用门、固定地址http://s101.local:18080/、Unity CLI Loop、不用UnitySkills、暂不打包保持。见[实施记录](阶段4B2实施记录-2026-09-23.md)。
### 以下为历史快照(当前以本节为准)
## 最新状态:4B2检查点2首批验证完成,先补审D3空态(2026-09-23)
D1/D2已实现局部纯入口并通过真实对象验证,见[首批记录](阶段4B2检查点2首批实现与证据-2026-09-23.md)。接续工作为[D3值类型空态审查](阶段4B2检查点2值类型空态差异补审方案-2026-09-23.md)→主会话裁决→剩余检查点2→3/4。M21/M22/M24不能直接置null,尚未擅改类型或PF方法;原批准成果保留,正式启用及P2-α门不变。
### 历史快照:D1/D2通过后继续检查点2
外部D1/D2通过、14项hash一致,主会话[裁决及实施边界](阶段4B2检查点2字段差异审查裁决-2026-09-23.md)已明确;后续首读合并修订的[正式字段/模块合同](阶段4B2字段与模块加载合同-正式版-2026-09-23.md)。按2→3→4顺序完成,检查点1成果保留。P2-α真实档迁移盘点加入历史AD坏槽条目,正式启用前审查与用户产品确认门不变。
### 历史快照:检查点2两项差异当时待补审
开工123项hash一致,修订2审查意见已[逐项裁决并批准](阶段4B2修订2审查裁决与实施批准-2026-09-23.md)。Lease/Registry先行完成,19+23组通过;下一步按[差异补审方案](阶段4B2检查点2字段差异补审方案-2026-09-23.md)解决AD格式/FootPrint位宽,再继续既定2–4顺序。真实存量档兼容与迁移、独立评审及用户产品确认是正式启用硬前置。当前没有4B3、玩法启用或打包授权。
### 历史快照:修订2当时待独立评审
初稿审查退回意见已逐条裁决并写入[修订2方案](阶段4B2游戏加载与内存隔离方案-修订2-待评审-2026-09-23.md)及[字段/模块合同](阶段4B2字段与模块加载合同-2026-09-23.md)。下一步按[新提示词](其他AI审查提示词-4B2修订2方案-2026-09-23.md)完整独立评审;会话借用扩展、白名单扩围及受控输出调整均未批准编码。
## 历史状态:4B1正式关闭,下一步4B2完整方案评审(2026-09-23)
主会话已核对受审hash并完成三条P3逐条裁决,见[4B1关闭裁决](阶段4B1实施复核裁决与关闭-2026-09-23.md)。下一步编制4B2完整方案,纳入字段发布顺序维护要求及CleanupFailed/OriginalError错误归因契约;独立评审并明确裁决后才能编码。4B2/4B3尚未启动,游戏接线和G4启用门保持。
### 历史交付快照:4B1待独立实施复核(现已关闭)
《阶段4B1方案裁决与实施批准-2026-09-23.md》已批准限定实施,当前证据见《阶段4B1交付与验收矩阵-2026-09-23.md》。下一步外部独立实施复核并由主会话逐条裁决;4B2/4B3仍须后续完整方案,不直接接游戏。
### 历史快照:4B1方案待审(现已批准实施)
4A关闭依据见《阶段4A实施复核裁决与关闭-2026-09-23.md》。下一步独立审查《阶段4B分期与4B1登录存档准备方案-待评审-2026-09-23.md》;4B未编码,不能直接启用游戏存档。原分期的4C/身份/场景及G4门继续有效。
### 历史交付快照:4A待复核(已由上述裁决覆盖)
3C/G3已关闭;4A原设计及构建依赖补审均通过,主会话已完成安全读取接口、固定句柄与串行会话桥接。18组合成测试、42/86/29回归、3B独立Review、3C离线8/8、KVLiveTests仅构建及Unity编译均通过。见[4A交付与逐项矩阵](阶段4A交付与验收矩阵-2026-09-23.md)。**4A待用户指定外部AI实施复核,4B未启动。** 使用[外部复核提示词](其他AI审查提示词-4A实施-2026-09-23.md)。本轮没有访问正式服,没有打包。
## 当前更新:3C方案审查通过,已批准实施(2026-09-23)
3C采用独立`KVStage3CTests`宿主、manifest先行、受限转发Handler、离线跨进程组合、101/102正常路径联调和测试宿主脱敏诊断。独立审查PASS,F1–F6已全部纳入[审查裁决](阶段3C方案审查裁决-2026-09-23.md);当前由本会话按任务书实施。
## 当前更新:阶段3B正式验收通过,下一步3C方案与评审(2026-09-22)
外部开发AI已完成3B检查点8正式交付,主会话文档终审通过。3C开始前仍须由本会话补齐限定正式服联调、诊断导出、测试key与清理、失败退出条件的完整方案和评审裁决;评审后由用户另开的外部开发AI实施。本会话不直接修改业务代码。
## 历史进度:阶段3A已验收、当时下一步3B(2026-09-22)
用户已明确继续并确认阶段3方案与两项恢复策略。**3A缓存状态与磁盘层已实现并通过验收**:主测试86项、独立13组/127断言通过,C盘Unity编译0错误/274已有警告,新增模块0警告。独立审查路径P2已修复闭环,无剩余确认阻塞。先读[3A验收报告](阶段3A缓存状态与磁盘验收-2026-09-22.md)和[独立代码审查](阶段3A独立代码审查-2026-09-22.md)。
整个阶段3尚未完成。下一步按已批准方案实现**3B固定会话owner与串行网络同步器**,再验收3C;无需重复索取同一方案或101/102授权。本批3A无正式服访问,不改游戏存档入口或SDK,未打包。正式API仍为 **http://s101.local:18080/**。HTTP/票据/异步Close/真实Cookie测试留3B,游戏存档切换留阶段4。
下方“待用户确认”“方案尚未编码”等为先前时点;本条和开发日志末尾为当前状态。阶段2证据继续有效,最小登录平台/人工/最终包待验收保留。
## 最新状态:3C补修复技术验证完成,等待外部实施复核(2026-09-23)
R1–R5代码修复及本轮技术验证已完成:离线8/8、s101正常路径与双账号双新会话清理通过、42/86/29回归全过、Unity 0错误/0警告,生产源码未变。见[补修复交付与逐项证据](阶段3C补修复交付与逐项证据-2026-09-23.md)。**外部AI实施复核尚待完成,3C/G3未恢复最终通过,4A未启动。** 下一步交[外部AI复核提示词](其他AI审查提示词-3C补修复实施-2026-09-23.md)给用户指定独立AI。
## 用户最新范围裁决:先完成最小登录
当前只推进最小登录、Cookie、失败/退出换号、SignalR必要生命周期和首页自动GetSelfClub最小兼容。俱乐部完整业务与KV实现移至后续,不能继续作为本阶段自动扩展项。已有外围代码保留为待单独归档/评审改动,尚未从工作区剥离,不整批回退。
执行范围以[当前阶段范围裁决-仅最小登录](当前阶段范围裁决-仅最小登录.md)为准;下方历史进度保留,但不代表当前继续开发授权范围。
2026-09-21。供其他agent审查和接手;不取代代码修改前的完整评审。身份单一化可行,但保留服务端InternalId含义,禁止机械全局替换。历史详细方案和阶段1验收仍作为契约依据,若冲突先记录并评审。
## A:新服务器接口身份修正
所有权:Services中的业务API调用及必要接口声明;变更UserService前由集成人协调。
1. rg盘点UserId/CustomId/PlayFabId/InternalId、十六进制解析和缓存键;形成身份调用清单:调用者、端点、本人/目标玩家、服务端实际字段语义、替换策略。
2. 优先ClubService剩余自身playerId:GetClubDetails/CreateClub/ApplyClub/GetApplyList/QuitClub/Demote/Promote/Kickout/ReadClubEvent/ClubSingin/GetServiceEvent。目标ID(applyId、appointId等)必须追溯来源,不能统一改成本人ID。
3. 本人新API使用已认证ApiPlayerId;未认证不发请求;旧PF调用和存档仍保留旧ID。显式重命名UserId为PlayFabId是独立步骤,需完整分类后再评审,不改存档命名空间。
4. 账号切换/401/退出:审查旧响应能否覆盖新状态、自动重登的身份来源、旧Hub是否仍连接;记录并修复实际发现。身份验证不能只靠一个全局可变ID。
验收A:所有范围内请求按契约取ID;模拟本人/目标玩家/未授权/换号分支;源码编译;真实只读探测按授权范围,写接口用模拟或专用测试环境。A不承诺所有外围能力已迁移。
## B:独立KV适配
所有权:新增Services/PlayerData/PlayerKVModels.cs、PlayerKVClient.cs及meta,CodexOutput/upserver/KVContractTests;不改生产PlayFabMgr和游戏初始化。
1. 重查服务器PlayerDataApi/PlayerKVService契约及部署,不执行数据库迁移。API Get/Set/Delete均POST,Cookie决定账号;Get返回data字符串字典;Set/Delete允许200空正文。
2. 固定API基址和账号会话实例;注入HttpClient由调用者拥有,Cookie共享的桥接由集成人统一审查。不能暴露可无约束切账号的全局客户端。认证session当前HttpClient为private,这一连接点需要具体落盘后再实现。
3. 请求数据复制快照;参数校验;错误区分授权/HTTP/网络/超时/取消/协议,Get失败不能当空存档;无自动重登、无自动写重试、不记录值。
4. 测试先覆盖协议和失败;101/102仅本次独立前缀key执行新增/读/覆盖/指定key/空字符串/删除/缺失;同名key隔离、重登持久化,无Cookie拒绝;finally清理并记录失败清理项。
验收B:实际生产源文件测试、Unity兼容编译、真实持久化与隔离证据齐全;所有测试key清理完成。读探测成功不代表本阶段完成。
## C:可靠同步与游戏集成(等待A/B对应验收)
- 先实现环境+账号隔离缓存、云端基线/待写日志、串行快照、成功按序号确认,失败保留;remoteStore=false只本地。
- 三方比较:远端等于本地待写视为已确认;远端等于基线可提交;否则冲突暂停。此策略不消除读写之间竞争,当前服务器无CAS,禁止声称跨设备强一致。
- 明确新账号/缺失key默认策略,旧PF存档不自动覆盖或导入。Get失败停止进入游戏。
- 同批迁移await登录→Get→初始化→Done与PlayFabMgr内部存储;立即同步失败不得报成功,避免重复扣减。
- 先完成缓存单元测试,再双账号切换、断网重启、迟到响应、51+key、写中产生新值等验收;不能先接游戏再补数据安全。
## D:外围能力与SDK删除
公开他人资料、排行榜、好友/俱乐部、匹配、聊天、工具、埋点逐项匹配自建契约;没有替代能力不能伪造成功。完成全局ID语义、SDK引用清零、Unity完整编译和游戏回归后才删除SDK。
## 并行约定与阶段门
A/B可独立推进;共用UserService、CustomServerMgr、RTService只由集成人改。任何agent不得回滚其他agent改动。每15分钟或每小任务落盘。每阶段记录裁决、开发边界、测试命令/结果、已知限制、下一步。审查阻塞项解决前不得切生产存档。
## 独立审查后的门禁补充(2026-09-21)
审查初步指出以下具体风险,后续以《审查记录.md》最终证据为准:
- A需处理业务请求代际:请求发出时固定会话/账号版本;迟到成功及401不得更改新会话或触发新账号自动登录。不能仅保护account/Login响应。
- SignalR需专项修复并验收:cachedEvents首次连接绑定、Stop/Dispose等待、成功事件订阅释放、换号时旧连接停止。合并到正式会话生命周期前必须解决,不等同于已修复。
- B可先做纯DTO、协议解析和使用专属固定测试会话的契约实现;绑定生产认证会话前,必须先完成HttpClient/Cookie所有权、会话版本、换号取消与注销释放的具体设计评审。当前方案不授权直接复用可被全局替换的manager传输。
- C存档切换与D SDK删除继续关闭;只有相关生命周期问题、A/B验收和缓存可靠性通过后才开启。