P70（启动帧率与渲染绘制概要基准）验证记录
基线：commit 1d56991（P69）。本单未 push。

目标与可见性
- 为「性能吞吐/分配/GC 基准与真实数据」补一组真实可复跑的 Desktop 侧基准；本单可在桌面/dev UI 观看。
- 不宣称未测性能：只列本次实跑数字，未测项如实标注。

改动
- src/LivingVillage.Desktop/Game.fs：新增 LV_FRAME_LOG=1 逐帧日志（仅日志，不改渲染/更新逻辑）——
  每帧打印墙钟帧间隔 `ms`、线程分配增量 `alloc_kb`（GC.GetAllocatedBytesForCurrentThread）、
  tick 与当前 panel。配合 LV_PERF_SOAK_SECONDS + LV_AUTOPLAY_SAMPLE + LV_UNLOCK_FPS 跑 N 秒真实帧循环。
- src/LivingVillage.Kernel.Tests/P70PerformanceBaselineTests.fs（新）：Pin Headless --performance-baseline
  最终 digest = 953775FA…（防 Kernel/Sim 漂移）+ fsproj 挂载。
- scripts/bench-p70.sh（新）：Kernel 吞吐 + Desktop 60s xvfb 帧循环两档，落盘后调 analyzer。
- scripts/analyze-p70.py（新）：汇总数字与裁决，写 docs/evidence/p70-analysis.txt。

命令 / 环境 / 输入
- 构建：dotnet build LivingVillage.sln -c Release
- 基准：P70_SECONDS=60 bash scripts/bench-p70.sh /tmp/opencode/lv-p70
  - Kernel：dotnet src/LivingVillage.Headless/bin/Release/net8.0/LivingVillage.Headless.dll --performance-baseline
    （seed=42 npc=4 warmup=120 measure=6000 ×3）
  - Desktop：xvfb-run -a -s "-screen 0 1280x720x24" env LV_AUTOPLAY_SAMPLE=1 LV_PERF_SOAK_SECONDS=60
    LV_FRAME_LOG=1 LV_UNLOCK_FPS=1 LV_LEGACY_MAP=1 LV_RECORD_DIR=... dotnet .../LivingVillage.Desktop.dll
- 环境：linux，Xvfb 软件渲染（llvmpipe），1280x720；dotnet-counters=missing（逐帧分配改由进程内
  GC API 实测，非 counters）。

实测数字（本次，不外推）
- Kernel 吞吐（6000 tick ×3）：ticks_per_second mean=466679 / min=278557 / max=646089；
  allocated_bytes mean=3032184；gc gen0/1/2=0/0/0；determinism=PASS；final_digest=953775FA…7F6C（钉值一致）。
- Desktop 帧循环（60s，解锁 vsync/固定步长）：frames=8788，wall=63087ms，measured_fps=139.3；
  frame interval ms mean=7.179 / min=1.664 / max=33.919 / p50=7.909 / p95=9.847 / p99=10.823 / std=2.262；
  掉帧 >25ms=4（0.05%）、>33.3ms=2（0.02%）；每帧分配 KB mean=231.22 / p95=297.00 / max=1835.20。
- 说明：帧率依赖机器与 xvfb 软件渲染，本报告只列实测，不设硬性 fps 门槛。
- 未测项：dotnet-counters 缺席 → live counters 无；已用 GC API 替代给出每帧分配。

复现
  dotnet build LivingVillage.sln -c Release
  P70_SECONDS=60 bash scripts/bench-p70.sh /tmp/opencode/lv-p70
  cat docs/evidence/p70-analysis.txt   # verdict 应为 PASS

验收
- dotnet build -c Release → 0 错误，1 警告（P40ArtTests.fs FS0760，既有）。
- Desktop 338/338（--no-build）；Kernel 120/120（--no-build，含新增 Pin 1 例）。
- p70-analysis.txt verdict=PASS，含真实数字（见上）。

边界
- 未改 Kernel/Sim 数值路径、渲染口径、字形表、地图生成；未 push。
- 提交物：脚本 + 证据（analysis/env/kernel-baseline/帧日志抽样）+ 1 条 pin 测试 + 仅日志式的 Game 帧记录。
- 完整 8956 行帧日志在 /tmp/opencode/lv-p70/desktop-log.txt（复跑生成），仓库内留 head/tail 抽样。
