"""Record the specific offline images inspected in this session; no product mutation."""
import hashlib
import json
from pathlib import Path

base=Path('work/visual').resolve()
def file(path):
    path=Path(path).resolve()
    return dict(path=str(path),sha256=hashlib.sha256(path.read_bytes()).hexdigest())
def save(path,value):Path(path).write_text(json.dumps(value,ensure_ascii=False,indent=2),encoding='utf-8')

p=base/'current-system'
original=file(p/'current-system.png');detail=file(p/'details/names-2x.png');report=file(p/'report.json')
checks=[
 ('localized-names','pass','原图及放大图显示衰变信号、加密信号和小行星带，不显示内部标记；其余名称由实际行绑定/搜索测试核对。OCR 对中文和专名存在误识别，未单独依赖 OCR。'),
 ('list-layout','pass','在此 149 行测试场景中名称与距离分列，距离列和滚动条留有间距，搜索与筛选区域未遮挡。'),
 ('reference-style','fail','深蓝背景、白色名称和灰色副标题保留；当前采用游戏原始橙色图标，未满足早先冻结条件中的青色图标。未为通过验收而更改此条件。'),
 ('unchanged-snapshots','pass','60 次无显示变化采样产生 0 次集合通知、0 次属性通知；由隔离 UI 探针检查。'),
 ('distance-binding','pass','探针核对可见 XAML 距离更新为 60.5 km，仅 Distance 属性通知，保留行对象与选中项。'),
 ('individual-signals','pass','单条信号新增与移除各一次，滚动锚点 Y=4 保持不变。'),
 ('offline-isolation','pass','独立数据目录；探针报告无游戏通道、Journal 事件、飞行或重启操作。')]
save(p/'review.json',dict(capture=str(p/'capture/capture.json'),preparations=[str(p/'details/prepare.json')],
 scope=dict(target='离线 WinUI 当前星系页面，149 行固定测试数据',state='原图与距离/增删探针均已检查',identity_confirmed=True,freshness_confirmed=True,coverage_complete=True),
 inspected_images=[original,detail],checks=[dict(id=i,status=s,observation=o,evidence=[original,detail,report]) for i,s,o in checks]))

p=base/'loading-hologram'
original=file(p/'anaconda-pose-0.png');detail=file(p/'details/hull-2x.png');black=file(p/'anaconda-pose-0-black.png')
report=file(p/'render-report-final.json');source=file('XFEEDToolBox.Core/Rendering/loading-hologram-reference.json')
images=[original,detail,black,file(p/'all-models-contact.png'),file(p/'anaconda-pose-24-black.png'),file(p/'cobramkiii-pose-48-black.png'),file(p/'cobramkiii-small-black.png')]
checks=[
 ('original-source','pass','读取原始资源的 EdgeDetection FGM 数值并保留资源哈希；文档明确标出扫描线、Bloom 与曝光为重建，未称完整游戏着色器已还原。',[source,report]),
 ('loading-style','uncertain','已观察到橙色细轮廓、暗红船面、横向扫描线与柔和外发光；尚未确认用户参考图的船型/姿态，也未还原完整原始着色器，不能据此判定与游戏效果完全一致。',[black,file(p/'reference-comparison/compare.json'),source]),
 ('all-models','pass','49 个模型均输出非空图；GPU 读回报告全部通过四周边距及预乘 alpha 检查，另查看了 49 船缩略总览和代表性原图。',[report,file(p/'all-models-contact.png'),file(p/'all-models-contact-sources.json')]),
 ('small-preview','pass','已查看 190×140 小预览的黑底合成，轮廓和船型可辨，采用同一效果且没有底座；透明 PNG 直接查看会产生无视 alpha 的亮色边，检查以正确合成为准。',[file(p/'cobramkiii-small-black.png'),report]),
 ('rotation','pass','查看固定时间的模型图像，原始模型姿态发生变化，橙色轮廓保持；探针取样 0/24/48 秒。',[file(p/'anaconda-pose-24-black.png'),black,report]),
 ('isolation','pass','独立 --offline-preview 数据目录；只读本地资源与自有 GPU 纹理，无游戏控制或桌面截图。',[report])]
save(p/'review.json',dict(capture=str(p/'capture/capture.json'),preparations=[str(p/'details/prepare.json')],
 scope=dict(target='原始游戏资源的离线 Direct3D 模型预览',state='最终客户端已渲染 49 船，原始截图匹配范围有限',identity_confirmed=True,freshness_confirmed=True,coverage_complete=True),
 inspected_images=images,checks=[dict(id=i,status=s,observation=o,evidence=[original,*e]) for i,s,o,e in checks]))
