Files
SoundGame/research/new8/dungeon/round3/h1-live-verify.md
T
xsl 45124a1b9b feat(new8): 批次1收口——radio/dungeon 双双标记可交付(R3 synthesis×2 + H1 热修 + 定向live复验PASS)
- radio:R3 放行(4/4 人设满分档 5/5、愿意玩、P0=0;live 四修坐实+SA3 真声入局)
- dungeon:R1 0/4→R3 4/4 翻案达成;H1 死亡结算链截断根修(真凶=双击窗幽灵 tap 死后回调路由进 SETTLE,800ms 手势死窗;7 断言含旧代码反证)+ 定向 live 复验 PASS(两局含 R3 同款幽灵场景,结算链 7 句逐句完整)
- 章程账本更新:批次 1 验收 ☑(R4-R6 经用户裁定暂停,视上手反馈续;v2 首条=漫游迷路抢救盲区)
- 断言账面:radio 246 / dungeon 1649 / 9 套件全绿
2026-09-03 03:01:45 +08:00

96 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# H1 热修定向 live 复验 —《回声地窟》(dungeon) 死亡结算链
> H1(死亡结算链同 tick 竞态根修 + SETTLE 800ms 手势死窗)交付后的定向 live 复验。红线遵守:未改任何游戏代码/资产/harness 代码。验证目标唯一:**死亡后结算链(die_intro 起约 7 句)完整有序播出,不再被幽灵手势截断;结算屏不再静默 76 秒;死亡瞬间的在途手势不再跳 TITLE。**
## 结论:**PASS(两局双确认)**
R3 P1 的两个触发面都复现了,旧 bug 都没有复发:
1. **主验证(局 1)**:挥空链在途时被窟主石甲蟹打死 → 结算链 7 句逐句完整播出(事件层 vend 全部 = 自然播完时刻,ASR 6 句 OK + 1 句已知短句误识),无静默。
2. **幽灵手势直接命中(局 2)**:致命前摇 1.2s 窗口内发出的 tap,其回调在死亡后 ~0.49s 才派发(正好落进 H1 的 800ms 结算死窗)→ 被吞掉,**结算链一句没少、没有被带去 TITLE**——这正是 R3 A 局 die_intro 播 0.18s 即死的同款输入,热修后不再复发。
---
## 基本信息与产物
- 会话(`web/harness/live/out/dungeon-20260902163908/`,四件套齐全:events.jsonl + verdicts.json + transcript.md + mix.webm;413 段语音 / 1271 手势 / audioDur 8285s,两局同一会话):
- settings:male / normal / normal / full;第一动作 tap 解锁。
- **局 1**:跳教学 → L1(踩楼梯下潜,到达即报正常)→ L2(清 3 鼠,导航接管带路)→ L3 → 清 3 蘑菇 → **被窟主石甲蟹(站在楼梯格)打死**。死亡时刻 ta=2395.05(会话内秒,下同)。
- **局 2**(交叉确认):结算 → TITLE → 新周目 → 重爬 L1/L2/L3 → 再战窟主 → **挥空链在途 + 致命前摇中发 tap(幽灵手势场景)** 被打死。死亡时刻 ta=8203.965。
- 报错:asset404=0、console.error=0、pageerror/unhandledrejection=0;**vend reason=preempt = 0**(413 段全部 reason=kill,引擎对"播完"的通用标注,R3 P3-1 已知仪器口径)。
## 主验证一:结算链句子清单(两局对照,t=会话内秒)
**局 1**(死亡 2395.05:被石甲蟹绕到背后一记重击打死 → 归因真话 die_cause_3 + die_adv_3):
| # | 句子 | vstart → vend | 时长 | ASR |
|---|---|---|---|---|
| 1 | die_intro 你倒下了。 | 2395.16 → 2396.62 | 1.44s(**满**) | OK sim 0.86 |
| 2 | die_cause_3 你背后的偷袭,要了命。 | 2396.72 → 2400.19 | 3.44s | **OK sim 1.0** |
| 3 | die_adv_3 身后有动静,先转身。 | 2400.29 → 2402.80 | 2.48s | OK sim 0.80 |
| 4 | st_floor_3 这是第三层。 | 2402.89 → 2404.36 | 1.44s | OK sim 0.89 |
| 5 | meta_gold_2 这趟带回一些金币。 | 2404.46 → 2406.89 | 2.40s | OK sim 0.80 |
| 6 | settle_stronger 下个周目,你会更强。 | 2406.99 → 2410.45 | 3.44s | OK sim 0.88 |
| 7 | settle_again 单击,再探一次。 | 2410.55 → 2412.42 | 1.84s | MISMATCH sim 0.2* |
*settle_again 为 harness 已知限制(≤6 字短句在 menu bgm 下的同音误识);事件层 vend 2412.42 = vstart+1.84s 自然播完,trunc=False。句间隔全部 ~0.10s,链条 2395.16→2412.42 连续 17.3s,无任何静默窗。**R3 现场(die_intro 只播 0.18s + 后 6 句零 fetch + 结算屏静默 76s)未复现。**
**局 2**(死亡 8203.965:挥空链在途 + 被石甲蟹正面重击未格挡打死 → die_cause_2 + die_adv_1,归因真话):
| # | 句子 | vstart → vend | 时长 | ASR |
|---|---|---|---|---|
| 1 | die_intro | 8204.06 → 8205.53 | 1.44s(满) | OK sim 0.86 |
| 2 | die_cause_2 你没挡住那记重击。 | 8205.63 → 8207.81 | 2.16s | OK sim 0.80 |
| 3 | die_adv_1 下次,前摇声响时就双击。 | 8207.92 → 8211.38 | 3.44s | OK sim 0.70 |
| 4 | st_floor_3 | 8211.48 → 8212.94 | 1.44s | OK sim 0.89 |
| 5 | meta_gold_2 | 8213.04 → 8215.46 | 2.40s | OK sim 0.80 |
| 6 | settle_stronger | 8215.56 → 8219.02 | 3.44s | OK sim 0.88 |
| 7 | settle_again | 8219.12 → 8220.98 | 1.84s | MISMATCH sim 0.2* |
链条 8204.06→8220.98 连续 16.9s,句间隔 ~0.10s。两局金币位同报 meta_gold_2(meta.gold 同账本,与上滑/TITLE 同函数,E1-2 口径未回归)。
## 主验证二:幽灵手势场景(H1 死窗的直击复验,局 2)
局 2 特意按 R3 触发条件编排(与 R3 A 局同款输入):
```
8199.398 GEST tap ← 挥空 tap(touchstart)
8199.861 btl_swish vstart ← 挥空链播出(2.9s,R3 同款"挥空链在途")
8202.764 btl_swish vend
8202.764 tel_heavy_r ← 致命前摇(1.2s 格挡窗)
8203.965 hurt ×2 + bgm/menu ← 致命一击落地,hp≤0,进 SETTLE
8204.061 die_intro vstart ← 结算链开播
8204.115 GEST tap ← ★幽灵手势 touchstart(在死亡瞬间发出)
8204.478 vibrate [20] ← 手势回调派发:死亡后 ~0.49s,落在 800ms 死窗内 → 被吞
8205.526 die_intro vend ← 1.44s 自然播满(R3 此处是 0.18s 即死)
8205.630 die_cause_2 vstart ← 后续 6 句照常逐句播出
...
8220.983 settle_again vend ← 链条完整收尾
```
幽灵手势的回调派发(8204.478,死亡后 ~0.49s)落在 `SETTLE_GRACE_MS=800ms` 死窗内被吞掉:die_intro 照常播满、结算链没有作废、**没有跳 TITLE、没有开出新周目**。死窗后结算手势恢复正常(见出口验证)。这正是 H1 注释里描述的"非即时模式单击要等双击窗(300ms)关闭才回调"的竞态现场,热修后行为正确。
## 出口验证(两局)
- **局 1**:结算链播完(2412.42)后单击 → 2584.23 tap → 仅手势震动、无任何语音、无 bgm 切换(settle→TITLE 本就同曲)、无 sys_new_run = 静默进 TITLE ✓;随后再 tap → 2599.60 `sys_new_run` 正常开出新周目(drillDone 生效不再进教学,与 R2/R3 口径一致)✓。
- **局 2**:结算链播完(8220.98)后单击 → 8368.12 tap → 同样静默进 TITLE,无任何异常播报 ✓。
- 死亡 800ms 死窗之后 tap 恢复正常路由("离开结算"),死窗只吞在途手势,不影响玩家后续输入 ✓。
## 顺带回归观察(非本轮范围,顺路确认)
- **零抢占零死锁**:413 段 vend reason 全 =kill,preempt=0(R1 35,611 → R2 0 → R3 0 → 本次 0,四轮干净);全事件空窗 >25s 的 12 处逐一归因,全部是玩家侧(本 agent)分析停顿/有意静置(含局 2 L3 找路的长静置),期间看门狗(gd_turn / 导航接管 / 环境垫)按设计照常说话,无一处游戏卡死。
- **30/60/90 无进展阶梯**又双_samples:局 1 L2(1487.8 earcon → 1517.9 stair_hint_a → 1547.9 nav_s)与局 2 L3(5288.7 → 5318.8 stair_hint_b → 5348.8 nav_s)两级实测,严丝合缝;导航接管每步重报正常。
- **到达即报(E1-1)**:局 1 L1/L2 楼梯(ta 904.4 / 1726.1)与局 2 L2 楼梯(1726 对应局 2 的 3723.7)踩格自动 echo_1+mat_stair+「楼梯就在脚下」均正常。
- **归因真话律**:两局死因句与实际死因一致(局 1 背刺 → die_cause_3/adv_3;局 2 Boss 未格挡重击 → die_cause_2/adv_1),R2 D1-5/E1-2 的死亡链金币句(meta_gold_2)两局都拿到了现场收据(R3 时因 P1 丢失)。
- 唯一 trunc 标记:`btl_no_turn`(局 1 L3,1841.1)——玩家在纠错句播出中立刻做了下一个手势导致的让位,教学向短句、非结算链,与 H1 无关。
## 仪器与过程备注(透明度)
- 局 2 找窟主时,因逐格推算在 9×9 层反复漂移,用**第二 CDP 客户端只读**了一次 localStorage 存档(seed/pos/face/hp——与 R3"第二 CDP 客户端"同类的仪器手段,未写入任何状态),并把 game.js 的楼层生成算法原样转录到本地脚本算出楼梯格(窟主就站在楼梯格上),再通过正常手势流走到位。全程未改代码/资产,游戏侧只收到标准手势事件。
- harness 长按固定 ~600ms、单击回调带 300ms 双击窗延迟——正是 R3/H1 的竞态土壤,本次在局 2 中被直接用作测试注入。
- speed 枚举仍只接受 1/0.3/0(R3 P3-2 未修,非阻塞)。
## 一句话裁决
**H1 热修定向复验 PASS:两局死亡(含"挥空链在途 + 致命前摇中发 tap"的 R3 同款幽灵手势现场)结算链 7 句全部完整有序播出、句间隔 ~0.1s 无静默、在途 tap 落进 800ms 死窗被吞、出口单击干净进 TITLE/再来一局——R3 唯一阻塞项销案,dungeon 可交付。**