P68（512×384 整图渲染截图证据）验证记录
基线：commit a578791（P67）。本单未 push。

范围
- 为「512×384 整图」方案验收补一张覆盖全图的真实像素证据（P48 只验过 digest）。
- 只新增 Desktop 侧离线渲染模块与证据钩子/脚本/测试；Kernel/Sim 零改动。

改动文件
- src/LivingVillage.Desktop/MapSnapshot.fs（新）：`MapGen.Result` → RGB 像素 / PNG 的纯 CPU 渲染器。
  - 每瓦片 `scale` 像素（默认 8，>=8）；调色板：草地/水/石/泥炭/水田/菜畦/小径/主路/桥/屋顶/门/树丛，
    与 scripts/analyze-p68.py 一一对应。
  - 绘制顺序：地面瓦片 → Paths 小径 → MainRoadCenter 主路 → Bridges 桥 → Buildings/Farmhouses
    屋顶矩形 + 门 → Groves 树丛。
  - PNG 编码自包含（IHDR/IDAT/IEND + CRC32 + BCL `ZLibStream` 压缩），无外部图像依赖。
- src/LivingVillage.Desktop/Program.fs：新增 LV_P68_MAPSHOT=1 钩子——用 `MapGen.generateWithSize 512 384 4242`
  （内部即 paramsForSize）离线渲染整图到 `LV_RECORD_DIR/p68-map.png` 后退出，**不启动图形设备**（真正 headless）。
- src/LivingVillage.Desktop.Tests/P68MapSnapshotTests.fs（新，3 例）+ 两处 .fsproj 挂载。
- scripts/analyze-p68.py（新）+ docs/evidence/p68-{run-log,map}.png + p68-analysis.txt。

红先
- 先建 P68MapSnapshotTests.fs 引用未实现的 MapSnapshot → 暂存 Program.fs/fsproj 并移开 MapSnapshot.fs 后编译红
  （FS0039 MapSnapshot 未定义），恢复后转绿。首次全量测试暴露 MSTest 对 byte[] 的 AreEqual 非结构比较，
  改用 CollectionAssert.AreEqual 后全绿。

构建/测试
- dotnet build LivingVillage.sln -c Release → 0 错误，1 警告（P40ArtTests.fs FS0760，既有）。
- dotnet test src/LivingVillage.Desktop.Tests -c Release --no-build → 336/336（333→+3）。
- dotnet test src/LivingVillage.Kernel.Tests -c Release --no-build → 119/119。
- 用例：PNG 尺寸 = 512×scale × 384×scale（含 IHDR 解析）+ PNG 签名；RGB 缓冲含
  河流/农田/主路/小径/屋顶像素；同输入两次 PNG 逐字节一致、不同 scale 不同。

真实整图证据（headless，无 Xvfb/X）
- LV_P68_MAPSHOT=1 → p68-map.png 4096x3072（512×384 @ scale 8），172204 bytes。
- 统计：grass=164907 water=6120 stone=1109 paddy=11595 vegetable=12877；
  rivers=4 bridges=48 paths=1109 buildings=45 farmhouses=21 groves=852 road_columns=512。
- scripts/analyze-p68.py verdict: PASS
  - 尺寸 4096x3072；调色板像素计数：water=388608 paddy=742080 vegetable=824128 road=32768
    path=34112 bridge=3072 roof=19328 grove=54528（均 > 0）；水像素/瓦片比 = 0.992。
  - 无 24x24 纯黑块、无 64x64 纯白块；missing_glyph_slots=0（纯地图，无 UI 帧）。
  - 确定性 deterministic=true sha256=DD23CC2D…0FBF。
- scripts/check-no-white-blocks.py → checked=1 failures=0 OK。

确定性（数值路径未动）
- dotnet run -c Release --project src/LivingVillage.Headless -- --performance-baseline ×3
  → final_digest 全等 953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F7F6C，
  performance_determinism=PASS ×3。

边界
- 未改 Kernel/Sim、未改 HUD/对话框、未改 MapGen 生成算法或 seed 口径、未引外部素材；未 push。
- `docs/overnight-status.md` 未纳入本 slice commit（由外部监控单独提交）。
- 逐帧/整图「视觉可辨」的 vision 复核由 Hermes 侧完成。
