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

8.4 KiB
Raw Blame History

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