№ · REVIEWS CH.07.14
主页 · 📄 reviews · K1 内容可达性审计 · v1.0

K1 内容可达性审计 · v1.0

📅 2026-07-14 · 📦 7.0 KB · 📄 reviews · 📝 MD 文档 🆕 14d 🏷️ 真值🏷️ Buff🏷️ 新手🏷️ 计划🏷️ 回归🏷️ 员工

审计日期:2026-07-14(Asia/Shanghai) 依据:当前源码注册链、运行时消费者与定向只读统计;不以旧计划中的历史数量代替 live truth。 目标:回答“哪些内容真的能被玩家消费”,再决定单域扩容;本审计不修改产品代码。


0. 结论

当前不应直接增加新 Buff、事件或成就。最高价值缺口是 已有内容未被真实消费或契约与文案不一致:

  1. Buff P0:16 个定义中 14 个标记为非预留,但 App.tsx 固定 summarizeBuffs([]),实际运行摘要始终为空;现有 innStatusBuffBridge 也没有进入 App 消费链。
  2. 成就 P1:4 个周目成就已进入 UI/结算桥,但解锁函数只比较 requiredRun;“7 天内无终局 / 解锁所有员工 / 声望 1000”没有对应条件判断。
  3. 事件 P1:13 张表、42 个事件已全部注册到选择器且 ID 无重复;当前主要风险不是数量,而是日窗/员工门失败时仍给 0.01 权重,与代码中的“硬性短路”口径不一致,且没有选择器回归或重复度历史。
  4. 失败链:F1 v1.2 正在施工,审计冻结;不在活动文件上做扩容判断。

因此 K1-1 应改为 Buff 运行时消费闭环,不是 Buff 数量扩容。完成后再处理事件门与成就契约,最后才重新评估是否需要新增内容。


1. 审计方法

  • 统计静态定义数、注册表数和重复 ID。
  • 追踪定义进入 App/结算/UI 的 import 与调用链。
  • 区分 defined / registered / runtime-consumed / player-visible
  • 不用 id: 行数、文件数、preview 或旧计划目标值冒充内容规模。
  • 失败链处于并行施工时只记录冻结,不读取中间 diff 作结论。

2. 事件域

2.1 实际规模

| 指标 | 结果 | | :--- | ---: | | GAME_EVENT_TABLES | 13 | | BASE_GAME_EVENTS | 42 | | GAME_EVENTS | 42 | | storyline-* 表 | 2 | | 重复 event ID | 0 |

各表事件数:

| 表 | 数量 | | :--- | ---: | | mainline-business | 5 | | mainline-tournament | 4 | | role-guo-lu | 1 | | role-bai-tong | 2 | | storyline-guo-lu-pilot | 1 | | storyline-old-ledger | 10 | | role-dazui | 2 | | role-mobei | 2 | | role-wushuang-qian | 4 | | side-official | 3 | | side-night-risk | 2 | | side-jianghu-atmosphere | 2 | | side-old-ledger | 4 |

2.2 消费链

  • src/data/eventTables/index.ts 汇总 13 张表为 GAME_EVENTS
  • src/data/eventTables/selection.tsselectWeightedGameEvent() 默认消费 GAME_EVENTS
  • src/App.tsx tick 在满足 2% 触发条件时调用选择器,并把结果写入 currentEvent
  • 结论:42 个事件均在注册链中,不存在“文件已写但从未注册”的整表孤岛。

2.3 缺口

  • 日窗失败、未招募员工等注释写的是“硬性短路”,实际权重为 0.01,不是不可选。
  • 选择器直接使用 Math.random(),没有注入随机源,也没有回归测试。
  • 没有事件触发历史或近 N 周期重复度指标,无法证明“扩容后重复感下降”。
  • src/data/eventTables/index.ts 仍定义 withOwnerScope() / defineTable() 并转出查询函数,违反当前 AGENTS.md“数据层不放函数”硬边界;新增事件前必须先把构造/查询移到逻辑层,静态表与类型留在 data。

判定:暂不增加事件;先补硬门语义与确定性选择回归,再决定内容扩容。


3. Buff 域

3.1 实际规模

| 指标 | 结果 | | :--- | ---: | | BUFF_DEFINITIONS | 16 | | 非预留定义 | 14 | | reserved: true | 2 | | inn target | 13 | | staff target | 2 | | meta target | 1 |

3.2 消费链

  • buffEngine.ts 已有 normalize、冲突、时间窗、候选、应用与摘要能力。
  • innStatusBuffBridge.ts 已能从客栈状态生成 activate/deactivate 建议与 snapshot patch。
  • UI 已有 BuffPanel、SystemStatusPanel 和 SystemHubPanel 消费 buffSummary
  • src/App.tsx 当前固定使用 summarizeBuffs([], gameTime),没有把 bridge 推荐或运行时 Buff 传入。

判定:定义、逻辑和 UI 都存在,唯一关键断点是 App 编排;玩家实际可见内容为 0。

3.3 K1-1 施工建议

lane:[长工]#K1-Buff运行时消费闭环@v1.0

文件边界:

  • src/App.tsx 仅 Buff/inn-status 编排邻域。
  • src/utils/innStatusBuffBridge.tssrc/utils/buffEngine.ts 的直接缺口。
  • K1 定向回归;UI 原则上不改,除非现有组件无法渲染真实 summary。

验收:

  1. 客栈状态可确定性派生实际 active Buff;不再固定空数组。
  2. 正常、半营业、卫生风险、治安风险、夜间闭店、员工不稳至少各有边界回归。
  3. D1 的健康/心情风险只复用已存在的 staff_health_low / staff_mood_low,不新增数值。
  4. BuffPanel/SystemStatusPanel 显示真实 active/visible 条目,玩家文案无内部 ID。
  5. 刷新后可由当前状态重建,不依赖伪造的持久数组。
  6. lint、build、W29、Buff 回归与真实浏览器 smoke PASS。

非目标:

  • 不新增第 17 个 Buff。
  • 不改变现有 modifier 数值。
  • 不同时修事件或成就。

4. 成就域

4.1 实际规模与消费

  • RUN_ACHIEVEMENTS 共 4 个;AchievementsTab 可展示。
  • playthroughRuntimeBridge 在结算时调用 buildRunCompletionRewardSummary(),可写 achievement IDs 和传承点。
  • 所以成就不是完全未接入。

4.2 契约漂移

| 成就 | 玩家文案条件 | 当前实际判断 | | :--- | :--- | :--- | | 初来乍道 | 完成第 1 周目 | playthroughNo >= 1 | | 完美一周 | 7 天内无终局 | playthroughNo >= 2 | | 全员到齐 | 解锁所有员工 | playthroughNo >= 3 | | 客栈大师 | 声望达到 1000 | playthroughNo >= 4 |

除第一个外,后三个文案条件没有进入检测 context,存在“周目数到了就解锁”的语义错误。

判定:在 X1 结算稳定后开 K1-3 成就契约修复;先扩 context/条件回归,不先增加成就数量。


5. 排序与接力

| 顺位 | lane | 理由 | 进入条件 | | :---: | :--- | :--- | :--- | | 1 | K1-1 Buff 运行时消费闭环 | 14 个非预留定义对玩家实际为 0,价值断点最明确 | D1 回执 + 当前 X1/App 锁释放 | | 2 | K1-2 事件分层、选择硬门与重复度基线 | 42 个事件已够用,先恢复 data/utils 边界、保证不会越门并建立可测重复度 | K1-1 释放 App 锁 | | 3 | K1-3 成就契约修复 | 结算已接但 3 条条件与文案不符 | X1 回执稳定结算 context | | 4 | K1-4 单域内容扩容 | 只在消费链和测量基线成立后选择 | K1-1~3 实际证据 |

F1 失败域在正式回执到达后补审计附录;回执前不与活动代码比较数量。


6. 证据命令

node --import tsx --eval <event table registration/count audit>
node --import tsx --eval <buff definition/reserved/target audit>
node --import tsx --eval <run achievement/config audit>
rg -n "summarizeBuffs|GAME_EVENTS|RUN_ACHIEVEMENTS" src/**

审计结果只用于派工选择;执行 lane 仍需自己的定向测试、build、lint、浏览器证据和回退面。