summaryrefslogtreecommitdiff
path: root/docs/evidence/p60-inventory.md
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-29 04:36:27 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-29 04:36:27 +0800
commit3a76bb5691a44d0b47cfb0abe332f1fe79c98a30 (patch)
treeaede2761514622f65e42ddfa3d9d2c6a256a67bb /docs/evidence/p60-inventory.md
parentf22fe938b8e15fd88b87b47a38952b7ce47105ad (diff)
downloadliving-village-3a76bb5691a44d0b47cfb0abe332f1fe79c98a30.tar.gz
p60: 江南可玩样板端到端盘点与缺口证据(只盘点,零代码改动)
入口:仓内不存在 LV_DEBUGGAME;用真实游戏内钩子驱动同一 Game 循环取证 (LV_P46_SHOT 启动/菜单、LV_P44_SHOT 白天 NPC 对话、LV_P39_SHOT 夜晚石灯笼、 LV_P53_REC 提示-交互-关闭短帧链),复制为 docs/evidence/p60-*.png 共 7 帧。 盘点结论(docs/evidence/p60-inventory.md): - 已完成:桥/河/岸/石板路/植物、村民四向动画、昼夜光照、提示-交互-关闭链、玩家与可区分村民。 - 部分完成:① 民居可进入——功能与测试齐备(Interaction.fs:400-424、Game.fs:2688-2690、 PrototypeTests/P36PromptTests/SampleTests),但无内景游戏截图;② 中文界面——字形图集 (CjkGlyphAtlas.characterTable,307 字)缺 16 个 UI 用字:冬包卷品夏料春玩秋第背车轴页香鱼, 缺字被置空(Game.fs:73-92),影响右上日历「春夏秋冬·第N天」、对话页脚「第…页」、 背包/交易/物品名/回车提示等。 帧分析(p60-analysis.txt):黑块 0、白块 0/7 failures、字面豆腐块 0; 对话 rect (190,558,900,138),提示 rect (598,288,52,26) 且 paint 44.55 / restore 0.00(P53 PASS)。 缺口分层:阻塞确认门 = 缺字 16(G1)、民居内景无截图(G2)、逐帧 vision 自审未执行(G3, 本 writer 模型无图像输入且环境无 OCR/vision CLI/凭据);不阻塞 = 长视野成本留档(G4)、 复用钩子非单一入口(G5)。均只给最小整改建议,未修。 回归(p60-verification.txt):Desktop 304/304 + Kernel 119/119; --performance-baseline ×3 digest 953775FAEB2F… 不变,determinism PASS。未 push。
Diffstat (limited to 'docs/evidence/p60-inventory.md')
-rw-r--r--docs/evidence/p60-inventory.md82
1 files changed, 82 insertions, 0 deletions
diff --git a/docs/evidence/p60-inventory.md b/docs/evidence/p60-inventory.md
new file mode 100644
index 0000000..f2f009c
--- /dev/null
+++ b/docs/evidence/p60-inventory.md
@@ -0,0 +1,82 @@
+# P60 江南可玩样板整体验证与缺口盘点(证据单)
+
+- 日期:2026-09-29
+- 目标:对「用户批准的江南水乡可玩样板」做一次端到端状态盘点,为今晨用户确认门准备证据。
+- 本单只盘点,**未修改任何代码**(Kernel/Sim/HUD/对话框/外部素材均未动)。
+- 帧与数字证据:`docs/evidence/p60-*.png`、`p60-analysis.txt`、`p60-p53-chain.txt`、`p60-verification.txt`。
+
+## 入口说明(重要)
+
+仓库中**不存在 `LV_DEBUGGAME`**(全仓 grep 无匹配)。可玩样板的真实入口即 Desktop 应用本身;
+本单用**真实游戏内证据钩子**驱动同一 Game 循环取证,未新增/mock 任何渲染路径:
+
+| 用途 | 钩子 | 产出 |
+|---|---|---|
+| 启动 / 菜单 | `LV_P46_SHOT=1` | `p46-splash-ripple.png`、`p46-menu-lantern-a/b.png` |
+| 白天村内 NPC + 对话 | `LV_P44_SHOT=1` | `p44-dialog-a/b/c.png`(真实 `Interact` 开对话) |
+| 夜晚村内石灯笼光晕 | `LV_P39_SHOT=1` | `p39-day/night/lantern-night.png` |
+| 情境提示-交互-关闭 短帧链 | `LV_P53_REC=1` | `p53-far/prompt/dialog/gone.png` |
+
+复制进证据目录的帧:`p60-startup` `p60-menu` `p60-day-dialogue-a/b` `p60-night-lantern` `p60-prompt` `p60-prompt-gone`(共 7 帧 ≥ 3)。
+
+## 逐项盘点
+
+| # | 样板项 | 状态 | 证据 | 缺口 |
+|---|---|---|---|---|
+| 1 | 民居可进入 | **部分完成** | 功能:`src/LivingVillage.Desktop/Interaction.fs:400-424`(`EnterHome` → `home entered`/`home exited`),内景渲染 `Game.fs:2688-2690`(`VillageArt.drawInterior`),中文串 `Interaction.fs:575-576`;测试:`PrototypeTests.fs`(`EnterHome`/door→prompt 解析)、`P36PromptTests.fs`、`SampleTests.fs`、`P53InteractionPromptTests.fs:166` | **无内景游戏截图**(`docs/evidence` 无任何 interior/home 帧)→ 用户无法据此做视觉确认 |
+| 2 | 桥、河、岸、石板路、植物 | **已完成** | 生成器 `MapGen.fs`(water/stone/peat、`Paths`、`MainRoadCenter`、`Bridges`)、`SceneDetail.fs:93-96`(岸线芦苇);帧:`p39-day.png`(桥)、`p47-day.png`(河道)、`p40-boat.png`;测试:`MapGenTests.fs` 37、`P47SceneDetailTests.fs` 6、`P39ArtTests.fs` 9、`P40ArtTests.fs` 8 | — |
+| 3 | 村民四向动画 | **已完成** | `VillageArt` 四向×6 帧;测试 `P45CharacterAnimTests.fs:45`(四向可分)、`:67`(源格互异)、`:92`(行走推进/停止回 idle) 共 7;帧:`p45-char-a/b/c.png` | — |
+| 4 | 中文界面 | **部分完成** | UI 文案集中 `ChineseText.fs`(`requiredUiLabels` 等);帧:`p60-menu.png`、`p60-startup.png`;测试 `P16UiTests.fs` 13 | **字形图集缺 16 个 UI 用字**,缺字被置空 → 详见缺口 G1 |
+| 5 | 昼夜光照 | **已完成** | `M6Presentation`(`resolveStartTick`/`timePeriodLabel`/tint);帧:`p60-night-lantern.png`、`p39-night.png`、`p47-night.png`;测试 `P46MenuAmbienceTests.fs` 8、`P43HudTests.fs` 8、`P47SceneDetailTests.fs` 6 | — |
+| 6 | 情境提示-交互-关闭 短帧链 | **已完成** | `Interaction.fs`(`InteractionResolver`)+ `P53InteractionPromptTests.fs` 9;链证据 `p60-p53-chain.txt`:far→prompt(`E 交谈`, `TalkTo (NpcId 0)`)→dialog→gone,提示只在邻近时出现、开对话即消失、关闭离开恢复 | — |
+| 7 | 玩家与可区分村民 | **已完成** | 玩家四向动画同 #3;村民可见性巡游 `Game.fs:170-184`(P25 路点);帧:`p60-day-dialogue-a/b.png` 屏内见村民与对话弹层 | — |
+
+## 端到端帧数字(`p60-analysis.txt`)
+
+- 黑块(24×24 全不透明 ≤8):**0**;白块(`check-no-white-blocks.py` MIN_SIDE=64):**0/7 failures**。
+- 字面「豆腐块(□)」:**0**(`Game.fs:73-92` 对缺字置空、绝不画伪字)。
+- 对话弹层 rect(P44):`(190,558,900,138)`,page 1/3 → 2/3,4 行/页,avatar=true。
+- 提示条 rect(P53):`(598,288,52,26)`,paint delta 44.55,restore delta 0.00 → PASS。
+
+## 缺口清单
+
+### A. 阻塞用户确认门
+
+- **G1 字形图集缺字 16 个(中文界面不完整)**
+ - 事实:运行时字形集为 `CjkGlyphAtlas.fs:14` 的 `characterTable`(307 字)。扫描全部 Desktop 源内用户可见字符串,缺:
+ `冬 包 卷 品 夏 料 春 玩 秋 第 背 车 轴 页 香 鱼`。
+ - 影响(真实 UI,缺字处为空白):
+ - 右上日历首行 `春/夏/秋/冬 · 第N天`(`HudLayout.fs:181`)→ 季节与「第」空白;
+ - 对话页脚 `第 %d/%d 页 … 翻页 …`(`Game.fs:2859`)→「第/页」空白;
+ - 交易/背包:`背包不足`、`背包里没有可卖物品`(`PlayerTrade.fs:190,238`)、热键 `V 卖出 背包物品×1`(`Interaction.fs:694`);
+ - 物品名 `鱼/卷轴/香料`(`Interaction.fs:272-274`)、`玩家`(`Interaction.fs:630`)、`回车:接受任务`(`Interaction.fs:714`)。
+ - 最小整改:把上述 16 字补入 `characterTable`(保持有序)并重新生成 `Assets/cjk-glyph-atlas.png` 与 `cjk-glyphs.txt`,再补一条「UI 字符串字符 ⊆ 图集」的回归测试。**未在本单实施。**
+- **G2 民居内景无游戏截图**
+ - 事实:`民居可进入` 功能与测试齐备,但 `docs/evidence` 无内景帧,用户无法做视觉确认。
+ - 最小整改:新增一条取证钩子(如真实 `EnterHome` 后拍整帧)或复用 autoplay 进屋,产出 `p60`/下一单的内景 PNG。**未在本单实施。**
+- **G3 逐帧 vision 可读性自审未执行(本 writer 能力限制)**
+ - 事实:本 writer 模型不支持图像输入;环境无 `tesseract`、无 `mmx`/vision CLI、无 vision API 凭据,无法对 PNG 做图像级可读性判断。
+ - 已用可复算的自动检查替代(黑/白块、rect 差、图集覆盖、帧统计),但**不能等同人工/视觉复核**。
+ - 最小整改:由具备视觉输入的验收者(Hermes vision 三层复核流程)或视觉能力 writer 对 `p60-*.png` 逐帧复核。**属流程阻塞。**
+
+### B. 不阻塞
+
+- **G4 长期逐日成本(P59 已记)**:M3 phase2 在 100 天视野的逐日成本上升未在 20 天窗口复现;与样板视觉确认无关,留档。
+- **G5 证据帧复用既有钩子**:因无 `LV_DEBUGGAME`,本单复用 P39/P44/P46/P53 钩子;若需「单一入口连贯录屏」,可另立一单做连续录制(非确认门必需)。
+
+## 复现
+
+```bash
+D=/tmp/lv-p60
+mkdir -p $D/{p46,p44,p39,p53}
+hook(){ timeout 150 xvfb-run -a -s "-screen 0 1280x720x24" env "$1"=1 LV_RECORD_DIR=$D/$2 \
+ dotnet src/LivingVillage.Desktop/bin/Release/net8.0/LivingVillage.Desktop.dll > $D/$2/log.txt 2>&1; }
+hook LV_P46_SHOT p46
+hook LV_P44_SHOT p44
+hook LV_P39_SHOT p39
+hook LV_P53_REC p53
+python3 scripts/analyze-p53.py $D/p53 docs/evidence/p60-p53-chain.txt
+python3 scripts/check-no-white-blocks.py docs/evidence/p60-*.png
+```
+
+(字符串字符覆盖与帧统计见本目录 `p60-analysis.txt` 的生成脚本概要;本单未新增脚本。)