summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/evidence/p68-analysis.txt18
-rw-r--r--docs/evidence/p68-map.pngbin0 -> 172204 bytes
-rw-r--r--docs/evidence/p68-run-log.txt4
-rw-r--r--docs/evidence/p68-verification.txt51
4 files changed, 73 insertions, 0 deletions
diff --git a/docs/evidence/p68-analysis.txt b/docs/evidence/p68-analysis.txt
new file mode 100644
index 0000000..4e0a3a6
--- /dev/null
+++ b/docs/evidence/p68-analysis.txt
@@ -0,0 +1,18 @@
+P68(512×384 整图渲染截图证据)分析 — headless 离线渲染(无图形设备)
+钩子:LV_P68_MAPSHOT=1(MapGen.paramsForSize 512 384 seed=4242 → MapSnapshot 整图 PNG)
+
+log: p68-map width=512 height=384 scale=8 png=4096x3072 bytes=172204
+
+log: p68-tiles grass=164907 water=6120 stone=1109 peat=0 paddy=11595 vegetable=12877
+log: p68-features rivers=4 bridges=48 paths=1109 buildings=45 farmhouses=21 groves=852 road_columns=512
+
+log: p68-render deterministic=true sha256=DD23CC2DE96955DCDC58A261F14DB6A4BF5E012C6F1E3C047A6E868AAFDC0FBF
+
+p68-map.png 4096x3072
+palette pixel counts: grass=10480064 water=388608 stone=0 peat=0 paddy=742080 vegetable=824128 path=34112 road=32768 bridge=3072 roof=19328 door=4224 grove=54528
+water pixel ratio (vs tile count) = 0.992
+max_black_block=0 max_white_block=0
+
+missing_glyph_slots=0(纯地图整图,无 UI 文案帧)
+
+verdict: PASS
diff --git a/docs/evidence/p68-map.png b/docs/evidence/p68-map.png
new file mode 100644
index 0000000..deeebfa
--- /dev/null
+++ b/docs/evidence/p68-map.png
Binary files differ
diff --git a/docs/evidence/p68-run-log.txt b/docs/evidence/p68-run-log.txt
new file mode 100644
index 0000000..d1d68bf
--- /dev/null
+++ b/docs/evidence/p68-run-log.txt
@@ -0,0 +1,4 @@
+p68-map width=512 height=384 scale=8 png=4096x3072 bytes=172204
+p68-tiles grass=164907 water=6120 stone=1109 peat=0 paddy=11595 vegetable=12877
+p68-features rivers=4 bridges=48 paths=1109 buildings=45 farmhouses=21 groves=852 road_columns=512
+p68-render deterministic=true sha256=DD23CC2DE96955DCDC58A261F14DB6A4BF5E012C6F1E3C047A6E868AAFDC0FBF
diff --git a/docs/evidence/p68-verification.txt b/docs/evidence/p68-verification.txt
new file mode 100644
index 0000000..82ea1e6
--- /dev/null
+++ b/docs/evidence/p68-verification.txt
@@ -0,0 +1,51 @@
+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 侧完成。