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

12 KiB
Raw Blame History

后续实现方案

当前有效状态:D4/D5已裁决,继续检查点2(2026-09-23)

独立报告D4有条件通过、D5通过,23项hash一致,主会话已逐条裁决并合入正式版3。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检查点2首批验证完成,先补审D3空态(2026-09-23)

D1/D2已实现局部纯入口并通过真实对象验证,见首批记录。接续工作为D3值类型空态审查→主会话裁决→剩余检查点2→3/4。M21/M22/M24不能直接置null,尚未擅改类型或PF方法;原批准成果保留,正式启用及P2-α门不变。

历史快照:D1/D2通过后继续检查点2

外部D1/D2通过、14项hash一致,主会话裁决及实施边界已明确;后续首读合并修订的正式字段/模块合同。按2→3→4顺序完成,检查点1成果保留。P2-α真实档迁移盘点加入历史AD坏槽条目,正式启用前审查与用户产品确认门不变。

历史快照:检查点2两项差异当时待补审

开工123项hash一致,修订2审查意见已逐项裁决并批准。Lease/Registry先行完成,19+23组通过;下一步按差异补审方案解决AD格式/FootPrint位宽,再继续既定2–4顺序。真实存量档兼容与迁移、独立评审及用户产品确认是正式启用硬前置。当前没有4B3、玩法启用或打包授权。

历史快照:修订2当时待独立评审

初稿审查退回意见已逐条裁决并写入修订2方案及字段/模块合同。下一步按新提示词完整独立评审;会话借用扩展、白名单扩围及受控输出调整均未批准编码。

历史状态:4B1正式关闭,下一步4B2完整方案评审(2026-09-23)

主会话已核对受审hash并完成三条P3逐条裁决,见4B1关闭裁决。下一步编制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待用户指定外部AI实施复核,4B未启动。 使用外部复核提示词。本轮没有访问正式服,没有打包。

当前更新:3C方案审查通过,已批准实施(2026-09-23)

3C采用独立KVStage3CTests宿主、manifest先行、受限转发Handler、离线跨进程组合、101/102正常路径联调和测试宿主脱敏诊断。独立审查PASS,F1–F6已全部纳入审查裁决;当前由本会话按任务书实施。

当前更新:阶段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验收报告和独立代码审查。

整个阶段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警告,生产源码未变。见补修复交付与逐项证据。外部AI实施复核尚待完成,3C/G3未恢复最终通过,4A未启动。 下一步交外部AI复核提示词给用户指定独立AI。

用户最新范围裁决:先完成最小登录

当前只推进最小登录、Cookie、失败/退出换号、SignalR必要生命周期和首页自动GetSelfClub最小兼容。俱乐部完整业务与KV实现移至后续,不能继续作为本阶段自动扩展项。已有外围代码保留为待单独归档/评审改动,尚未从工作区剥离,不整批回退。

执行范围以当前阶段范围裁决-仅最小登录为准;下方历史进度保留,但不代表当前继续开发授权范围。

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验收和缓存可靠性通过后才开启。