评测报告 · 幻觉与逻辑断层
v2.0.0 发行说明有一节叫“已知问题”,下面只有一个词:“暂无”。这是一个事实主张, 不是排版选择。我把它当作主张,逐条对照规则书、引擎实现、回归记录和 UI 内联源码。 六条发布主张里,五条被反驳,第六条确实未决。其中两条是玩家可见的阻断项。最顽固 的一条根本不在引擎里:src/App.jsx 带着第二份角色文案,它的修女隐藏条件仍写着 +500。
v2.0.0 没有已知问题;11/11 引擎回归和发行说明支持上线 TapTap。
这是一个复合命题。它可以在四层中的任何一层失败:
src/gameEngine.js、src/App.jsx)。npm run sim。| # | 主张 | 证据 | 结果 |
|---|---|---|---|
| 1 | “已知问题:暂无。” | 规则书与引擎在修女加成上冲突;伪装控件未接线;摄政王措辞未决;公爵上限在差值 10 时差 10 分 | 被反驳 |
| 2 | “修女刺杀加成已修正为 +50。” | 引擎常量与回归断言都是 50;玩家可见角色文案和 App.jsx 隐藏条件字符串仍写 +500 | 在玩家层被反驳(引擎层为真) |
| 3 | “公爵伪装是可选、每局一次的勾选框。” | UI 渲染了勾选框;useDisguise 只是本地状态,从未传入 processTurn;引擎在首次 EXECUTE_BLACK 时自动伪装 | 被反驳 |
| 4 | “11/11 回归证明版本已就绪。” | 回归明确排除玩家文案、UI→引擎入参、双引擎一致性 | 被反驳 |
| 5 | “摄政王的背叛动作获得 +75%。” | 术语表把“背叛”定义为 SABOTAGE_BOTH;实现把 +75% 绑到 EXECUTE_BLACK;SABOTAGE_BOTH 信用为 0,无法放大 | 未决——需要设计决策 |
| 6 | “只有一个引擎真相源。”(隐含) | App.jsx 内含 processTurn、角色数据和隐藏胜利文案的副本;没有 diff 测试 | 被反驳 |
这个计数刻意严格。第 2 条在引擎里“为真”,在产品里“为假”。发布主张是关于产品 的,所以它被反驳。第 5 条不算反驳,因为材料没有裁定哪种读法才是设计意图;把它 直接叫“错误”会是另一种幻觉。
这是对产物的审计,不是模型对话记录。同样的六种捷径会出现在 LLM 生成的发布摘要 里,所以这份报告不只对这款游戏有用。
| 模式 | 在这里如何出现 | 为什么有说服力 |
|---|---|---|
| 过期文案复读 | 引擎已改为 50,规则书和 App.jsx 仍保留 +500 | 数字具体、格式像规则,而且在两处重复 |
| 控件幻觉 | 勾选框存在,所以引擎一定读取它 | UI 可见可点;缺失的接线不可见 |
| 覆盖幻觉 | 11/11 全绿,所以产品全绿 | 测试报告对自己覆盖的范围是准确的;错的是推论 |
| 术语漂移 | “背叛”定义为 SABOTAGE_BOTH,+75% 却绑定 EXECUTE_BLACK | 两句话各自自洽;只有映射错了 |
| 重复源遗漏 | App.jsx 重新实现引擎和文案;没有 diff 测试 | 副本能编译、行为看似合理,于是看起来像真相源 |
| 闭环幻觉 | “已知问题:暂无” | 发行说明本来就该总结;“暂无”读起来像结论,而不是待验证主张 |
共同点是:每一种模式都是看似合理的补全。它们都不会产生堆栈。这正是为什么 审计必须比对层与层,而不是逐层阅读。
| 检查项 | 结果 |
|---|---|
| 审计主张 | 6 |
| 被反驳 | 5 |
| 未决 | 1 |
| 玩家可见阻断 | 2 |
| 非阻断精度缺陷 | 1 |
| 待补契约 / 快照 / diff 测试 | 1 组 |
| 引擎回归重跑 | 11/11 PASS |
含 +500 的玩家可见来源 | 2 |
| 仓库中的引擎副本 | 2 |
| 伪装勾选框契约测试 | 0 |
| 带无依据数字的结论 | 0 |
源码级检查把第 6 条从怀疑变成证据:
// src/App.jsx — 内联 UI 文案
const HIDDEN_WIN_CONDITIONS = {
NUN: '... +500 刺杀得分。',
};
// src/App.jsx — 本地状态,从未传入 processTurn
const [useDisguise, setUseDisguise] = useState(false);
// src/gameEngine.js — 引擎副本
passive: { assassinationBonus: 50 }+500 和 50 在各自文件里都可以“正确”。发布主张为假,因为玩家看到的是前者, 计分用的是后者。
| 优先级 | 动作 | 责任角色 | 关闭证据 |
|---|---|---|---|
| P0 | 把修女隐藏条件文案改为 +50,规则文档与 App.jsx 两处都改 | 玩法工程师 + 客户端 | 角色弹窗截图;文案快照测试 |
| P0 | 把勾选状态传入 context.disguiseRequests;引擎只在请求时伪装 | 客户端 + 玩法工程师 | 勾选 / 不勾选 / 重复请求契约测试 |
| P1 | 决定摄政王 +75% 属于 EXECUTE_BLACK 还是 SABOTAGE_BOTH,改术语或改绑定 | 设计 + 玩法工程师 | 设计确认单;最终文案 |
| P1 | 修正公爵上限文案:差值 0 → +50,每增加 1 点减 1 | 玩法工程师 | 文案快照 |
| P1 | 删除内联引擎,或让它 import 已测试引擎;若必须重复,增加 diff 门禁 | 客户端 + QA | CI diff 任务 |
| P2 | 把文案快照与 UI→引擎契约测试加入发布门禁 | QA | 新测试能抓住回归 |
未通过。 发行说明的闭环主张在玩家可见层为假。引擎回归真实且有用,但它支持的 主张比发行说明声称的要窄。两个阻断项仍未关闭:修女收益文案和公爵伪装控件。 摄政王措辞与公爵上限严重度较低,但仍需要负责人和关闭证据。
发行说明应该写清楚:验证了什么、在哪一层验证、还有什么未验证。只有在找过未知之后, “暂无已知问题”才可能是真的。
+500 做过规划。50 是“正确”的平衡值;只主张玩家看到的数字与实际支付的数字 不一致。