Files
SoundGame/research/hunt-sim/analysis/01-numeric.md
T
xsl 0652c2f0e6 research(hunt-sim): 10 人并发在线模拟×多 agent 设计迭代——研究设施与全套档案
研究命题(00-plan):验证并打磨《围猎》联机纯音频体验——不是逻辑能跑通,
而是真人玩起来是什么体验、愿不愿意再来一局。

设施 web/harness/hunt-sim/(可复用,零依赖):
- arena.mjs 编排器:起真实服务器(随机端口+临时数据目录隔离),10 个拟人客户端
  经真实 WS 同时在线,错峰组队、真实时长对局、局间状态跨轮维护
- sim-client.mjs:game.js 行为移植(协议+手势路由+R1-R8 音频调度逐字节对齐),
  产出「玩家耳朵听到什么」的感知时间线(语音全文/loop 方位音量档/喊话/震动)
- brain.mjs:人设大脑——察觉延迟/前后判读(以真值为条件的正确率模型)/掩蔽放大/
  冷却乱滑/技能囤积/呼喊倾向/分心断网,全部随机判定用按实体 id 哈希的独立抽签
  (mulberry32 流会被刷怪座位轮转结构带偏,实测造成系统性镜像反转,已证伪)
- recorder.mjs:每人每局 events.jsonl 全量 + percept.md 感知转写 + 对局速览

研究档案 research/hunt-sim/:
- players/:10 人配置(LLM 亲笔)+策略自述+逐局去留决策+人设终评+退游者重访
- rounds/:v1 三轮(R0 教学+R1/R2 真人快速)+ v2 复测两轮,共 48 局全记录
- analysis/01-04:数值曲线/音频信息设计/协作社交/上手留存四视角报告
- synthesis.md(S1-S9 裁定)、metrics.md/metrics-v2.md(两版对比总账)、report.md(总报告)

v1 核心发现:10 人 3 轮 28 局 100% 胜率 26S/营地零损耗;击杀垄断(专家单人 30/39);
呼喊 3 次/28 局应答 0;N/S 前后判读仅 63/69% 可命中;四种退游死因
(失衡/社交真空/交互摩擦/观光无聊)→ 详见 report.md
2026-09-19 11:06:07 +08:00

22 KiB
Raw Blame History

01 · 数值与公平性分析(Q1 难度曲线 / Q7 天花板)

分析视角:数值曲线 + 击杀经济 + 评级 + 匹配公平。数据源:28 局对局档案 (rounds/*/matches/room-*.match.json)、metrics.md、players/P01|P05|P07.review.md、 对照基准 web/server/test/hunt-balance-scan.mjs(本次实跑 24 seeds,输出见 §0)。 代码口径:web/server/hunt-room.js(WAVE_TABLE / BOT_TUNING_DEFAULT / gradeFor / ATTACK_CD_MS / MELEE_ETA / LAYOUTS)、web/hunt/game.js(killBandId / 进度 best)。

0. 对照基准实跑(2026-09-18,默认参数)

[idle  真人挂机,2 bot 独守] 胜 18/24,mean dur 3.3(负/≤3 命中 17/24;A1 B6 C11)
[bot   3 bot 水准局]         胜 24/24,mean dur 7.5(6-9 命中 17/24;S8 A10 B5 C1)
[optimal 人类上限参考]       胜 24/24,dur=10 ×23 / 9 ×1 → S×24

关键读数:扫描的三档全部是 1 真人 + 2 bot(3 座单人房);不存在 4 人档、 不存在混合水平档。而实测翻车的恰是 3-4 真人房。扫描口径本身是本次失衡的盲区 (详见发现 1.4)。

另一处账目勘误:metrics.md 称"6 局真人快速局",房间档案实为 5 房 / 18 人次 (R1: JBP5/NTGV/P5CA = 4+4+2 人;R2: 3TJY/94FQ = 4+4 人)。「快速局零损耗」结论本身成立。


1. 发现一:难度曲线失效——根因是「波次输出被团队吞吐淹没」,不是 bot 强度

1.1 现象(数据)

  • 28 局 28 胜(胜率 100%),评级 S×26 / A×1 / B×1 / C×0(metrics.md 总账)。
  • 5 个快速房 breaches 全部为空数组,营地耐久终值恒 10(room-JBP5/NTGV/P5CA/3TJY/94FQ)。
  • 逐波 breach 只存在于教学局(单人+2bot),真实波次合计仅 9 点伤害,散布在 w2:2 / w3:1 / w4:2 / w5:4——没有任何一波形成压力墙,曲线是平的。
  • 波次出清速度≈刷怪速度本身:快速局各波时长 18.6-27.2s(events.jsonl 对账), 接近 WAVE_TABLE 的刷怪跨度(如 wave4:9 只 ×1.8s=16.2s 跨度 → 21-24s 出清)。 怪进入内圈后中位 0.8-1.8s 即死(死亡 eta 中位数 2.2-3.2s,内圈窗口起点 4.0s, 5 房明细:NTGV med 3.20 / P5CA 3.20 / JBP5 2.20 / 3TJY 2.90 / 94FQ 3.10)。

1.2 吞吐算账(根因链第一环:波次表输出 < 团队击杀容量)

以最难的第 5 波计:

量 值 来源
峰值到达率 12 只 / 1.5s gap ≈ 0.67 只/s WAVE_TABLE[5]
3 座攻击吞吐 3 × 1/2.5s = 1.2 杀/s(1.8 倍冗余) ATTACK_CD_MS=2500
4 座攻击吞吐 4 × 1/2.5s = 1.6 杀/s(2.4 倍冗余) 同上
旋风斩追加 每座每 8s 清空内圈全部(快速局实测 108 次、清走 63/195=32% 击杀) SKILL_CD_MS=8000

且 buildWaveScript 按 seat = i % seatCount 把怪轮转发牌到各防区:4 座房每席 第 5 波只分到 3 只(≈10s/只),而单席击杀容量 0.4 只/s + 旋风斩。WAVE_TABLE 不随 seatCount 缩放(LAYOUTS 分 3/4 座两套,波次表只有一套)——4 人房等于把 3 人份的 压力摊给 4 个人分担。

1.3 根因链(按因果顺序)

  1. 波次表按「3 个 bot 水准」标定,而非按真人:§3.4 平衡目标"solo 余 6-9(A/B)" 的参照点是 botDecide 循环(hesitateP 0.8、reactBase 2.0 —— §15 裁决 10 故意调钝)。 实测教学房(1 真人 + 2 bot)mean dur ≈ 9.1(6×10、3×9、1×8、1×6),显著高于 扫描 bot 档的 7.5:哪怕最弱的真人(P03,个人仅 10 杀)也净贡献 +4~6 点耐久, 因为真人出手 eta(3-4s)天然早于 bot 反应带(≤2-3s)。真人 ≥ bot 是设计意图 (§7.2"给真人留出比 bot 强的空间"),但波次表没有为"真人水准"重新加压。
  2. 难度不随座位数/水平缩放:4 座房沿用同一 39 只总盘 → 团队吞吐冗余从 1.8× 升到 2.4×。
  3. 真人房≥1 个高手即封顶:optimal 档 23/24 = dur 10——单个最优玩家就能把耐久打满, 房间结果 = f(最强玩家),与队伍其余人几乎无关。5 个快速房每房至少 1 个 (P01/P05/P07/P02/P10),于是 5/5 零损耗。
  4. 评级阈值落在饱和区:gradeFor 的 S 门槛 dur≥9(≤1 点损耗),在吞吐 2 倍冗余下 恒可达 → S 是众数(26/28)。
  5. 扫描工具无法发现上述一切:hunt-balance-scan.mjs 三档全是单人房,无 4 座档、 无混合水平档——失衡的构型(3-4 真人)从未被标定过。

(bot 强度本身不是根因:idle 档 2 bot 独守尚有 6/24 失守、mean 3.3,bot 下限合格; 问题是波次输出对"真人+多人"这一档没有任何加压机制。)

1.4 修复提案

F1(P0)波次输出按座位数缩放 — hunt-room.js:

  • buildWaveScript(seed, wave, seatCount) 内对 WAVE_TABLE[wave] 做有效规格换算: wolf' = round(wolf × seatCount / 3)(4 座 wave5:10→13 狼),gap' = gap × 3 / seatCount (1.5s→1.125s),熊维持绝对数(重威胁稀缺性保留)。WAVE_TABLE 常量不动,新增 scaleSpecForSeats(spec, seatCount) 纯函数(可单测)。
  • 改动面:hunt-room.js(+设计文档 §3.4 加"4 座换算行")。

F2(P0)房间热度导演(水平自适应加压) — hunt-room.js:

  • Room 增加 heat(初始 0)。每次 waveclear:本波零 breach 且 dur === DUR_MAX 且 wave >= 2 → heat += 1(上限 3);本波有 breach → heat = max(0, heat - 1)。 startWave 应用:额外狼 +heat 只、wolfEta - 0.3 × heat、gap × (1 - 0.08 × heat) (常量建议 HEAT_MAX=3 / HEAT_ETA_STEP=0.3 / HEAT_GAP_FACTOR=0.08)。
  • heat 由确定性事件(breach 有无)导出,不消耗 rng,seed 复现性不破坏(§3.5 纪律)。
  • 作用:高手房自动爬压(P05"P5CA 式碾压"不再恒 10),弱手房天然漏怪 → heat 归零不受罚。
  • 改动面:hunt-room.js + 设计文档 §3.4/§7 新小节。

F3(P0,验收工具)扫描扩档 — hunt-balance-scan.mjs:

  • 新增模式 bot4(4 座全 bot 水准)、opt4(4 座 optimal)、mix(1 optimal + 3 挂机), 验收口径:F1/F2 落地后 bot4 mean 落 6-9、opt4 mean 8-10(S 可达不恒得)、 mix 落 5-8。F1/F2 合入前不得视为完成。
  • 改动面:test/hunt-balance-scan.mjs。

1.5 预期指标变化

指标 现值 目标
胜率 100%(28/28) 85-95%(弱手房可输、高手房赢得有伤)
快速局零损耗房 5/5 ≤1/5,房均损耗中位 0 → 2-3
评级分布 S 93% S ≤30% / A≈40% / B≈25% / C+失守 5-10%
第 5 波死亡 eta 中位 2.2-3.2s 保持 2-3s(高压来自数量而非读不到)

2. 发现二:击杀垄断——「先到先得 + 出手权无协调」的结构性结果

2.1 现象(数据)

快速房击杀分配(killsBySlot,含旋风斩清怪归属):

房 分配 最高份额 0-1 杀者
R1-P5CA 30/1/4/4(P01) 77% P03=1
R2-3TJY 27/1/4/7(P07) 69% P08=1
R1-NTGV 19/5/15/0(P05,P07) 49% P08=0
R2-94FQ 18/0/1/20(P05,P02) 51% P03=0
R1-JBP5 19/15/5(P10,P09,bot) 49% —

教学房同理:P01 房 36/4/0(92%)。全场个人击杀 0~36 共存。 主观侧直接踩线:P03 三局 1/0/0 杀后退出;P07 复盘"被独狼压制"、两遍 kill_band0「你还没开张」;P01"我只好一人收 39 只里的 30 只"。

2.2 机制根源(四个机制叠加)

  1. 击杀即死 + 无目标归属:mob 无 HP({id, mkind, dir, eta}),adjudicateAttack 弧内取 eta 最小者即刻删除——先出手者独得,没有助攻账。
  2. 冷却在座不在目标:ATTACK_CD_MS 约束的是单人频率(2.5s/杀),谁先出 cooldown 谁先抢下一只;快速手 = 结构性垄断者。P05:"出手权不在最快的手上,在系统的时钟上" ——对他这是上限锁,对弱者是抢夺机。
  3. 感知速度差即击杀权差:怪进内圈(eta≤4.0,MELEE_ETA)后中位 0.8-1.8s 内被杀; 高手 loop 注册率 39/39、clean notice 中位 663-761ms(P05/P01),弱手注册率 12/36、 notice 1368-1674ms(P03/P08/P10,brainStats)——弱手在数学上不可能先到, 他听清时怪已死,声场永远是空的。
  4. 旋风斩全内圈收割 + 归属出手者:adjudicateSkill 清 eta≤4 全部怪并全部 creditKill(slot)。P07 三局 37 次旋风斩,3TJY 一局清走 17/39(44%)—— 高频双击者成为吸尘器,且吃掉的正是别人防区里"即将到手的怪"(P05:"01:14.2 左后狼 在我眼前被旋风斩收走")。
  5. (放大器)无出手权协调信道:callout 语义是"求援"不是"这归我",3 局 18 人次 仅 3 次呼喊;击杀归属无播报(P01 的"熊债":打残的熊被 bot 补刀无声无息)。

2.3 修复提案

F4(P0)防区优先窗(sector yield) — hunt-room.js:

  • 新常量 SECTOR_YIELD_ETA = 2.0。adjudicateAttack 选目标时:若 mob.dir 属于另一在 席座位的防区(LAYOUTS 是全集划分,可 dirOwner(dir) 查表)且 mob.eta > SECTOR_YIELD_ETA → 跳过该 mob(弧内试下一只;全跳过走既有 miss 路径)。
  • 语义:防区主人对自家怪有 2s 优先窗(eta 4.0→2.0),过了窗任何人可补—— 「软防区」从"bot 偏置"升级为"轻出手权",补位语义保留(主人掉线/发呆 2s 后怪仍可救)。
  • bot 侧自动受限(bot 反应带 ≤2.0-3.0,影响可忽略);教学波怪在玩家防区(N 席 0), 教学 bot 不再偷教学狼。
  • 改动面:hunt-room.js + 设计文档 §3.3(防区三用途 → 四用途)+ §13 断言 ("主人存活且 eta>2.0 时跨区击杀被跳过")。

F5(P1)击杀账改「击杀+协助」双账 — hunt-room.js + game.js + §6.3/§12:

  • mob 增加 hitBy/claimedBy 追踪(首个对其出手者=协助者);ev end 的 kills 之外加 assists(按 slot)。旋风斩清走的怪:击杀记施放者、协助记防区主人。
  • 客户端 killBandId(game.js:94)改按 kills+assists 取档;进度 best 与 summary (§12 生成规则)加入协助数。kill_band0 文案改为中性("这一夜你守多攻少"类, 台词表 23-hunt-voice-ids.md L 组 + TTS 重生成——归音频域,列依赖)。
  • 改动面:hunt-room.js / game.js / 设计文档 §6.3(end 字段)/ §12。

F6(P2)击杀归属可听化:「怪被队友收走」短音(<1s,R5 合规)——归音频域, 此处只登记需求:P01 熊债、P05 旋风抢怪的直接止痛点。

2.4 预期指标变化

指标 现值 目标
房内最高击杀份额(快速局均值) 59%(77% 峰值) ≤45%(≤20/39)
0 杀快速局人次 2/18 0
弱手个人击杀(P03/P08 型) 0-1 6-10(自家防区每局 ~10 只轮到名下)
kill_band0 触发 有(且辱骂感) 基本消失

3. 发现三:bot 与真人的强度关系——「带飞」是吞吐结构,不是谁强谁弱

3.1 现象与对照

构型 数据 结论
教学房(1 真人+2 bot),弱手 P03 房 bot 29/39=74% 杀、玩家仍 S 余9;P06 房 bot 33% bot 带飞:S 白送,学习不被检验
教学房,高手 P01 房 bot 4/39=10%、P07 房 6/39 玩家吸干 bot:bot 只剩清扫
快速房(3-4 真人,0 bot) P5CA P01 独得 30/39;3TJY P07 独得 27/39 高手带飞:同一结构换了主体
快速房 2 真人+1 bot JBP5 bot 仅 5/39 bot 在混合房自动边缘化
挂机底座 idle 档:2 bot 独守胜 18/24、mean 3.3 纯 bot 下限合格(有输的可能)

3.2 根因

  • bot 的调参目标(§3.4"solo 余 6-9")是房间结果目标,从不约束击杀经济。 bot 被 hesitateP=0.8 / reactBase=2.0 钝化后,在击杀市场里永远是"慢清道夫": 房间里有任何比它快的人(= 任何真人),bot 份额就被压到边角。
  • 因此"教学局 bot 带飞"与"真人局专家带飞"是同一个吞吐过剩问题的两张脸: 座位数 × 0.4 杀/s 的容量 vs 0.67 只/s 的峰值供给,剩下的人都在分剩余。
  • 副作用 1(教学):弱手被 bot 抬到 S → 教学局 9/10 是 S,"学会与否"不可见(Q5 域, 数值侧证据:教学房 dur mean 9.1 vs idle 档 3.3——玩家贡献被 bot 底座掩盖)。
  • 副作用 2(P05 的天花板抱怨):bot 钝化把"比 bot 强"的达标线设得过低—— optimal 玩家单人即 dur 10,团队协作没有数值上的必要(§1.6 风险③在多人档落空)。

3.3 修复提案

F7(P1)教学房 bot 防区锁死 — hunt-room.js:教学段(phase=teach + 教学后前 2 波) bot 的 botPickDir 只在自家防区内选目标(偏置 ×∞ 或硬过滤)。玩家的 1/3 声场真正 归玩家,教学结果反映玩家水平(P04 型 = B 而非全班 S)。改动面:hunt-room.js(约 5 行)

  • §5 教学房规则补一句。

F8(P2,观察项)bot 强度不动:F1/F2/F4 落地后重跑扩档扫描,若 4 座 bot4 档 mean 仍 >9,再考虑 BOT_TUNING_DEFAULT.hesitateP 0.8→0.7。当前无证据要求动 bot—— 先修供给(波次)与分配(出手权),再谈 bot。

3.4 预期指标变化

  • 教学房玩家击杀份额:26-59%(弱手)→ ≥70%;教学房评级分布从 9S/1A/… → 反映真实 水平(预期 S≤4/10)。bot 份额与玩家水平的相关斜率变平(不再"越弱越被抬")。

4. 发现四:评级失去分辨力——单一输入(耐久)落在饱和区,且与个人表现完全解耦

4.1 现象(数据)

  • gradeFor(dur):S≥9 / A 7-8 / B 4-6 / C 1-3。实测 26S/1A/1B:S 是 93% 的缺省值。
  • 三局满 S 的 P05 原话:"一个不稀缺的 S 等于没有评级""结算屏给我同一个 S"→ 退出; P01:"两局都 S·营地余 10 之后,我也不知道下一局还能图什么"→ 退出。
  • 房内所有人同评级:NTGV 房 P08(0 杀、1 次错弧出手)与 P05(19 杀、26/27 弧对) 同为 S。评级对个人零信息。
  • 即使按扫描 bot 档(3 bot 水准),S 也占 8/24——S 门槛(≤1 点损耗)在原难度下就偏松; 难度饱和(发现一)把它彻底推成众数。
  • 进度 best 排序键(§12:评级 > 营厂余耐久 > 击杀)里第三键从未被用到(dur 恒 10); end_rank"猎手榜"只是一句台词(P05/P07 都点名:无名次、无分段、无历史最高)。

4.2 根因

  1. 评级输入只有 dur 一个维度,而 dur 被吞吐冗余饱和(发现一)。
  2. 评级是房间级共享,个人击杀档(killBandId)只进播报不进评级/best—— "30 杀带飞"与"0 杀躺赢"在存档里等价。
  3. 个人可精进轴(弧错率 22%、notice 时延、旋风时机)没有任何一个进入结算。

4.3 修复提案

F9(P0,与 F1/F2 绑定验收)评级分两轴 — hunt-room.js(服务端权威,§3.6):

  • 团队轴:gradeFor 门槛在 F1/F2/F3 扩档扫描上重标定。建议收紧为 S: dur≥10(零损耗)/ A: 8-9 / B: 5-7 / C: 1-4,验收线:bot4 档 P(S)≤15%、 opt4 档 P(S)≥80%(S = 高手护住满血,而非缺省)。
  • 个人轴:ev end 增 per-slot contrib(kills + 0.5×assists,F5 的账)与 quota = 总怪数/席位数;个人档 contrib/quota ≥1.2 → 主猎手 / ≥0.6 → 主力 / 其余 → 协防。voice 新增 3 句(23-hunt-voice-ids.md 结算链:grade_* → 个人档 → kill_band_* → end_rank),预算 60→63 句(§10.3 核算仍有余量)。
  • 进度 best(§12)写入个人档与 contrib,summary 加个人档字段(game.js _saveProgress/_betterThan + §12 生成规则)。
  • 改动面:hunt-room.js / game.js / 设计文档 §3.6 / §12 / 台词表。

F10(P1)把"榜"做成真榜:end_rank 台词之后上滑可听"本房击杀对比" (复用 kill_band 分档 + 座次 2-3 句资产),进度 API best 已有 kills—— 跨玩家榜仍是 roadmap,但房内对比是 P05/P07 明确要的钩子且零协议改动。 改动面:game.js + 台词表。

4.4 预期指标变化

  • 评级分布见发现一目标列;S 成为"零损耗+个人主猎手"的复合稀缺品。
  • 复测口径:P05 型玩家三局结算不再全同(个人 contrib 有区分度); best 更新触发率(现恒 S+10,二局后不再更新)→ 每局有可刷新字段。

5. 发现五:匹配无水平信号——悬殊同房对弱者是「无声的羞辱局」,对高手是苦役

5.1 现象(数据)

  • handleJoin 快速匹配 = 找第一个有空位的 lobby(r.phase==='lobby' && slots<4), 无任何水平输入(协议 join 也不携带,§6.2)。
  • R1-P5CA 把 P01(15 年读屏、notice 761ms、弧对 59%)与 P03/P02/P04 (notice 1368-1575ms、注册率 12-14/36)同房:P01 30 杀,P03 1 杀,P04 4 杀 0 弧对命中杀。
  • 弱者代价(P03 三局 1/0/0 → 退出;P08 0/1 杀):
    • 声场被抽空:高手把怪在 eta 3.2 清掉,弱手 loop 注册率仅 1/3——游戏对他是 "5 分钟静坐 + S 屏";
    • 看门狗误伤:闲置提醒 4-7 次/局(P03/P04/P10,全场 93 次)——不是挂机,是无怪可打, gd_idle 只看自家手势 10s 窗(game.js 向导层);
    • 结算羞辱:kill_band0"你还没开张"对着 0 杀弱手播(P07 转述两遍);
    • 贡献不可见:胜利与个人 0 贡献同屏,S 变成嘲讽。
  • 高手代价:P01"最后干脆自己全收";P07 R1 被独狼压制后反而上头(要对手), 但零心跳局"无聊删得比连输还快"。

5.2 根因

  1. 快速匹配是纯填坑算法,服务端对玩家水平零知识(进度 best 只在客户端)。
  2. 悬殊房放大发现一/二:高手吞吐过剩 → 弱手零供给;数值上"团队赢"掩盖"个人零参与"。
  3. 反馈系统(看门狗、kill_band0)假设"没动作=没在玩、0 杀=没出力",在垄断经济下 两个假设都反向成立。

5.3 修复提案

F11(P1)join 携带水平提示 + 分层匹配 — hunt-room.js + game.js + §6.2:

  • join 增可选字段 skill: 0-3(客户端由进度算:无 best=0,B/C=1,A=2,S 且 kills≥15=3; 老客户端缺省 null,向后兼容 ver 不动)。
  • 快速匹配从 first-fit 改为最小极差:优先进 max(skill)-min(skill) ≤ 1 的 lobby; 找不到则等待,LOBBY_MS 12s 到点仍回落任意房(小池子兜底,不增等待上限)。
  • 改动面:hunt-room.js handleJoin(约 30 行)/ game.js(算 skill 并携带)/ §6.2 字段表。

F12(P2)反饥饿看门狗(跨域登记,数值侧给判据):gd_idle 触发前提改为 "近 10s 内自家防区出现过内圈怪或 breach"(game.js 有本地怪表可判); starving 弱手的闲置提醒 4-7 次/局 → ≤1 次。

F13(P2)kill_band0 文案中性化(并入 F5 的台词改动)。

5.4 预期指标变化

  • 悬殊房(极差 ≥2 水平档同房)占比 → 目标 <20%(10 人池的现实约束下);
  • 弱手侧:0-1 杀人次 2/18 → 0(叠加 F4),闲置提醒中位 5 次/局 → ≤1;
  • 高手侧:房内最高击杀份额下降后,"碾压无聊"局(零 breach 且 top-share>60%)→ 复测追踪。

6. 修复优先级表(按「玩家愿意玩下去」的影响排序)

# 修复 定级 改动面 直接对标的退出原因 预期核心指标
1 F1+F2 波次按座位缩放 + heat 导演(WAVE_TABLE 换算 / HEAT_* 常量) P0 hunt-room.js + 设计文档 §3.4 P05"白给 S 就删"、P07"零心跳无聊删"、P01"没有下一局" 胜率 100%→85-95%;快速零损耗 5/5→≤1/5;S 占比 93%→≤30%
2 F3 扫描扩档(bot4/opt4/mix) P0(#1 的验收门槛) hunt-balance-scan.mjs —(流程性:防回归) bot4 落 6-9 带、opt4 不恒 S
3 F4 防区优先窗(SECTOR_YIELD_ETA=2.0) P0 hunt-room.js + §3.3/§13 P03 零参与退出、P07 被压制+受辱、P05 被抢怪 0 杀局 2/18→0;top-share 59%→≤45%
4 F9 评级双轴(gradeFor 重标定 + contrib 个人档) P0 hunt-room.js / game.js / §3.6/§12/台词表 P05"不稀缺的 S"、P01"S 后无可图" S=零损耗+主猎手复合条件;best 可持续刷新
5 F5 击杀+协助双账(ev end.assists / killBandId 口径 / best+summary) P1 hunt-room.js / game.js / §6.3/§12 P01"熊债"、P08 型无感参与 协助进结算链;0 贡献玩家归零
6 F11 分层匹配(join.skill + 最小极差选房) P1 hunt-room.js / game.js / §6.2 P03 式悬殊局体验 悬殊房 <20%;弱手闲置提醒 ≤1/局(配 F12)
7 F7 教学房 bot 防区锁死 P1 hunt-room.js + §5 教学不检验学习(Q5 联动) 教学房 S 9/10→≤4/10
8 F10 房内击杀对比榜(end_rank 后可听) P1 game.js + 台词表 P07"要可听的排名" 好胜型留存钩子(复测去留对照)
9 F12 反饥饿看门狗 + F13 kill_band0 中性化 P2 game.js / 台词表 弱手被骂式关心 闲置提醒全场 93 次→<30
10 F6 击杀归属可听化("被收走"短音) P2 台词/sfx 资产(音频域) 熊债止痛 归音频域实施

跨域依赖提示(非本视角所有权,但数值上相关):P01/P05/P07 三人共报的 "冷却乱滑 666 次纯 error 震、无剩余时间反馈"(ATTACK_CD_MS 黑箱)与 "战斗态下滑双语义误开菜单"属交互域 P0——它们与 #3 同为垄断痛感的放大器, 复测前应与数值修复同批落地,否则弱手的"抢不到"会被 UI 挫败混因。

复测纪律(沿用 00-plan §6):同 10 人配置不改;上述改动合入后先跑扩档扫描(F3) 再开同阵容复测,对比指标:胜率/评级分布、房均 breach、top-kill-share、0 杀人次、 闲置提醒次数、去留决策(重点盯 P01/P05/P07 的"白给 S/无聊"决策点是否消失)。