- S2:新增input_open双音柔铃标记「能答了」边界(playback/input边界此前吞手势无标记) - S1/S3/S4:input阶段长按=状态查询(13句status_*分档整句:长度4档×进度4档×账目5档,两本账口径一致,不耗账不闭窗) - S5:announce/roundend非单击手势补error震(00 §5.4三秒反馈律) - S6 P0:gameover下滑进菜单→结算链死锁8.4s修复(结算看守+挂起补播) - S7:your_turn每局一次(原每轮重念) - 取证:live两会话+4人设评审,S清单见research/simon-polish/round1/findings.md - 验证:playtest 156/156 + guide 122 + 终检绿 + 14游戏回归零回退 + live复跑核对局14/14压力局8/8;状态感知2/5→4/5(四席同升),愿意玩改口为是 - 02号文档追加§9修订记录;新增input_open+13句status_*走完整TTS管线(flock串行QC无离群)
6.6 KiB
6.6 KiB
音序回响 round1 取证 · 状态维度候选清单(通读 game.js + 02 号文档)
阶段一第 1 步产物:把"玩家可能不知道自己在哪"拆成状态维度,逐维度对照 game.js 现有信号(语音/earcon/震动/静默)找盲区。最终 S 编号清单见 findings.md(带 live 证据)。
维度 1:当前轮次 / 本序列长度
- 现有信号:announce 阶段播
round_NN/round_more整句(game.js_nextRound)。 - 盲区:
- 轮次播报可单击跳过(
_tapSkipsVoiceannounce=true,12 号文档)——急性子玩家 从此失去轮次信息;序列长度 = round+1,长度信息也随之丢失(playback 期间不知 该听几个音)。 - 播报被跳/缺失兜底路径(2.5s 看门狗)同样没有轮次信息落点。
- 第 20 轮后只有"新的一轮"兜底,长度仍在涨,玩家对"还要记多少"完全无感。
- 轮次播报可单击跳过(
- 风险级候选:P1(不致命但全程迷失)。
维度 2:播放阶段 vs 答题阶段边界
- 现有信号:序列播完 400ms 后
CONFIRM震(game.js:348)+ 向导层turnearcon (guide=full/standard 才有);第 1 轮另有your_turn语音。 - 盲区:
- guide=off 时 turn earcon 静默(Guide no-op),非第 1 轮只剩一次 confirm 震;
- iOS 无震动(00 §2.5 静默降级)→ 第 2 轮起边界零信号;
- 占用预告句(gd_occ_*)插在 confirm 之后、input 之前:语音播完才
_toInput, 玩家听到"这一轮,向上滑是作答"时还不能答(phase 仍是 playback,手势被吞), 句尾与可输入时刻之间无任何标记。
- 风险级候选:P1(边界误答被吞 → 维度 6)。
维度 3:自己刚输入的音符是否被收进答案(逐音进度)
- 现有信号:input 阶段每手势即时回声放对应音色(game.js:421)+ 引擎内置识别震 (swipe/confirm)。
- 盲区:
- 回声 = "系统收到了",但**"对了几个 / 还剩几个"无任何信号**(无 X-of-N 进度 earcon/震动分档)。长序列(第 10 轮起 ≥11 音)复现中途断片时,玩家不知道自己 答到第几个音,只能从头再来或赌。
- 回声音色与答错音色的关系:答错的瞬间即触发 retry/gameover(有反馈),但 "当前已确认正确的进度"在复活重听后重置,玩家必须记住自己之前答到哪—— 实际上重听要求整轮重输(inputIdx=0),"我上次答对了几个"成为无效信息但 玩家并不知道规则是"清零重输"还是"接着答"(教学未讲)。
- 风险级候选:P1。
维度 4:答对 / 答错即时反馈
- 现有信号:整轮对 → success 震 + 表扬句(每轮);错 → error+warning 震 + retry_use(有机会)或 gameover 链(无机会)。
- 盲区:
- 对错反馈以整轮为单位,中途无逐音对错确认(设计使然,simon 经典规则); 可接受,但与维度 3 叠加放大迷失。
- iOS 无震:答错后 retry_use 语音前有最长 300ms 静默+无震,"刚才那下算数吗" 要靠语音第一句"错了。"兜底——可过。
- 风险级候选:P2。
维度 5:复活机会 / 免费重听余额(两本账)
- 现有信号:消耗时如实报(gd_chances_left1/left0/chances_out/chance_plus/retry_use)。
- 盲区:
- 余额不可主动查询:input 阶段六手势全是答题输入,没有 status key (space-polish P1 同款诉求)。账目只在"用掉那一刻"播报;记忆游戏脑负荷高, 隔几轮后"我还有几次免费/几条命"必然遗忘,而遗忘的代价是猝死或不敢重听。
- 答错自动消耗路径(retry_use)与主动重听路径分账,两账合计余额(免费+真机会) 从未作为整体报过。
- 风险级候选:P1。
维度 6:手势被吞(非输入阶段做手势)
- 现有信号:无。playback/announce/roundend 阶段手势静默忽略(game.js:154 default 分支;02 §4.1 裁定"播放期误触静默忽略,不给 ERROR 震")。
- 盲区:00 宪法 §5.4"做了手势 3 秒内必须有反馈"在此被设计豁免;急性子玩家在 播报/重听语音链期间作答零反馈(连吞数下都无声无震),既不知"被吞"也不知 "现在能答了没有"。round1 live 已有 P1 前科(答题阶段长按 9 秒零反馈→已修为 error 震兜底),但播放期/播报期仍是零反馈区。
- 风险级候选:P1(压力线必现)。
维度 7:连击 / 最佳纪录
- 现有信号:破纪录时
gd_record(局中,每局限 1 次)+ 结算new_record;best 存 localStorage/服务器,局内不报具体数值。 - 盲区:第 2 局起玩家不知道自己 best 是几轮;"离纪录还差几轮"无信号。 (simon 无连击概念,维度弱。)
- 风险级候选:P2。
维度 8:菜单 / 教学 / 结算阶段边界
- 现有信号:菜单逐项播报(menu_open/restart/home/back);教学逐音教-练; 结算五句链(gameover/score_band/new_record/replay/rules_prompt)。
- 盲区:
- 教学→对局过渡:t7 链播完静默直进 round_01,中间无标记("教学结束"信号 靠 round_01 本身承担,可过)。
- 菜单"返回游戏"回结算页后,rules 语音链可能仍在播(_speak 无守卫),此时 单击=重开(言行一致 P0 已修);但菜单内上滑听规则后双击确认项,选中项 与规则语音同时播,语义叠话(P2 瑕疵)。
- 风险级候选:P2。
维度 9:input 阶段静默(不知"系统在等")
- 现有信号:5s 看门狗 nudge + gd_relisten(占用轮只 nudge);25s turn+confirm。
- 盲区:guide=off 无看门狗(不挂定时器),挂机=永久静默(设计承认:"挂机永久 静默")。该维度在 guide 档内已覆盖,off 档是玩家自选,不另列。
- 风险级候选:不修(既定裁定)。
交叉观察(转写 transcript.md 预读)
- 行 64-75 / 90-95 / 105-113:复现全程只有回声 tone + 结尾 success 震;"已对上 k/N"只存在于 harness describe()(行 64「已对上 0/2」是剧本旁白,玩家听不到)—— 维度 3 的直接证据形态。
- 行 65-71:R1 静默 5s 只有 nudge earcon(占用轮无建议语音);非占用轮行 153-156 5s 即有 gd_relisten 语音——看门狗覆盖尚可。
- 行 136 / 162 / 190-191 / 251:机会/免费重听账目只在消耗/获得时播报(维度 5)。
- transcript 未覆盖 gameover/菜单/复活耗尽(剧本收工于第 7 轮边界)——由 live 局 A(打到高轮次+结算+菜单)与局 B(乱按压力线)补证。