Files
ft/CodexOutput/upserver/KVGameplayLoopTests/finalize_checkpoint.py

62 lines
7.3 KiB
Python
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.
from pathlib import Path
import json,hashlib
folder=Path(__file__).resolve().parents[1]; root=folder.parents[1]; evidence=folder/'KVGameplayLoopTests'
entry='''## 当前有效状态:R1最小接线已编写与初验,真实闭环未完成(2026-09-24)
R1原方案已完整审查并逐条裁决,见[实施批准](阶段4最小真实玩法闭环方案审查裁决与实施批准-2026-09-24.md)。本轮已编写白名单接线:10个旧源码增加152行/删除2行,新增3源码及meta;不是全量业务重构。B3A四入口保持原始字节。
**实际阻塞:101/102现有KV均为空,且M24对象缺登录期注册。** 用户已允许沿用两账号;已只读备份,没有KV写入、自动PF迁移或造档。M24最小注册补丁尚未执行,具体补丁和独立审查提示词见[实施进度与最小补充审查](阶段4最小真实玩法闭环-实施进度与最小补充审查-2026-09-24.md)。
- [x] R1-Review/C0:70项hash核对、九合同及2P2/3P3裁决、源码快照、账号授权、现有KV备份。
- [x] R1-C1/C2已做部分:白名单接线、许可15断言、默认服务双条件各8组73断言、4A/4B1/4B2/4B3A离线回归及Unity既有固定用例通过。
- [ ] R1-C1/C2剩余:M24最小注册差异独立审查→主会话裁决/实施;新装备链专用验证仍缺(动态脚本被CLI Restricted拦截,未执行,不绕过)。
- [ ] R1-数据来源:101/102 KV均0键;等待完整KV备份来源,或用户选择先只读检查同账号PF档,再列实际导入key/摘要/恢复范围。账号许可无需重复询问。
- [ ] R1-C3:真实UI装备、全部原票据Confirmed、Unity重启/新缓存恢复、独立实施复核及关闭,均未完成。
最终Unity编译0错误、270警告(完整原输出保留,新R1文件无警告);未启用运行许可、未PlayMode、不打包。成功正式请求仅2登录+2Get,Set/Delete=0。责任:评审侧审M24具体差异;数据来源等待用户选择;主会话负责裁决、实施和后续验证。4B1/4B2/4B3A已关闭;整体4B3/G4、4C、热换号及P2-α真实迁移仍未完成。正式地址http://s101.local:18080/,Unity CLI Loop,不用UnitySkills。
### 以下为历史快照(当前以本节为准)
'''
for name in ['接手入口.md','开发状态.md','TODO.md']:
p=folder/name;old=p.read_text(encoding='utf-8');head,rest=old.split('\n',1)
# Replace the current in-turn snapshot; leave earlier historical records intact.
delimiter='### 以下为历史快照(当前以本节为准)'
rest=rest[rest.index(delimiter)+len(delimiter):].lstrip()
p.write_text(head+'\n\n'+entry+rest,encoding='utf-8')
record='''
## 检查点1/2收尾:已验证部分与未完成项
更正本轮中间记录的文件计数:实际修改10个旧源码(152行新增/2行删除),新增3源码+3meta;审计只与R1已审基线比较。B3A四固定方法所在尾段逐字节不变。`checkpoint2-source-audit.json`及逐文件diff保存。没有修改底层/31业务算法/场景/包/服务器。
许可测试补齐空档/重复key后15断言通过。默认服务非Android/Android+AGG各8组73断言;4A 18组226、4B1 23组279、4B2 75组1715、4B3A 13组544均通过。File.Replace沙箱拒绝有诊断堆栈,原首败及获准同程序通过均保留,不修改实现去迎合沙箱,也不关闭历史间歇问题。Unity原固定入口B3A 34、B2-20 83断言通过且恢复成功。
最终CLI编译0错误270警告,新R1文件无警告;既有变更文件上的4条告警位于未修改的方法,其余在未改文件,本轮不清理。早先增量0警告不等于整个工程零告警。源码中补充实际API URI必须等于许可固定s101地址;Editor Agg通知复用已解码M31,不读取未登录的渠道SDK AccountInfo。
新R1装备链动态合成脚本第一次因Json双程序集而编译失败,修正脚本后CLI Restricted在执行前拒绝反射/HttpMessageHandler等API。未执行,不算测试通过;未降低安全级别或另设旁路。既有固定回归入口独立运行,不能代替这个新链覆盖。正式PlayMode仍未执行。
《阶段4最小真实玩法闭环-实施进度与最小补充审查-2026-09-24.md》已给出M24准确注册补丁和评审提示词,待差异审查后落代码。101/102实际KV均空档;初始来源选择未回复,不自动迁移PF或创建数据。当前只完成白名单接线和初验,不标记C1/C2全部完成,也不关闭R1。下一步:外部审M24具体差异、用户确定初始存档来源;主会话随后逐条裁决并继续执行。
'''
for name in ['阶段4最小真实玩法闭环实施记录-2026-09-24.md','开发日志.md']:
with (folder/name).open('a',encoding='utf-8') as f:f.write(record)
p=folder/'阶段4B3当前TodoItem-2026-09-24.json';d=json.loads(p.read_text(encoding='utf-8'))
d.update(phase='R1-wiring-initial-checks-M24-supplement-and-save-source-pending',nextResponsibleSide='reviewer-M24-and-user-save-source',implementationScope='R1 original whitelist approved; M24 early registration supplement pending; real gameplay not verified',R1Closed=False)
d['minimalGameplayConstraints']['newImplementationApproved']=True
for item in d['todoItem']:
if item['id'] in ['Minimal-Gameplay-Design','R1-Review']:
item.update(status='completed',detail='R1独立方案审查接受;70项hash、九合同和2P2/3P3已逐条裁决,原白名单编码批准')
if item['id']=='R1-C1-C2': item.update(status='partially-complete',detail='接线与必要旧回归已完成;M24注册补审、新链专用测试及真实加载仍缺')
d['todoItem'] += [dict(id='R1-M24-supplement',status='awaiting-independent-review',detail='仅LoginStage中Editor模式提前注册已有M24单例;精确补丁及提示词已落盘'),dict(id='R1-data-source',status='awaiting-source',detail='已备份101/102空KV,无业务写入;等待初始完整档来源,不自动PF迁移')]
p.write_text(json.dumps(d,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
baseline=json.loads((evidence/'checkpoint0-baseline.json').read_text(encoding='utf-8'))
paths={f['path'] for f in baseline['files'] if f['path'].startswith('Client/')}
audit=json.loads((evidence/'checkpoint2-source-audit.json').read_text(encoding='utf-8'))
paths.update(f['path'] for f in audit['newFiles'])
for name in ['阶段4最小真实玩法闭环方案-待评审-2026-09-24.md','阶段4最小真实玩法闭环方案独立审查-2026-09-24.md','阶段4最小真实玩法闭环方案审查裁决与实施批准-2026-09-24.md','阶段4最小真实玩法闭环-实施进度与最小补充审查-2026-09-24.md']:
paths.add('CodexOutput/upserver/'+name)
for name in ['checkpoint2-source-audit.json','Program.cs','KVGameplayLoopTests.csproj','Preflight/Program.cs','Preflight/Preflight.csproj','unity-loop-synthetic.cs.txt','checkpoint2-unity-loop-synthetic-retry.json','checkpoint2-unity-compile-final.log','checkpoint2-unity-existing-regressions.json']:
paths.add('CodexOutput/upserver/KVGameplayLoopTests/'+name)
files=[dict(path=s,sha256=hashlib.sha256((root/s).read_bytes()).hexdigest().upper()) for s in sorted(paths)]
(evidence/'checkpoint2-review-input-hashes.json').write_text(json.dumps(dict(scope='M24 minimal supplement; R1 implementation not complete',files=files),ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
print(f'Updated status and logs; sealed {len(files)} review inputs.')