P64（A3 成熟度：样板三处视觉缺口）验证记录
commit 前置：HEAD=128164d（docs tick）

变更（仅限现有江南样板，不扩展全村）
1. 好处：村庄俯瞰上半部空旷
   - `VillageArt.sampleRenderPlan` 在 local y0..6 / x0..19 补种（复用既有 RenderPropKind 与低饱和配色）：
     4 菜畦(2格) + 2 竹丛(3格) + 2 灌木 + 2 花丛，并铺北侧田埂石径 x0..19 y0。
   - 无新增几何占位：全部走既有 GardenSprite/BambooSprite/ShrubSprite/FlowerSprite 与 StonePath。
2. 桥梁可读性
   - `scripts/make-jiangnan-art.py` 重绘 slot5：栈板桥面 + 两侧通长木栏杆 + 望柱 + 石缘（单格 32px，尺寸不变）。
   - `VillageArt.drawBridge` 在桥两侧水线补 4 块护岸石（`bridgeAbutmentOffsets`，仅江南图集；cc0 不变）；
     桥位置与通行逻辑零改动。
3. 民居内景下半家具
   - `InteriorElementKind` 增 Chair/Stool/BedFoot/Teapot；图集在 392x96 自由区新增 4 个绘制单元，
     `interiorSourceRectangle`/`elementDestination` 同步；`sampleRenderPlan.Interior` 4 → 8 件。
   - 进门流程与 HomeMode 语义未改（内部元素纯绘制）。

改动文件
- scripts/make-jiangnan-art.py（桥 slot5 + 内景 4 家具单元）
- src/LivingVillage.Desktop/Assets/jiangnan-world.png, jiangnan-interior.png（脚本重生成，尺寸不变）
- src/LivingVillage.Desktop/VillageArt.fs（类型/源矩形/落位/补种/护岸石/采样）
- src/LivingVillage.Desktop/Game.fs（新增 LV_P64_SHOT 钩子，+~100 行，无删除）
- src/LivingVillage.Desktop.Tests/P64EvidenceTests.fs（新，+3 测试）+ fsproj
- src/LivingVillage.Desktop.Tests/PrototypeTests.fs（内容计数更新：内景元素 4→8；footprint 37→55）
- scripts/analyze-p64.py（新）

构建
dotnet build LivingVillage.sln -c Release → 已成功生成，0 错误，1 警告（P40ArtTests.fs(38,28) FS0760，既有）

测试
dotnet test LivingVillage.sln -c Release --no-build
- Desktop 313/313（310 → +3：P64EvidenceTests）
- Kernel 119/119

证据实跑（真实 Desktop + xvfb 1280x720）
LV_P64_SHOT=1 LV_LEGACY_MAP=1 xvfb-run -a -s "-screen 0 1280x720x24"（exit=0）
log:
  p64-plan upper_band_props=11 upper_band_kinds=4 bridge_props=1 bridge_foot_tiles=3 bridge_abutments=4 interior_elements=8
  p64-shot=p64-overview tick=2592000 avatar=(1008,688) camera=(384,344) home=Outside
  p64-shot=p64-bridge  tick=2592000 avatar=(1008,912) camera=(384,568) home=Outside
  p64-shot=p64-interior tick=2592056 avatar=(1008,763) camera=(384,568) home=Inside (HomeId 1)
（内景为真实 Sim.step 向门口移动后真实 Interact 进门，tick 前进 56）

scripts/analyze-p64.py /tmp/opencode/lv-p64 docs/evidence/p64-analysis.txt → verdict: PASS
  p64-overview.png 1280x720 mean=86.3 std=33.2 黑块=0 白块=0
  p64-bridge.png   1280x720 mean=86.0 std=33.0 黑块=0 白块=0
  p64-interior.png 1280x720 mean=118.7 std=54.1 黑块=0 白块=0
  俯瞰上半部内容密度（y120..360 非背景占比）= 0.1812，P62 同带基线 0.1030（+76%）
  桥区域木色像素占比（x560..720,y360..500）= 9604/22400 = 0.4288
  三帧两两不同（min mean_abs_diff=12.5）；缺字空白位=0
scripts/check-no-white-blocks.py 三帧 → checked=3 failures=0 OK

确定性
LivingVillage.Headless.dll --performance-baseline ×3 → final_digest=
953775FAEB2FDDE97289491AA260BD8D390C571E48A7A13AD2CB6FB7124F7F6C ×3，performance_determinism=PASS

边界
- 未改 Kernel/Sim.fs、Sim.step、地图/seed 口径、HUD/对话框结构、字形表、进门流程/HomeMode 语义
- 未引外部素材；未生成 512×384；未 push
- 桥位置与通行逻辑未动（只加护岸石/栏杆贴图）
- 逐帧视觉复核仍受本写入模型不支持图像输入限制（P60 G3），需 vision 能力方复核
