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 套件全绿
This commit is contained in:
xsl
2026-09-03 03:01:45 +08:00
parent f7509ad5d8
commit 45124a1b9b
11 changed files with 464 additions and 3 deletions
@@ -0,0 +1,95 @@
# 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 可交付。**
@@ -0,0 +1,72 @@
# 《回声地窟》R3 live 确认局报告 — 老陈(认真局)+ 急躁压力局(收口验证)
> R3 轮次协议第 3 步:dev 交付 E0-1/E0-2/E1-1/E1-2 + 打磨项后的 1 局 live 确认。红线遵守:未改任何游戏代码/资产/harness 代码;乱按局抢救触发时刻均给 t=(录音时基秒)。
## 基本信息
- 身份:老陈,R2 同款细心中年玩家,认真局走完「新手弧线」;另一局换急性子表弟小飞代打乱按压力局。
- 设置与会话(`web/harness/live/out/` 落盘,events.jsonl + verdicts.json + mix.webm + transcript.md 四件套齐全):
- **局 A0**(意外收获局)`dungeon-20260902150137`:male/normal/normal/full。本想在 D1 教学步停顿读一下说明书,静置 92 秒——被 E0-2 接管当场滚出教学。这个「事故」成了 E0-2 的第一份 live 证据,遂保留。
- **局 A**(认真主局)`dungeon-20260902150633`:male/normal/normal/full。因 A0 的自动滚出把 `drillDone` 写进了存档,本局直接跳教开局(恰好覆盖「跳教学路径」);跳教 → L1 → L2 → L3 → Boss 战死亡 → 结算 → 新周目。206 手势,266 段语音事件。
- **局 B**(乱按压力局)`dungeon-20260902155741`:female/full。**注**:settings 传 `"speed":"1.7"` 被引擎规整为 `1`(本 harness 的 speed 枚举是 1.0/0.3/0,R2 的 1.7x 语速通道本次不可复现——仪器侧,见 P3-2),故 B 局是「同速乱按局」而非 1.7x 局;E0 断言全部依赖事件层时基,不受影响。
- 手势统计:A0 = 4;A = 206(tap/longpress/swipe×4/doubletap 全用,另用第二 CDP 客户端补了 2 次 1300ms 裸长触,仅仪器手段、未碰代码);B = 56(乱按:longpress/双滑/双击/上滑混撒,刻意不含下滑=跳教学,把「滚出教学」留给看门狗)。
- 报错:三会话 `asset404=0、pageerror/unhandledrejection=0、console.error=0`;**`vend reason=preempt` = 0**(R1:71 分钟 35,611 次;R2:0;R3:0,连续两轮干净)。
---
## R3 修复逐条现场验证
| # | R3 修复 | 结论 | 现场证据(t=会话内秒) |
|---|---|---|---|
| **E0-1** | 看门狗双轨(无进展轨 30/60/90s:earcon→短句→导航接管;只由状态推进重置) | **修好(两局双确认,阶梯逐级实锤)** | **A 局**:最后进展=1010.5(走格)→ earcon(confirm 震+tick)**1034.8**(+24s)→ `stair_hint_a` **1064.9**(+54s)→ **`nav_s` 1094.9**(+84s,=90s 档 + 5s 轮询粒度);期间脉冲/手势不断但零进展,无操作轨被喂饱照样升级——「乱按不再饿死」直证。**B 局**复现:杀怪进展 ≈486 → earcon **517.6** → `stair_hint_a` **547.7** → **`nav_e` 577.7**,30/60/90 三档严丝合缝;导航模式下每走一步重报(**2494.1** step→`nav_e` 随步重指)+60s 周期重报(1094.9→1154.9→…→2438.5,严格 60s)与 R2 L3 带路口径一致。「有真实进展不误触发」:A 局 1094.9 接管后我一路走格/打怪推进,全程无 earcon/短句误发;B 局 697-718 走格+撞墙期间同样零误报,只有随步 nav 重指。**
| **E0-2** | 跳教学路径:教学态同享无进展轨,90s 接管=自动滚出教学;跳教后 120s 内必有遭遇或指向语音 | **修好(两条退出路径都验到,且跳教后 6 秒即有遭遇)** | **路径①(A0 局,静置型)**:D1 教学步零输入静置,最后进展 80.7 → **`tut_skip` 172.4(+91.7s)** 自动滚出教学进探索——「R2 的 39 分钟」vs R3 的 92 秒。**路径②(B 局,乱按型)**:小飞从 TITLE 起乱撒非下滑手势,教学被「两次做错自动演示通过」快速推进(`tut_front_rule` 59.7 → `tut_side_rule` 65.9 → `tut_walk` 71.7 → `tut_turn` 80.9 → `tut_replay` 102.8 → `tut_status` 111.3 → `tut_mob` 117.8),卡在 D9 寻路步后:`stair_hint_a` **171.6** 与 **194.4** 两次短句 → **`tut_skip` 224.4(最后进展 129.6 走格 + 94.8s)** 滚出教学。**跳教后密度**:`tut_skip` 228.7 播完 → **230.3 蝙蝠扑击接战(+5.9s)**,远优于「120s 内必有」断言(A 局跳教开局 62.7s 也已有 mob_step 逼近、71.4s 接战)。**
| **E1-1** | 踩上楼梯格「到达即报」:自动贴身铁器回声 + 下行提示,不靠玩家脉冲;tap 下潜照常 | **修好(两个干净样本 + 脉冲射线报铁器也活着)** | **样本1(A 局 L1,误打误撞全程录到)**:519.27 longpress 踏上楼梯格 → **同一拍自动 `echo_1`(519.72)+ `mat_stair`(519.84)+ `tut_stairs_on`(519.82,「楼梯就在脚下。单击,下潜。」)**,零玩家脉冲输入;523.78 tap → `stairs_down`+`evt_descend`(3.12s)+`st_floor_2`,下潜演出照常。**样本2(A 局 L2,刻意复现)**:1371.66 脉冲先听到 `echo_1`+`mat_stair`(正前射线铁器回声,R2 D0-2 的「相邻格兑现」同时活着);1377.47 踏格 → **自动 `echo_1`+`tut_stairs_on`+`mat_stair` 三连**;1382.04 tap → 下潜 `st_floor_3`。教学 D9「听到铁器回声再走过去」的承诺第一次在输入层无死锁地兑现(R2 P1-1 当场销案)。**
| **E1-2** | band1(0<金<50)新句 `gold_some`「带回来一点,不多」,上滑/结算/TITLE 同账本同分档 | **修好(含 0 金对照,全表面零谎报)** | **A 局上滑**:杀怪入账后 meta.gold=6/11/21 三次上滑状态链金币位全部播 **`gold_some`**(250.9,ASR「带回来一点不」sim 0.92;642.5 附近 B 局亦同);金到 ≥50 后同一条链换 **`st_gold_2`「有些积蓄」**(2545.9)——同一分档函数随账自动升档。**0 金对照(B 局开局)**:129.6/144.5 金币位播 `st_gold_1`「口袋空空」——0 金说空手、少量说「带回来一点」、攒多说「有些积蓄」,三档句句真话,R2/P2「捡到金币→口袋空空」的谎报结构已消除。**结算/TITLE 表面**:A 局死亡结算链因新 P1(见下)在 `die_intro` 即断,`_metaGoldVoice` 的死亡链样本未能采到;TITLE 面亦未访问——但状态链已实证同一 `_goldBand/_stGoldVoice` 出口(与 SETTLE/TITLE 共函数),代码面单出口 + live 面三档真话,判修好,仅欠一张死亡链的现场收据。**
| **打磨** | 战斗逃跑长按需按满 900ms;短松(<900ms)=取消+区分提示「想逃跑,按住别松手」 | **修好(两半都实测)** | **短松取消**(harness 长按固定 600ms<900ms):A 局 570.4 → error 震 `[60,40,60]` + **`tut_flee_hold`**(「想逃跑,按住别松手」,ASR「抢逃跑,按住别怂」sim 0.67)✓;且每场战斗只播一次(同场第二次 528.2/1528.8 只震不播,1519.7 新战斗重播——按设计);B 局 2011.7 第三次独立战斗同款复现。**按满真逃**:第二 CDP 客户端裸触 1300ms(仪器手段)→ A 局 682.5 **`btl_flee`**「必成挨一下」(hurt 音随行)+ BGM 战→explore 立即回切 ✓。**Boss 禁逃**:L3 石甲蟹战裸触 1300ms → 2715.3 **`btl_flee_boss`「退路塌了,跑不掉!」sim=1.0** + 纠错震 ✓。**
| **整体** | 教学→2-3 层→战斗→死亡→结算→新周目,零死锁零抢占 | **基本通过(一处 P1 见下)** | 三会话合计教学 D0-D9 全步骤台词齐(A0+ B 覆盖);A 局 L1→L2→L3 三层全走(两跳楼梯全是「到达即报」接「单击下潜」);战斗 9 场(蝠×4 鼠×3 蘑菇×3 石甲蟹×1,含格挡成功 `btl_parried`、击杀升档 `btl_lvup`×2、自动侧移报位 `mob_step_heavy_r`、挥空真话 `btl_swish`「挥空了,他不在你面前」);死亡一场(Boss 重击)+ 结算 tap 直接开出**新周目**(`sys_new_run` 2864.1,且因 drillDone 不再进教学,与 R2 口径一致)。**零抢占**:三会话 vend reason 全部 =kill,preempt=0;**零死锁**:三会话最大事件空窗逐一归因——A 局 92.7s/91.6s 均为本玩家读代码静置、76.0s 即下述 P1 结算中断;B 局 207.5s 为下述 P2 战斗静置——无一处是游戏卡死。**
## 局 A 体验叙述(验收视角,第一人称)
跳教开局后上滑第一件事就是听金币位——上一轮还嘴硬「口袋空空」,这局捡了 3 金就改口「带回来一点,不多」,账本子终于说人话。L1 的蝙蝠扑上来,我手一慢吃了下 ACK,反手两刀放倒;第二只扑进来把我上滑状态链拦腰打断——遭遇优先级最高,这个「没礼貌」是对的。真正的高潮在 519 秒:我随手一个长按,脚下突然自己响起贴身铁器回声+「楼梯就在脚下,单击,下潜」——**上一轮我用尽办法都听不到的这句教学承诺,这一轮是踏上去自动送来的**。L2 重复了一遍(这次我先脉冲听到了正前方的铁器尾音,再踏格、再听一遍到达即报),L3 卡了会儿路,干脆静坐——24 秒后 earcon、54 秒短句、84 秒导航接管准时点名「往东」,导航模式每走一步重报下一步,把我一路带到石甲蟹脸上。Boss 战里短按长按被「想逃跑,按住别松手」劝住,真按满一拍被「退路塌了,跑不掉!」拒绝,两刀换位脚步报位、挥空播「他不在你面前」,最后被重击放倒——**然后结算链只说了半句「你倒下了」就哑了**,结算屏静坐 76 秒直到我自己单击开出新周目。这是本局唯一一次游戏「说到一半闭嘴」。
## 局 B 体验叙述(小飞乱按:非下滑混撒)
小飞不识字也不听课:教学 D0-D7 被他的胡乱输入用「两次做错自动演示」一路买通(每步 ~10 秒),卡在 D9 找楼梯时彻底躺平——17 秒后游戏开始喊「找找铁器的回声」,两遍之后一脚把他踹出教学(tut_skip),6 秒后蝙蝠扑脸。进了战斗他又躺平:15 秒一次「轮到你了」喊了一轮之后就再没人理他(见 P2)。他惊醒后乱拍了几刀拍死两只蝠,然后原地脉冲装死——30 秒 earcon、60 秒短句、90 秒导航接管全套准时上演,比 A 局那个假装的「新手」还标准。0 金时状态链老实说「口袋空空」,乱拍捡了 6 金立刻改口「带回来一点」——账本子对乱按党也不撒谎。
## 新问题清单
### P0
无。R2 收敛出的 P0(看门狗饿死)在本轮双局三场景(静置/乱按/导航中推进)全部按新阈值工作。
### P1(功能失效/设计违约)
1. **死亡结算链在 `die_intro` 处截断,后 6 句全部未播,结算屏静默直至玩家输入**(A 局 2786.88)
- 现场:被石甲蟹重击放倒瞬间,`die_intro`(dur 1.44s)只播了 **0.18s** 即被杀(event 层 vend 2787.06 + ASR verdict `TRUNCATED sim=0`「我。」双证),其后 `die_cause_2`/`die_adv_*`/`st_floor_3`/金币档句/`settle_stronger`/`settle_again` **零 fetch 零 vstart**,结算屏 76.0s 无任何事件(事件空窗榜第 3 位),直到我 2863.7 单击直接开出 `sys_new_run`;
- 后果:**归因真话律的死亡链(你死于什么/下次怎么办)在本局一个字没播**,E1-2 的死亡链金币句样本也随之丢失;新周目只能靠玩家盲点结算屏;
- 嫌疑:死亡瞬间与挥空链同 tick(2782.7 `btl_swish` speakGuarded 链未清 + 2786.7 致命 tel_heavy 同窗),竞态杀掉了 `_speakGuarded` 结算链;R2 两场死亡全链逐句播完,本条按回归嫌疑处理,建议 dev 用「挥空瞬间被打死」复现;
- 缓解事实:点击结算屏仍能正确开新周目,不卡死。
### P2(不适/可疑)
1. **战斗中完全静止(不出招也不乱按)超过一轮提示后彻底安静**(B 局 248.8 → 456.3,实测事件真空 207.5s):战斗看门狗只有 15s `gd_turn`+30s tick 两级,之后 disarm;代码面 `_stuckCheck` 仅在 EXPLORE/DRILL 态运行,无进展轨不进战斗。设计逻辑自洽(乱按会推进战斗回合=进展,不该升级),但「吓得僵住不动」的玩家在战斗里喊一轮「轮到你了」后无人再理——还好回合制敌人也不主动出拳,无实际伤害,体感空。建议:战斗态静止 60s 后重复 `gd_turn` 或补一句战斗提示。
2. **导航接管与随步重指短窗叠加**(A 局 2494.1 与 2498.5,4.4s 内两条 `nav_e`):随步重指 + 60s 周期重报在同窗相撞,`NAV_MIN_GAP`(1.5s)拦不住。 harmless 但听着重复,建议周期重报与随步重指共享节流窗。
### P3(建议/仪器)
1. **`gd_pulse` 被遭遇打断时 vend reason 仍记 `kill`**(A 局 71.2-71.38,verdict TRUNCATED sim=0):引擎把「抢占让位」也走 `_killVoice`,探针 reason 字段分不出「播完」与「让位」——本局语义正确(遭遇优先),但仪器口径上 R2 的「reason=preempt 计数」可能漏计这类正常让位,建议 vend 增加区分原因。
2. **harness speed 枚举不接受 1.7**:`{"speed":"1.7"}` 被规整为 1,R2 的 1.7x 语速+ASR 盲区压力通道本轮不可复现(仪器侧,未改 harness)。
3. 未覆盖的 R2 已验项未重测(非本轮范围):自动喝药、D9 教学看门狗 30s `stair_hint_a`(B 局在真实 D9 中已顺带复现 171.6/194.4)、菜单首项播报。
## 做得好的地方(实话实说)
- **30/60/90 无进展阶梯是精确的**:两局四个场景,earcon→短句→接管的间隔全部落在阈值+轮询粒度内;且「任何手势都不重置无进展轨」真的做到了——我一边脉冲一边读秒,它照样按点升级。
- **「到达即报」是本轮最动人的修复**:R2 那句我一辈子听不到的「楼梯就在脚下」,现在踏上去就自己响,还带贴身铁器回声;同时脉冲射线报铁器的老路没被拆掉。
- **两条教学退出路径都是活的**:静置 92 秒被请出去,乱按卡 D9 也被请出去,跳教后 6 秒就有蝙蝠来面试——E0-2 的两个断言全都不是压线过。
- **逃跑三态干净利落**:短松=取消+一句教学补课(每场一次不烦人)、按满=真逃挨一下、Boss=拒绝回执 sim=1.0。
- **金币账本三档全真话**:0 金「口袋空空」、少量「带回来一点,不多」、攒多「有些积蓄」,上滑一条链随账自动换档,A/B 两局互为对照。
- 连续三轮(R1→R2→R3)`preempt` 从 35,611 → 0 → 0,风暴没有复发。
## 一句话裁决
**R3 四条修复全部在真机上兑现——看门狗终于长了一张按 30/60/90 秒准时报事的嘴、教学留不住赖子也困不住新手、楼梯一踩自己报、金币账本三档全真话、逃跑长按有了手感——唯独死亡结算屏在 Boss 战说了一半「你倒下了」就哑火 76 秒(新 P1),把这条修顺,dungeon 就是可交付状态。**
+24
View File
@@ -0,0 +1,24 @@
# P1 视障资深玩家评审:《回声地窟》(R3 终审)
> 评审依据:research/new8/dungeon/round3/transcript-main.md(806 行全读:教学→L2→L3→Boss 死亡→归因链→新周目,含跳教学二周目开局)+ transcript-stress.md(实际 5080 行,任务书写 4729——按实际材料评审:前 800 行全读,另全读 t+3716 抢救句段(3795-3854)与 t+4506-4524 死亡/收尾段,并对全卷做语音清单全量去重计数、关键 id 计数、L2 流浪窗(t+950-4380)分区统计)+ round2/p1-blind.md(我自己的 R2 意见与条件)+ docs/design/16-dungeon.md §R3 修复回归(dev 声明,只作对照不作耳证)。round3/ 无 live-player.md,全部结论出自转写耳证。
### 回声地窟
- 状态感知:4/5(保持,分数没动、内容换血)—— main 局已接近满分校:下潜演出四件套、BGM 纪律(战曲每场退,t+52.8/145.5/158.6/224.6/240.7;boss 曲 t+252.3;死亡切 settle)、上滑五段链随叫随到,新增的到达即报(t+119.3/176.4「楼梯就在脚下。单击,下潜。」+mat_stair)是三轮里最好的新信息源。扣分照旧三笔,都是旧账:一是教学 D9 乱按 764 秒(t+52.5→816.8)只有每 8 秒一对 nudge+watchdog earcon(93 对,0 句人话)——滴水刑刑期从 R2 的 39 分钟减到 13 分钟,但刑具没换;二是 152 次 bump 零归因;三是 main 死因句仍与我的耳朵顶牛(t+290.0「你背后的偷袭,要了命。」vs t+286.6 正面 tel_heavy 前摇 1.2 秒后打死我,全程只有 mob_step_heavy_r/tel_heavy_r 右侧事件,没有任何「背后」——详见建议 2)。
- 下一步明确性:3.5/5(R2 3/5 → +0.5)—— 加的 0.5 有实据:到达即报让「找到楼梯」从碰运气变成一定知道(两次下潜 main t+119.8、stress t+817.3/4312.0 都是踏格即报即下);金币账说了人话(band1「带回来一点,不多。」main t+296.3/304.8 + stress 11 处,过 50 升「有些积蓄」7 处,band0 只在 TITLE 新档 t+0——R2 那个「捡到金币→口袋空空」的谎死了);L2 入口密度保底兑现(t+823.7 进层,t+830.7 首遭遇,7 秒;2 分钟 5 场)。没给满的原因也硬:抢救升级对「边走边迷路的人」仍然基本不开口——L2 乱走 46 分钟(t+937→3716)全部抢救产出是 14 声 turn_tick 加 1 句「找找铁器的回声,那是楼梯。」(t+3716.5,带 warning 震),导航接管(最短路首步)整局 0 次;「跳教学 90s 自动滚出」在零位移断言场景成立,在乱按剧本的现实里没发生(详见条件核验 4)。
- 愿意继续玩:是 —— 主线弧线三轮下来第一次让我觉得值得反复按:main 一命全弧 307 秒干净跑通、死得明白(压力局归因句「你没挡住那记重击」是真话)、账目分毫能平、到达即报补上了教学承诺最后一口气。我 R2 的条件「把看门狗的嘴装上」兑现了一半——嘴装上了,t+3716.5 真的出过声;但牙口只对原地不动的人生效,这半口挂 v2,不影响我把票投给可交付。
- P0 问题:无(R3 零新账)。R2 那条 P0「迷失抢救只会响、不会说」降级为遗留 P1:恶意程度从「39 分钟 0 句 + 2223 秒无语音窗」收敛到「13 分钟滴水 + 46 分钟 1 句」,且升级管线被证明确实通到人话(t+3716.5;战斗里更是随叫随到——main t+278.5「轮到你了。单击挥击。」)。旧账三笔仍在我账本上盯着,不重复立案:教学滴水(t+52.5→816.8)、死因句说谎(main t+290.0)、空口脚步播报(stress t+357.1/488.9/597.2/782.2,见建议 3)。
- 建议:
1. 无进展轨的重置口径再退半步(我 R2 条件的最后一步):现在「格位置变化」就算进展、就重置轨道——可「一直在动手的迷路者」恰恰一直在变位置,这正是 R2 漏的那个洞。把重置条件收成「离楼梯距离缩短 / 拾取 / 战斗回合 / 下潜」,位置横跳不算——乱走的人才能攒满 30/60/90 秒,短句和导航接管才会在他迷路的第 1 分钟而不是第 46 分钟开口。
2. 死因句从真实致死前摇取材(R2 建议 2 原样奉还,两轮零进展):main t+286.6 正面 tel_heavy 前摇 1.2 秒后打死我,t+290.0 却报「你背后的偷袭,要了命。」;压力局同一句槽播的是真话(t+4520.1「你没挡住那记重击」——零格挡,真)——说明这条管线会写真话,把 main 这句也接上真前摇。顺带把 152 次 bump 的归因句接上,撞墙不该是全场唯一哑掉的失败。
3. 远距威胁播报收口(R2 建议 3 原样):stress 四处「右边有脚步声」(t+357.1/488.9/597.2/782.2)耳边零 mob_step——声音没到就别宣称有脚步。main t+309.0「左边有脚步声」与 mob_step_small_l 同拍,证明声画同达做得到,收紧触发半径即可。
#### 条件满足核验(我 R2 交代的是「把看门狗的嘴装上」,连同本轮四件套逐条验)
1. **E1-1 到达即报 → 兑现。** 四次楼梯到达全部踏格瞬间播报:main t+119.3/176.4、stress t+816.8/4257.5,句+mat_stair 齐到,单击照常下潜、不占输入通道;L3 接近段 echo_3→echo_2+mat_stair 收紧链(main t+198.1-205.3)让「铁器=楼梯」在到站前就能听出来。教学 D9 那句承诺两轮欠账,这回连本带利。
2. **E1-2 band1 新词 → 兑现。** 「带回来一点,不多。」上滑/SETTLE/TITLE 三处同一管线(main t+296.3/304.8;stress 11 处);金币过 50 后升「有些积蓄」(stress t+1131.8 起 7 处,随拾取与鼠 loot 爬升,账跟手);band0「这趟没带回什么。」只在 TITLE 新档(t+0)。R2 那 27 次「口袋空空」谎报绝迹。
3. **E0-1 看门狗饿死 → 半兑现。** 升级管线的零件都在且真的通到人话:L2 t+3716.5 stair_hint 短句+warning 震是 75 分钟压力局里唯一的探索态人话(R2 是 0 句);战斗看门狗会说话(main t+278.5)。但无进展轨由「格位置变化」重置——乱按剧本全程在走,教学 764 秒 93 对 earcon 零升级、L2 乱走 46 分钟 1 句提示、导航接管 0 次。断言绿的是「零位移乱按」场景,我 R2 点名的是「一直在动手的迷路者」——这个人现在还是几乎得不到句子。嘴装上了,牙口没长齐。
4. **E0-2 跳教学 90s 自动滚出 → 半兑现。** 「教学乱按零进展 ≤95s 滚出」在零位移场景成立(dev 断言,我无耳证渠道);乱按剧本的现实是教学从 t+52.5 困到 t+816.8 = 764 秒,tut_skip 全场 0 次——比 R2 的 2403 秒好得多,但这回是自己摸到楼梯、被到达即报送出去的,不是被 90 秒的逃生门放出去的。跳教学密度保底:L2 入口 7 秒首遭遇、2 分钟 5 场 ✓;但一周目没 skip、二周目刚开局就收工,「跳教学后 120s 内必有指向语音」我无从耳证,挂账待真机。
#### 三套信息一致性(终检,我的招牌专节)
1. **回声 vs 空间:过。** main 全程 pulse-移动对账无一矛盾:echo_1 贴脸墙→t+15.8 bump;echo_4 远墙→t+61-69 畅行;侧向开口语义两局在线(stress side_open 602 次/side_wall 238 次);L3 楼梯接近 echo_3→echo_2 配 mat_stair 收紧(t+198-205);到达档 echo_1+mat_stair 编码与脉冲贴身档一致(t+119.3)。R1 的「两态节拍器」与 L3 漂移彻底绝迹。
2. **脚步 vs 播报:主线过、压力局欠。** main t+309.0「左边有脚步声」↔ mob_step_small_l 同拍,声画同达;heartbeat 守 ≤2 格口径(main t+129.4/132.1/134.4)。残留两笔:stress 四处空口「右边有脚步声」(耳边零 mob_step,见建议 3);L2 乱走 46 分钟 33 声 mob_step 纯伴舞、0 遭遇——密度下限仍只保主路径,迷路者的世界从「有滴滴伴奏的真空」升级成了「有一句提示伴奏的真空」。
3. **播报内部:账全平,一句台词说谎。** 上滑五段链两局 60+ 次随叫随到;金币三档(band0/1/2)跨拾取、跨消费、跨死亡逐笔能平;死亡归因压力局全真话(t+4520.1「你没挡住那记重击」+t+4522.2「下次,前摇声响时就双击」,零格挡属实);main 局死因句仍说谎(t+290.0,见建议 2,两轮旧账);settle 链在 stress 被玩家自己的重开单击掐尾(t+4522.2 die_adv 与「新的探窟」同拍)——自己的手,不记游戏账。
+26
View File
@@ -0,0 +1,26 @@
# R3 Synthesis —《回声地窟》(dungeon)
> 产品裁定(批次验收收口轮)| 证据源:R3 真机确认局(round3/live-player.md:六项验证全兑现,三会话 preempt=0 零死锁)+ 4 人设终审(P1 4/5、P2 4.5/4、P3 4/3、P4 4.5/4.5——全员愿意玩,无 P0)
## 1. 验收门裁定:**有条件通过——P1 热修后交付**
- 章程门槛(≥3/4 人设愿意玩 + 无 P0):**4/4 愿意玩,P0=0**。R1 0/4 → R2 4/4 翻案 → R3 全员维持并升分,翻案弧线完整。
- 真机六连验:看门狗 30/60/90s 三级严丝合缝(两局双实锤)、跳教学 94.8s 自动滚出+5.9s 后即有接战、到达即报两样本、band1 三档句句真话、逃跑 900ms 教学句、Boss 退路句 sim=1.0。
- **唯一阻塞项(live 新 P1)**:死亡结算链在 `die_intro` 截断 0.18s、后 6 句全断、结算屏静默 76s(疑与挥空链同 tick 竞态,回归嫌疑)。死亡结算是一次 Roguelike 的情绪核心与元进度入口,**必须热修**。
## 2. 热修裁定(H1,本轮内完成)
- **H1 死亡结算链截断**:根修同 tick 竞态(死亡链与战斗收尾链互掐);加回归断言(死亡瞬间正在播挥空/命中链时,die_intro 及后续 6 句完整播出);playtest 全绿后做**定向 live 复验**(专门快速打一场死,验证结算链完整+结算屏不再静默)。
- H1 完成即标记 dungeon 可交付,进入用户上手体验。
## 3. 遗留(非阻塞,v2 候选)
- **漫游型迷路抢救盲区(P2/P3 独立定址,P1 附议)**:无进展轨把「位置变化」算作进展,纯漫游(L2 46-57 分钟)刷不响升级。修法方向:进展定义改为「向楼梯梯度下降/新区域发现」,或漫游累计距离单独成轨。**v2 第一条。**
- 「楼梯方位半句」(P4):到达即报已兑现,方向词(东南角类)留 v2。
- 战斗完全静止 15s 后 207s 静默(live P2);nav 重报 4.4s 短窗叠加;vend reason=kill 吞掉让位语义。
- 仪器:speed 1.7 harness 不可用、探针通道隔离、R2 已验项抽检策略。
- 人测项(roadmap §4):amb_cave/arg_muffled 听感、2.2x 语速、真机震动手感。
## 4. 后续
H1 热修完成后 dungeon 冻结功能面,与 radio 一起进入用户上手体验;其「脉冲回声核心动词 + seed 生成 + 元进度遗产」模式与「双轨看门狗」沉淀为模式款模板(批次 2 的 detective/teahouse/bridge 按需取用);漫游抢救漏洞列入批次 2 引擎层改进清单(若确认为引擎 guide 通用语义则在批次 2 首游戏前修)。