# 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 可交付。**