Files
ft/CodexOutput/upserver/阶段4C1方案审查裁决与实施记录-2026-09-24.md

66 lines
10 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.
# 4C1方案审查裁决与实施记录
## 检查点0:完整评审裁决与实施批准
独立报告《阶段4C1普通钓鱼消费确认方案独立审查-2026-09-24.md》接受,无P1/P2。主会话34项受审hash全部一致;报告摘要及25个源码字节快照见KVFishingConsumeTests/checkpoint0.json和before/。源码快照含订阅者和HomeBtnRecharge,保留实际行号。
逐项裁决:①范围接受,首轮只到开放拉杆;②动作身份/生命周期接受,重复与旧回调不得再扣费;③双表示冲突接受,使用原整档序列化;④写入矩阵接受,活动激活仍按方案拒绝/不计通过;⑤消费按各key最终原票据确认,中间可追溯替代不改装备合同;⑥部分提交/Unknown不重扣、不补偿,专用测试模式可停止;⑦真实运行备份/配置门/一次动作/新进程恢复接受;⑧白名单与测试矩阵接受。报告将消费事件发布文件并计入“8个订阅文件”,该措辞不等于8个独立订阅者,以方案矩阵及实际源码为准。
| P3 | 裁决与落地要求 |
|---|---|
| 1 恢复计时派发前替代 | 接受;原最终票据被异步写替代就失败,保留证据,不暂停恢复计时。不能自动再次扣费;若真实run失败,先核服务器态和备份,再决定新进程验证,不能简单重播 |
| 2 Tween Kill | 接受;区分正常完成后的AutoKill与中途Kill,后者撤销继续资格;补实际继续路径断言 |
| 3 localOnly中间写 | 接受;真实ReduceEnergy(false)的中间写必须捕获;最终主档原remote票据确认,不把localOnly宣称远端确认 |
| 4 行号/订阅快照 | 接受;检查点0保存25源码原始字节,后续差异以该版本为准 |
主会话批准按主方案§7白名单实施,按§8检查点推进;不开放转盘/鱼获/热换号,不改底层、Schema、任务算法、场景、SDK或服务器。不需要再次询问101/102授权。发生范围外需求必须先形成具体差异评审,不能用此批准扩大范围。
当前检查点0完成;检查点1测试先行→最小实现,检查点2回归,检查点3真实运行门与验证,检查点4独立实施复核仍待完成。每个检查点更新日志;未完成不提前关闭。
## 检查点1进度(尚未整体通过)
已编写4份白名单旧源码与一个固定Editor验证host及meta。旧逻辑红测2项预期失败、许可旧实现8例中4失败;新版8例全通过、R1许可15断言通过。4B2全量75组1716断言、B3A全量13组544断言通过。
Unity编译0错误270警告;固定合成验证15组44断言成功,证据KVGameplayLoopTests/fishing-fixed-runs/20260924T074127_e8025245a5f5479986d968c2b693b4a7/result.json。测试替身仅.invalid、正式请求0,静态状态和owner排水已恢复。旧CLI执行在域重载后续跑,新请求返回Another execution is already in progress;以该固定host落盘的result及events为独立证据,不把CLI错误称成功。
首次夹具构造顺序错误与Tween测试失败保留。Tween根因经项目DOTween.dll IL核实:Init/AutoInit在非Play直接返回,Kill在initialized=false直接返回。因此固定host同步块暂设该初始化门,调用原Tween Complete/Kill并在finally恢复;未修改DOTween DLL或生产算法。此证据只覆盖固定夹具回调,不替代真实UI生命周期验收。
待补恢复阈值/等待期间恢复写、真实消费控制流与订阅绑定、其余既有回归。无活动permit,真实102消费未开始,检查点1/2不提前勾选完成。
## 检查点1/2:限定实现与回归完成,真实验收待运行
- 固定Unity验证18组78断言:真实PlayerData四种恢复分支、真实Achievement/BattlePass/MiniBP/LuckyGame/LuckMagic订阅及原保存方法、多key原票据确认;Unknown/401/部分提交/存储失败/30秒超时及Tween生命周期边界。最终证据KVGameplayLoopTests/fishing-fixed-runs/20260924T074932_c6600abed66e46da8241eec269ea8a1d/result.json。
- 实际ConsumeBait/ConsumeBaitOnKVAsync/KVFishingCurrent方法从当前源码提取编译,27断言覆盖Pending、确认后一次继续、重复与不支持鱼种/离线/活动、await后上下文变化;视觉继续与存储为spy,不冒称真实UI。ControlSlice.cs.txt及control-source-tests-retry.log。
- 真实订阅测试使用从未Awake的PlayFab组件,固定反射临时指向实例,使原Save走已有KV分支;没有启动PF计时或网络。测试finally恢复单例、红点、本地化和容器。MiniBP活动窗口为合成夹具设置,不更改真实服务器时间。
- Unity既有回归:M01等168断言、31模块B2-20 83断言、装备9组28断言均通过。退出实际源码Editor 10组35断言、SERVICE_HOST 10组30断言通过。此前4B2全量75组1716、B3A13组544保持有效,底层未改。
- Editor编译0错误;SERVICE_HOST完整HotUpdate响应文件编译exit0。非Editor候选和换回受审源码的对照均仅在原FishingChallengeManager.cs:72报_cheatingScore不存在,不是本次引入,不改白名单外文件;不能写成默认player编译成功。默认PF预处理差异只有using与Tween局部变量接收原返回值,没有改旧消费语句。
- 写批次记录保留值hash和原顺序,Confirmed审计输出最终key/sequence/hash。动作每进程只创建一次,引用身份等价于本期固定一次动作版本;不增可重置配额。
检查点3准备:仅正式登录2次+Get2次只读备份,Set/Delete=0。102仍45键,energy403、energyRM102、倍率索引4(离线配置候选费用10),101空。预计写键/存在性/允许变化字段/config hash见real-preflight-matrix.json,备份SHA B43CC4AB7E55B72AF46D76F082AD612F7994C7CE63272A7C526E714355027723。运行时仍须再次核Tables、费用、MaxEnergy、活动状态;不以离线预检代替。102不重复导入,claim不得删除。只开一次普通抛竿至可拉杆,然后正常退出、新进程恢复;不点击拉杆或领奖。
## 检查点3实跑发现:已完成消费后的正常UI销毁误报取消
Unity129848一次真实抛竿,2026-09-24T07:55:50Z:403→393,energyRM102→112,主档原sequence4与战令任务原sequence3均Confirmed;随后显示btn_draw,未点击鱼钩/领取。运行前后活动sentry/Scope快照完全一致。通过正常QuitStage请求退出后,先发生FishingBehaviorB.OnDisable,后发生Loop关闭;当前CancelFishing只检查Ready,因此已Continued动作被误报Fault。07:56:07Z closed,playing=false;不是保存失败或二次扣费。
编码前裁决:方案§3.5要求撤销对象继续资格;消费进行中/等待中需要Fault,已确认且已继续的动作正常结束不再属于等待状态。批准在原白名单CancelFishing内将Fault条件收窄为Ready且尚未Continued,始终保留Cancelled标记、进程一次配额及未完成消费的Fault行为。新增实际OnDisable方法的完成后取消回归,先留红测。此修订落实既有生命周期合同,不扩大功能或修改退出/底层。当前实跑不记无异常通过;修复后以合成回归+新进程只读恢复验收,不重扣、不补档、不删除claimed。
### 已完成动作取消修复的验证
原固定OnDisable回归先失败(normal-disable-red.json),单条件修复后19组81断言全部通过(normal-disable-green.json),编译0错误270警告。真实退出还出现AStage.UnloadActAsync NullReference:栈显示此次Fault引发ExitKVGameplayLoopAsync再次SwitchStage,与原正常Quit并发;不能省略为仅提示文字。修复完成后OnDisable不再发Fault,消除此处重复退出触发;未改Stage框架。首次真实run两条Error保留(real-final-errors.json),该修复尚未在第二次真实消费中验证,不重扣来掩盖首跑问题。
正式只读对账:101空且未变,102仍45键,恰好2键变化。NewPlayerDataDic仅19槽中的3(403→393)、9(102→112)变化及ad的消费成就102→112/日期114→266;其他主档字段不变。BattlePassRecordTask每日10003、每周20001各0→10;其余43键逐值相同,最终两键hash与原Confirmed审计一致。见real-after-consume-diff.json。前后活动状态快照一致;无活动激活/额外键,无鱼获或奖励。
### Unity编辑器进程关闭工具限制
游戏已先通过QuitStage完成closed并停止Play。随后使用uloop launch --quit请求正常退出编辑器:沙箱内首次EPERM;经权限放行后CLI发送正常退出信号,10秒未退出,工具**自动降级强制结束进程129848**。本会话没有显式请求force,但必须按工具真实输出记录,不能声称编辑器进程正常退出。见unity-normal-quit-process-approved.log。该动作发生在服务器对账、Owner排水和游戏closed之后;新进程恢复仍可验证服务器存档,但“编辑器进程优雅退出”不计通过。后续不重复使用这个自动强制退出行为,恢复验证后保留编辑器空闲即可。
## 检查点3完成与检查点4交付(2026-09-24)
新进程41828的CLI恢复连接后,登录前run/claimed不存在;恢复energy393、energyRM112、消费成就112、战令每日10003/每周20001各10,货币鱼竿不变。正常QuitStage closed,playing=false、ready=false、error=null、Console Error0。最终只读备份101空、102原45键与消费后全部逐值一致,无二次消费。permit两份归档,5个claimed保留;编辑器空闲,不再调用带自动强杀的quit工具。
检查点4交付验收报告、作者自审与独立实施复核提示词,生成受审hash。首次真实退出错误、修复红绿证据、编辑器自动强杀及默认非Editor既有编译错误均保留。当前责任在独立评审侧;主会话收到后逐项裁决才能关闭4C1。无新许可、无下一阶段实施批准、无打包。
## 检查点5~7:独立实施复核裁决与关闭
主会话在共享文档更新前核172/172受审hash一致,Q1~Q8及四P3逐条裁决,正式关闭限定4C1。详见[关闭裁决](阶段4C1实施复核裁决与关闭-2026-09-24.md)。首跑退出错误、修后未二次收费、Editor强杀、非Editor既有编译失败均保留。恢复run包含同值登录保存受理,不泛称只读。本轮仅文档关闭,无源码修改、重跑或服务器请求;下一步主会话准备后续完整方案。