Files
gplan-2/production/qa/bugs/BUG-0002.md
T
2026-09-14 18:18:49 +08:00

5.4 KiB
Raw Blame History

Bug Report

Summary

Title: 浅深度战斗零敌人(d0/d1 遭遇 unit_count=0、round 1 即 victory)——遭遇骰/spawn 路径疑似掷出 0 ID: BUG-0002 Severity: S3-Minor(复核降级——原报 Medium;当前构建不可复现,遥测签名另有解释) Priority: P3-Backlog(不变式回归已落地,无遗留行动) Status: Closed Reported: 2026-09-12(playtest-2026-09-12-designer 报告 Bugs 表 #1) Reporter: 用户(设计师本人,试玩遥测);本档由 2026-09-13 会话按报告 Action Routing 建档并复核

Classification

  • Category: Gameplay(遭遇生成)/ 遥测可观测性
  • System: B1 遭遇骰(C3 Core Rule 8 区间骰)× B2.spawn × settlement_snapshot 观测面
  • Frequency: 原报两次真人局均现(d0 100%、20:13 另含 d1);当前构建复现 0/100 场
  • Regression: No——遭遇骰批(2026-09-12)后无相关代码路径可产出 0

Environment

  • Build: 原报 = 垂直切片 · 2026-09-12 五区改造批;复核 = 2026-09-13 当前工作区(status_effects.tres defense_up=-30 批)
  • Platform: PC · Win10 · Godot 4.7.2 · seed 42 固定
  • Scene/Level: 第一关 d0/d1 战斗节点
  • Game State: 战斗第 1 轮结算即 victory,快照 unit_count=0

Reproduction Steps

Preconditions: 原报基于 playtest_42_20260912T201317.jsonl 遥测(快照面)。

  1. seed 42 开局,进入 d0 战斗
  2. 首轮挖满 8 AP 后结算
  3. 快照显示 verdict=victory、unit_count=0(原报判为「零敌人空场」)

Expected Result: C3 Rule 8 区间 [unit_count, unit_count_max] 下限 1——不应出现 0 敌战斗。 Actual Result(复核): 遥测误读——实为「首轮全灭」而非「空场」。快照取在衰减段之后的结算末尾,unit_count 只计存活敌:英雄首轮爆发(基础攻击 + 伤害A 开格充能 + 爆裂粉尘 instant_aoe 全体)可在 round 1 全歼浅深度低 HP 敌群,快照同样呈现 unit_count=0 + round-1 victory。

Technical Context

  • Likely affected files: core/battle_orchestrator.gd(begin_battle 遭遇骰 / _emit_settlement_snapshot)、core/unit_container.gd(spawn 数量守卫)
  • Related systems: C3 Core Rule 8(区间骰)、playtest_logger(JSONL 快照消费)
  • Possible root cause(复核结论): 非遭遇骰缺陷。当前实现掷骰 = roll_lo + estream.randi_range(0, roll_hi - roll_lo),数学下限 = unit_count ≥ 1;B2.spawn 对 count<1 fail-fast 拒绝(双闸)。seed 42 当前构建全关回放(damage_probe level 模式)复现同款遥测签名:d0 spawn=1、d1 spawn=3,全部「round-1 胜利 = 首轮全灭(wipe)」——与 20:41 辅助局 d1 快照(3 只地精各剩 1 HP = 主角攻击斩首只 + 3 颗爆裂粉尘 ×4 AOE)逐点吻合。

Evidence

  • 探针:smoke/damage_probe.gd -- level 42——d0 spawn=1(预测 1 ✓)首轮全灭 · d1 spawn=3(预测 3 ✓)首轮全灭 · 20 种子 × 5 深度 = 100 场 spawn 全域内、0 场空遭遇
  • 遥测取证:playtest_42_20260912T204636.jsonl d1 r1——unit_count=2 存活(3 只中 2 只各剩 1 HP)+ hero 承伤 −8,证明同种子 d1 在另一局正常刷出敌群(差异 = 真人挖掘路径不同的奖励抽取,非 RNG 流分歧)
  • 回归断言:smoke_all _smoke_encounter_roll 增「全深度 × 12 种子 spawn 全域内(60 场,∈[unit_count, unit_count_max] 且 ≥1)——空遭遇不可达」;settlement_snapshot 新增 spawn_count 字段 + _smoke_playtest_logger 字段/等值断言——unit_count=0 时可判别「首轮全灭」vs「空场」,同类误读不再依赖人肉推断
  • 修复后验证:冒烟 148/148 全绿
  • playtest-2026-09-12-designer 报告 Bugs 表 #1 / Top 3 Priorities #1(探针前置)
  • BUG-0003(Boss 攻击零兑现——同一份遥测的姊妹误读,共用根因探针)
  • BUG-0001(呈现层软锁——编号顺延基点,无关联)

Notes

  • 「单位数量 0」类观察的判别义务已机制化:任何后续 JSONL 快照携带 spawn_count(实例化总数,含死亡残位),unit_count < spawn_count = 有击杀,spawn_count=0 才是空场。
  • 原报的怀疑对象(遭遇骰路径)经代码审读 + 100 场扫描证伪;真实可玩性议题「浅深度战斗可被首轮爆发无伤跳过(d0-d3 全部 round-1 通关)」属难度带问题,归 C3 F4/F5 复扫(BUG-0003 关联条目与本会话 Q1 基线数据),不在本缺陷档处置。

Closure Record

Closed: 2026-09-13 Resolution: Rejected as coded——零敌遭遇在当前实现不可达(数学下限 + fail-fast 双闸 + 100 场扫描零越域);原观察为「首轮全灭」被快照盲区误读。沉淀 = settlement_snapshot.spawn_count 观测面 + 全域 spawn 回归断言(无游戏数值变更)。 Fix commit / PR: 不适用(非 git 管理;变更 = core/battle_orchestrator.gd 快照字段 + smoke/smoke_all.gd 回归断言 + smoke/damage_probe.gd 探针) Verified by: 2026-09-13 会话(damage_probe level 模式 + smoke_all 148/148) Closed by: 用户授权任务(playtest-2026-09-12 报告 Top3 执行会话) Regression test: smoke/smoke_all.gd _smoke_encounter_roll(全域扫描)+ _smoke_playtest_logger(spawn_count 字段与等值);smoke/damage_probe.gd -- level(可复演证据面) Status: Closed