Skip to content

[flash-review][blocker] 非人形经脉 channel 致 6 处 to_meridian_id panic 崩服,仅 2 处已报(汇总) #1887

Description

@Kizunad

来源: flash-review 全仓扫描的人工归纳(非自动开单)。个案见 #1344(zhenmai_v2)、#1490(overload)。

问题

MeridianChannelId::to_meridian_id()非人形 channel(如 tail_fin_channel合法返回 None —— 这是文档明示的契约,调用方必须显式处理。但全仓 17 个调用点里,6 个直接 unwrap_or_else(|| panic!(...))

文件 已开 issue
server/src/combat/zhenmai_v2.rs 1381 #1344
server/src/cultivation/overload.rs 119 #1490
server/src/combat/baomai_v4/crack_reading.rs 166 未报
server/src/cultivation/dugu.rs 548 未报
server/src/cultivation/qi_zero_decay.rs 121 未报
server/src/cultivation/tribulation.rs 4074 未报

六处形状完全一致,都是 to_meridian_id().unwrap_or_else(|| panic!(...))

可达性

玩家用 /race set whale 变成非人形后,已打通经脉即为 whale channel(无 legacy MeridianId 映射),随后触碰上述任一路径(炸炉、渡劫、真元归零衰减、毒蛊、裂读、爆脉)都会 panic 崩服。

/race 本身没有权限门禁 —— 见汇总 issue #1862(42 个 dev 命令里 41 个对任意玩家开放)。两个系统性缺陷叠加:任意玩家可自助把自己变成非人形,然后崩服。

建议修法

不要逐个把 panic! 换成 return——那只是把崩服变成静默失效。契约层面收口:

  1. to_meridian_id() 的返回类型在调用点强制处理(现已是 Option,问题在调用方图省事)
  2. 为「非人形实体走 legacy 经脉路径」定义一个明确语义:跳过、降级到通用 channel、或返回 Err 让上层决定
  3. 六处统一按该语义改写,并补一个非人形回归测试覆盖全部六条路径

只修 #1344/#1490 会留下 4 个同样能崩服的入口。

Metadata

Metadata

Assignees

No one assigned

    Labels

    flash-reviewdeepseek-v4-flash 全仓只读扫描发现的问题standalonestandalone confirmed issue, no track

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions