From 9f1507dcca873fe120083a941d12ccb7b6454b75 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 15 Sep 2026 20:47:49 +0800 Subject: [PATCH] =?UTF-8?q?del(docs):=20=E6=97=A7=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design/archive/gdd-2026-09-14/README.md | 5 - .../gdd-2026-09-14/a1-board-generation.md | 446 ----------- .../gdd-2026-09-14/a2-minesweeper-rules.md | 504 ------------- .../gdd-2026-09-14/a3-action-economy.md | 431 ----------- .../gdd-2026-09-14/a4-terrain-variation.md | 478 ------------ .../a5-minesweeper-aux-items.md | 467 ------------ .../analysis/a1-board-generation.md | 310 -------- .../analysis/a2-minesweeper-rules.md | 302 -------- .../analysis/a3-action-economy.md | 191 ----- .../analysis/a4-terrain-variation.md | 160 ---- .../analysis/a5-minesweeper-aux-items.md | 239 ------ .../gdd-2026-09-14/analysis/b1-settlement.md | 310 -------- .../analysis/b2-enemy-system.md | 335 --------- .../analysis/b3-status-effect.md | 282 ------- .../analysis/b4-reward-item-economy.md | 298 -------- .../analysis/c2-adventure-structure.md | 148 ---- .../analysis/c3-difficulty-curve.md | 213 ------ .../analysis/d1-hud-framework.md | 224 ------ .../gdd-2026-09-14/analysis/d2-data-config.md | 196 ----- .../archive/gdd-2026-09-14/b1-settlement.md | 692 ------------------ .../archive/gdd-2026-09-14/b2-enemy-system.md | 362 --------- .../gdd-2026-09-14/b3-status-effect.md | 505 ------------- .../gdd-2026-09-14/b4-reward-item-economy.md | 549 -------------- .../gdd-2026-09-14/c2-adventure-structure.md | 304 -------- .../gdd-2026-09-14/c3-difficulty-curve.md | 456 ------------ .../gdd-2026-09-14/d1-hud-framework.md | 681 ----------------- .../archive/gdd-2026-09-14/d2-data-config.md | 611 ---------------- design/archive/gdd-2026-09-14/game-concept.md | 157 ---- design/archive/gdd-2026-09-14/game-pillars.md | 29 - .../gdd-cross-review-2026-09-14.md | 116 --- design/archive/gdd-2026-09-14/gdd.md | 137 ---- .../reviews/a1-board-generation-review-log.md | 49 -- .../a2-minesweeper-rules-review-log.md | 34 - .../reviews/a3-action-economy-review-log.md | 149 ---- .../a4-terrain-variation-review-log.md | 77 -- .../a5-minesweeper-aux-items-review-log.md | 35 - .../reviews/b1-settlement-review-log.md | 17 - .../reviews/b2-enemy-system-review-log.md | 62 -- .../reviews/b3-status-effect-review-log.md | 51 -- .../b4-reward-item-economy-review-log.md | 83 --- .../c2-adventure-structure-review-log.md | 64 -- .../reviews/c3-difficulty-curve-review-log.md | 46 -- .../reviews/d1-hud-framework-review-log.md | 39 - .../reviews/d2-data-config-review-log.md | 45 -- .../d2-data-config.pre-revision-2026-09-07.md | 232 ------ ...l-reward-polarity-2026-09-13-review-log.md | 23 - .../archive/gdd-2026-09-14/systems-index.md | 381 ---------- 47 files changed, 11525 deletions(-) delete mode 100644 design/archive/gdd-2026-09-14/README.md delete mode 100644 design/archive/gdd-2026-09-14/a1-board-generation.md delete mode 100644 design/archive/gdd-2026-09-14/a2-minesweeper-rules.md delete mode 100644 design/archive/gdd-2026-09-14/a3-action-economy.md delete mode 100644 design/archive/gdd-2026-09-14/a4-terrain-variation.md delete mode 100644 design/archive/gdd-2026-09-14/a5-minesweeper-aux-items.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/a1-board-generation.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/a2-minesweeper-rules.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/a3-action-economy.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/a4-terrain-variation.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/a5-minesweeper-aux-items.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/b1-settlement.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/b2-enemy-system.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/b3-status-effect.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/b4-reward-item-economy.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/c2-adventure-structure.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/c3-difficulty-curve.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/d1-hud-framework.md delete mode 100644 design/archive/gdd-2026-09-14/analysis/d2-data-config.md delete mode 100644 design/archive/gdd-2026-09-14/b1-settlement.md delete mode 100644 design/archive/gdd-2026-09-14/b2-enemy-system.md delete mode 100644 design/archive/gdd-2026-09-14/b3-status-effect.md delete mode 100644 design/archive/gdd-2026-09-14/b4-reward-item-economy.md delete mode 100644 design/archive/gdd-2026-09-14/c2-adventure-structure.md delete mode 100644 design/archive/gdd-2026-09-14/c3-difficulty-curve.md delete mode 100644 design/archive/gdd-2026-09-14/d1-hud-framework.md delete mode 100644 design/archive/gdd-2026-09-14/d2-data-config.md delete mode 100644 design/archive/gdd-2026-09-14/game-concept.md delete mode 100644 design/archive/gdd-2026-09-14/game-pillars.md delete mode 100644 design/archive/gdd-2026-09-14/gdd-cross-review-2026-09-14.md delete mode 100644 design/archive/gdd-2026-09-14/gdd.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/a1-board-generation-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/a2-minesweeper-rules-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/a3-action-economy-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/a4-terrain-variation-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/a5-minesweeper-aux-items-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/b1-settlement-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/b2-enemy-system-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/b3-status-effect-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/b4-reward-item-economy-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/c2-adventure-structure-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/c3-difficulty-curve-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/d1-hud-framework-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/d2-data-config-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/d2-data-config.pre-revision-2026-09-07.md delete mode 100644 design/archive/gdd-2026-09-14/reviews/proposal-reward-polarity-2026-09-13-review-log.md delete mode 100644 design/archive/gdd-2026-09-14/systems-index.md diff --git a/design/archive/gdd-2026-09-14/README.md b/design/archive/gdd-2026-09-14/README.md deleted file mode 100644 index 1b1d5003..00000000 --- a/design/archive/gdd-2026-09-14/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# 旧版 GDD 体系归档(2026-09-14) - -本目录是 2026-09-14 前的旧版 GDD 体系,已封存只读、不再维护。 -现行文档见 `design/gdd/`。 -已锁数值事实源以 `design/registry/entities.yaml` 与 `data/tables/` 为准,本目录不作事实引用。 diff --git a/design/archive/gdd-2026-09-14/a1-board-generation.md b/design/archive/gdd-2026-09-14/a1-board-generation.md deleted file mode 100644 index f9a95a98..00000000 --- a/design/archive/gdd-2026-09-14/a1-board-generation.md +++ /dev/null @@ -1,446 +0,0 @@ -# A1 扫雷棋盘生成(Board Generation) - -> **状态**:In Revision · 待 delta 复核放行 · **版本**:v2 · 2026-09-14 -> **一句话**:从 (level_index, node_depth) 出发确定性生成完整扫雷棋盘,并在生成时刻承诺可推理率门槛。 -> **推演件**:`design/gdd/analysis/a1-board-generation.md`(本文件只收结论,理由在那里) - -## 设计目的 - -扫雷图的唯一生产者:五阶段确定性生成管线,为 A2/B1 提供自洽棋盘与生成期指标,为 P1"每一步都算数"提供生成端保障。缺位则游戏没有难度轴、A4 变异无布置载体、C3 曲线无落点。 - -1. 每张图在生成时刻承诺:从初始安全区出发、不靠赌能挖开的格子占比不低于该行及格线——玩家输给自选的赌(雾区/终局盲猜),不输给不可解的局。 -2. 落点安全:出生 3×3 与其生成期可达域恒无雷、恒无变异。 -3. 难度物质随 (level_index, node_depth) 上行——雷密、尺寸、雾占比由参数行直接雕刻。 -4. 同种子同参数必产同图——回放、测试、复盘精确复现。 -5. 参数组合退化时玩家永不卡死——降级出图并告警暴露,而非死锁。 - -## 系统范围 - -负责: - -- 五阶段生成算法与生成-验证验收算子 -- BoardGenTable schema 与数值回填(首个进度键表) -- 可推理率度量口径(F1)与双判据达标判定(F5) -- 雾参数域/可行性/成本谓词(F2/F2b/F2c)与加载期校验 -- 清图预算增量构成(F3)与批量统计断言口径(F4) -- A4 变异约束的生成期强制执行(A4×15 清单唯一执行落点) -- 八项生成期指标集的产出 - -不负责: - -- 挖掘执行(A2) -- 换图编排与 attempt 边界的编排侧断言(B1——A1 仅被调用) -- 难度曲线数值与调参(C3——仅类型依赖 schema,禁反向调用生成) -- 变异约束声明与候选池谓词出具(A4——A1 只消费 variant_pool_gate 并执行) -- dig_ap_cost 价目(A3——只读引用) -- "够不够"的判:清图总预算可用量与全量校验判据(A1/A3 契约与 C3);挖掘风险不等式与弃图支配性的闭合对账(B1 单一 owner——A1 只供给 actuals 分布锚值,非 target 参数) -- 推理器/布置算法实现选型(实现期 ADR——本 GDD 只冻结行为契约) -- 战斗侧/奖励定价/biome 词表(B1/B2/B3/B4/C1/D1——board_biome 仅为非空 StringSet 数据字段) -- 呈现(D1/A2/B5) - -## 核心循环 - -``` -generate(level_index, node_depth, rng) -> Board + 生成期指标集 - │ ① 参数解析 ── BoardGenTable 行(D2 R1 floor 解析;域/跨字段谓词加载期已校验) - ▼ - ② 布雷 ──────── N = round(mine_density × (W×H − 9)) (先定数,9 = 出生 3×3 恒排除) - │ 在"全格 − 出生 3×3"域经 board_gen 流均匀布雷 - │ → 计算 0 格 flood 闭包及外扩 1 环 → 落在环内的雷移除 - │ 【先布后删:只减不增、不重投、无迭代、确定性终止】 - │ 实际雷数 |M| ≤ N;初始 3×3 及可达域内恒无雷;N ≥ 1 由加载期谓词保证 - ▼ - ③ 变异布置 ──── 先布雷后布雾(雾的 cell_constraint = safe_nonzero 要求雷先就位) - │ 候选池门控 → cell_constraint 生成期强制 → 出生区及可达域排除 - │ → 雾形硬边界(厚度≤2【任意 3×3 窗口非全雾】 / f≤8×mine_density) - │ → 区域参数读行参数(region_count / target_ratio) - ▼ - ④ 生成-验证循环 ─ 布雾完成后测可推理率(F1) - │ 实测 < target → 图内重试(同图种子实例内继续取数,不重开 scope) - │ 上限 max_gen_attempts 次 → 三分支出口(见出口分发表) - ▼ - ⑤ 产出与上报 ── 棋盘 + 八项生成期指标集 -``` - -| 出口 | 触发 | 行为 | 埋点 | -|---|---|---|---| -| 达标即出 | 存在合法尝试满足两项判据(inferability ≥ target ∧ inferability_core ≥ target) | 出最早达标尝试 k*(非全局 argmax) | attempts_used 记录 | -| 接受最优 | attempts 用尽、无达标但有合法尝试 | 出合法集内 inferability 最高者(tie 取最早、零额外取数)+ 降级标记 | 强告警埋点——运行期不死锁、开发期暴露参数问题 | -| 接受最不坏 | attempts 用尽且零合法尝试 | 确定性劣度字典序(不可达安全格数, min_safe 缺口, 序号)最小者出图 + 非法产物标记 | 最高级告警——玩家永不卡死,红线由 F4 断言 A′ 批量守 | - -## 生成管线与随机流纪律 - -规则: - -1. 生成器在每次被调用时按固定五步跑完——读参数、布雷、布雾布变异、自检重试、交货;顺序冻结,不调换、不跳步。 -2. 布雷时先按密度定死雷数 N = round(mine_density × (W×H−9)),再在"全格 − 出生 3×3"域均匀落位;0 格 flood 闭包外扩 1 环内的雷落完后移除——只减不增、不重投、无迭代;实际雷数 |M| ≤ N,漂移量入指标集观测;加载期拒绝 N < 1 的零雷板。 -3. 生成一张图期间的每一次随机取数——布雷、雾形、选变异、重试——都从同一条 board_gen 流按顺序取;一张图只 open_stream 一次、用到底;流之外零随机,randomize() 禁用(静态扫描 AC-18);不重开 scope,attempt 边界 = 生成函数完整返回。 -4. 行参数在生成开始时单次读取快照,生成期内不重读;生成期间表热重载不影响进行中的生成(EC7)。 -5. 推理器/生成器内部异常(crash/不变式违例)一律 fatal 中止 + 告警——实现缺陷 fail-fast,不降级(EC10,与参数性降级区分)。 -6. 同帧两次生成请求顺序串行、各自 open_stream 取号,不引入锁(EC14)。 - -五阶段失败语义: - -| 阶段 | 失败条件 | 语义 | -|---|---|---| -| 参数解析 | 行缺失 / 参数域违例 | 加载期校验已拦(D2);运行期不失败 | -| 布雷 | N = 0 | 运行期不失败(域内 N ≥ 1 恒可布,零雷板加载期已拒) | -| 变异布置 | cell_constraint 无解 | 静默降级:跳过变异、产物合法、shortfall 上报 | -| 验证循环 | 三分支(F5) | 达标即出 / 接受最优 + 强告警 / 接受最不坏 + 最高级告警 + 非法产物标记 | -| 产出 | —— | 棋盘 + 八项指标集 | - -不变式:管线无状态、五阶段顺序冻结、生成期表值单次读取、attempt 边界 = scope 事件边界(重试不产生新取号);B1 编排不得把 attempt 边界当 scope 事件。 - -设计意图:无状态函数 + 单流取号是"同种子同参数必产同图"的根基。 - -## 出生区与可达域 - -规则: - -1. 开局站立的 3×3 出生区保证无雷;从出生区顺 0 格连锁能走到的地方再外扩一圈,构成生成期"可达域"(R₀ = 出生 3×3 ∪ 0 格 flood 闭包,外扩 1 环为保守上界),由生成器按固定定义确定性算出,不依赖挖掘系统运行时行为。 -2. 可达域内永远不放变异;外扩环内可有雷、只禁变异(验收口径 AC-6(a));雾区邻接出生 3×3 合法——约束谓词只管出生 3×3 格集及可达域内无变异格,邻接不构成违反(EC3)。 -3. 挖掘系统实际能展开的范围只会比可达域小、不会比它大——双包含回验登记 A2 GDD:① A2 实际展开域 ⊆ A1 排除域;② A1 求解器初始态 ⊆ A2 实际初始展开域(F1 注记④度量保真对偶;若 A2 定稿展开更小,A1 回退口径 = 出生 3×3 最小态)。 - -设计意图:可达域是"落点安全"与"变异不堵路"的保守几何保证,A4 Rule 7 的执行落点。 - -## 变异布置与雾形边界 - -规则: - -1. 生成器按固定顺序布置变异:先查候选池门控(消费 A4 variant_pool_gate),再把雾格放到允许的位置,最后守雾形硬边界。 -2. 候选池为空(雾未解锁或 biome_tag 全不匹配)时,这张图静默布置为无变异图——空池合法非错误(EC1)。 -3. 雾格只落在"8 邻含雷的非 0 安全格"(cell_constraint = safe_nonzero);出生区与可达域排除在外。 -4. 雾形硬边界:任何 3×3 窗口不许全雾(雾皮厚度 ≤2);雾总量 ≤ 雷数 × 8(f ≤ 8×mine_density);摆几个雾区、每区目标多大读行参数(region_count / target_ratio)。 -5. 布置无解(cell_constraint 连通分量不足)时静默降级:跳过变异、产物为合法无变异图;要求 N 区而实际达成 k Board`(+ 指标集);测试种子经 `derive_at("board_gen", σ)` 纯函数取号;夹具规格、黄金图回归向量协议、out-of-scope deferral 明细见推演件附录(本表沿用原 AC 编号,逐条完整判定口径同原文)。 - -| AC | Given | When | Then | -|---|---|---|---| -| AC-1 | 干净检出(默认根 = MVP 参考行) | 冒烟加载 Core Rules-3 表清单 | ConfigDB Ready:BoardGenTable 含 (1,0)/(2,0) 锚行(不断言行总数);九字段类型域断言;solver_rules = single_subset 唯一值断言;其余八 knob 字段仅域断言(期望由表读值推导);诊断收集器零 error 零 warning | -| AC-2 | BoardGenTable schema class_name 直引程序构造行实例(每腿先 reset_diagnostics()) | validate() 作用于违例集(f>8d · count≥1∧f=0 · f≥1 · count=0∧f=正值 · f=0.30∧d=0.15 超 0.25 上限 · round 后布雷数=0 · attempts×W×H>16384 · F2b 违例 10×10/d=0.10/min_safe=92 · board_biome=∅)与合法集(count=0∧f=0 · f=8×d 恰界 · min_safe 恰界 · biome 占位词非空) | 违例集各含对应致命类别;合法集零诊断 | -| AC-3 | 夹具根 a1_fog_domain / a1_min_safe / a1_biome_empty | 各以独立 headless 进程跑游戏通道 load_tables(root, collect_only=false) | 三进程均非 0 退出且错误清单完整;runner manifest 登记三项 →≠0 | -| AC-4 | 默认根 L2 行与登记种子 σ₀ | generate(2, 0, rng) 以 derive_at("board_gen", σ₀) 播种流执行两遍;再以 σ₁≠σ₀ 同行生成 | 两遍产物格状态逐格相同 + 八项指标集全等(含 attempts_used);σ₁ 产物与 σ₀ 不全同 | -| AC-5 | set_master_seed(42) 后 RngService 全真路径;夹具根 a1_high_target@2 | 以第 1、2 次 open_stream("board_gen") 实例分别驱动 generate;前后读只读计数器;同帧连续两次 generate(EC14) | 产物与 derive_at("board_gen", 0/1) 播种产物逐格相同;计数器差恰 1(重试不重开取号);同帧计数器差 2、各产物与各自 σ 播种一致(串行无锁) | -| AC-6 | 缩样产物集(默认根 L1·D0/L2·D0 各 N=8;σᵢ = F4 公式缩样版 i∈[0,8)) | 对每板断言 | 全板全腿通过:(a) 出生 3×3 与 R₀ 芯(0 格 flood 闭包,测试侧朴素 BFS 重算)内零雷零变异;外扩 1 环内零变异、环内可有雷(禁断言环内零雷)(b) R₀ 芯内零变异(初始展开不触雾)(c) 雾格 ⊆ cell_constraint 合法集——非雷、非 0、8 邻含雷 (d) 任意 3×3 窗口非全雾 (e) 雾格数 ≤ 8×雷数 (f) \|S\| ≥ min_safe_count 表读值 (g) 非雷格数字 ≡ 8 邻雷数 (h) 全板零非法产物标记 | -| AC-7 | Board class_name 直引程序构造板 | 合法性谓词作用于:雷墙包围孤立安全格板;\|S\|0 搜索种子,协议同 AC-12) | (a) 检查指标集;(b) generate | (a) 指标集含实际达成区数(shortfall)字段且 ≤ fog_region_count 表读值;(b) 降级标记=雾布置降级、shortfall < count 表读值、产物仍过 AC-6 全腿、error 级诊断零新增(静默降级——warning/埋点级不算违静默) | -| AC-16 | 任意冒烟产物(AC-6/10/14/15 批次复用) | 指标完备性检查 + F1/F3 重算 | 八项指标字段完备(实际 inferability 含 metric_version=1 / inferability_core / 实际雾占比 = \|F\|÷(W×H) / 实际雷数与实际 \|S\| 并断言 \|M\| ≤ round(d×(W×H−9)) 表读值 / fog_burden_ratio / Δbudget_fog / attempts_used / 降级标记含非法产物标记+shortfall);inferability_core = \|R∞∖F\|÷max(1, \|S∖F\|) 重算一致;从产物重算 Chain₀/U → Δbudget_fog = \|U\|×dig_ap_cost(A3 表读值)、fog_burden_ratio 以整数对 (\|U\|, max(1, \|S∖Chain₀\|)) 比对;fog_region_count=0 行雾相关四值恒 0 且 core = inferability | -| AC-17 | ConfigDB 加载完成(registry board_gen_table 条目与本 AC 同批回填——条目缺位即失败,非条件豁免) | 脚本解析 design/registry/entities.yaml 的 board_gen_table 条目 | 与 BoardGenTable 九字段定义(字段名/类型/域/knob 标记)逐一相等;值对账仅限非 knob 字段(solver_rules=single_subset);八 knob 字段值不对账(C3 调参豁免) | -| AC-18 | A1 文件集(生成器/度量入口/谓词/schema/冒烟脚本) | 按 D2 AC-9 模式静态扫描 | 玩法代码文件集零 randomize()、零自建 RandomNumberGenerator 构造(tests/ 路径豁免,玩法文件集不豁免);零 ConfigDB 外 data 表加载(schema class_name 直引豁免);零 Control/场景类 import;AC-1 headless 实跑通过合成判定 | -| AC-19 | A1 文件集 | 纳入 D2 AC-14 项目级人工三要素字面量扫描 | 人工三要素口径——无未登记字面量 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排为 design(只收结论)+ analysis(`design/gdd/analysis/a1-board-generation.md`,收全部推演)——规则/枚举/公式结论/AC/EC/依赖/义务台账全部保留原编号与原值;推导论证、候选取舍、体验锚点论证、测试口径详表与覆盖矩阵移入 analysis;零规则变更、零数值变更 | -| v1.1-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例(docs/lean-gdd-sample-b1.md)重排——正文修订注记剥离收敛至本表;速览/体验锚点/枚举/边界情况/义务台账/覆盖矩阵/AC 转表格;生成管线转字符画 + 出口分发表;F1–F5 公式本体、Variables 与验算数据全保留;语义与 2026-09-09 修订批对齐,零规则变更 | -| 2026-09-09 修订批 | 2026-09-09 | full /design-review 判 MAJOR REVISION NEEDED,8 条 blocking 同日修订:两项达标判据 + inferability_target 收窄 [0.85,1] 绝对锚;AC-6(a) 改写(环内可有雷);雷数取整钉死 + 布雷语义(先布后删)+ N≥1 零雷护栏;F2 ≡ Schema 跨字段校验合流(count=0 ⇒ f=0 腿);AC-11 前提腿(Lm(1)≠∅);断言 B 收紧为达成区占比;第三轴登记约定 + elite_/boss_ 后门;F2c 成本闸 16384 + 禁墙钟。cheap-now 包:σ 打包修复(10^9 + 2^20·L + 2^12·D)、F1 注记③改口(雾格入分子两通道)、\|U\|÷\|F\| 删承诺、monotone_in_depth + 断言 E、EC5 玩家侧语义登记。覆盖矩阵"无洞"自称修正为 5 处标注问题(已修 4 处,差分两项登记待核销)。日志:design/gdd/reviews/a1-board-generation-review-log.md | -| v1 定稿 | 2026-09-08/09 | 一次会话定稿:五阶段管线 + F1–F5 + 三轴分离口径 + 19 条 AC + A4×15 逐项映射;四结构决策(生成-验证循环 / 接受最优 + 零合法接受最不坏 / 推理域 single_subset 冻结 / 密度浮点)与 F4 严格零红线为用户拍板;lean 门禁 CD-GDD-ALIGN 跳过,生产前人工复核体验锚点情绪定位 | diff --git a/design/archive/gdd-2026-09-14/a2-minesweeper-rules.md b/design/archive/gdd-2026-09-14/a2-minesweeper-rules.md deleted file mode 100644 index a8e50a85..00000000 --- a/design/archive/gdd-2026-09-14/a2-minesweeper-rules.md +++ /dev/null @@ -1,504 +0,0 @@ -# A2 排雷玩法规则(Minesweeper Rules) -> **状态**:Approved · **版本**:v2.0 · 2026-09-14 -> **一句话**:持有 A1 棋盘、执行全部棋盘面规则,把事实以恰好三种事件外发——全项目事件源头。 -> **推演件**:`design/gdd/analysis/a2-minesweeper-rules.md`(本文件只收结论,理由在那里) -> **承载支柱**:P1 主 · P4 · P3 · P2(机制承诺论证见推演件) -> **层级**:Layer 2 Core · Milestone MVP · 设计顺序第 6 位(上游 A1/A3/A4/D2 均 Approved) - -## 设计目的 -A2 是扫雷层的玩法规则引擎与全项目事件源头:接收玩家动作意图(挖/插旗/拔旗/移动/停手),执行全部棋盘面规则,把发生的事实以恰好三种事件外发;没有 A2,A1 的板、A3 的预算、B1 的结算都失去发生地。 - -1. P1"我算对了":数字恒真透传(雾格只是不显示,数据层永不说谎)、连锁传播与生成端度量同构、每个拒绝携带可辨原因——系统回应的每一格都与玩家推演一致。 -2. P4"走过的伤疤":小人从出生安全区向雷图边缘探索,点击已探明区瞬移穿行、在未开边界挖掘,已引爆雷格可通行——雷不是探索终点,是走过的伤疤。 -3. P3"赌与算都可见":挖开雷格是事实上报而非死亡,旗是零信息收益的纯粹承诺(雾内旗恒不中也被诚实判定)——A2 不裁决得失,只保证事实流真实。 -4. P2"结算可归因":结算明细每行归因(安全格增益/标中旗削弱/雷→伏击/清图奖励)都溯源到 A2 事件流——reward_eligible / channel / hit 是归因的字段落点。 - -反向护栏:任何"规则层说谎"形态——数字失真、连锁静默变异分支、拒绝原因含混——默认砍掉;呈现层的隐藏(雾格无字)必须以数据层恒真为前提。 - -## 系统范围 -负责: - -- 全部棋盘面规则:小人控制 · 8 向相邻判定 · 连锁展开 flood fill · 数字提示 · 旗子棋盘状态 · 清图判定 -- 三事件发射面(cell_revealed / flag_judged / round_end 棋盘路径)与"先旗后结束"事件序契约 -- 批次结算入口 settle_batch 与语义序仲裁;install 四条结构不变式校验与初始展开执行 -- F1–F4 四条行为契约(清图谓词 / 连锁闭包 / 初始展开域 / 批次仲裁) - -不负责: - -- 资源账本(A3——判棋盘面后调 try_spend,禁自行扣减)· 轮次编排(B1——轮次节拍权威在 A3/B1,A2 以 A3 相位观测量为闸、不自持轮次状态) -- 奖励内容(B4)· 棋盘生成(A1)· 变异规则(A4——只透传生成期快照标记)· 呈现(D1) -- 数值字面量 / 表读取 / RNG / UI 与输入设备依赖(规则 1 四零禁令) - -## 核心循环 -装板与挖掘期事件发射主链: - -``` -install_board(board) 受理域 = Idle/Waiting + Active·仅弃图刷新路径 - │ ① 持有产物快照(生成期变异快照,非活引用——抗表重载) - │ ② 校验结构不变式 ①–④ ── 违例 → 拒绝 + board_invalid + error 诊断(fail-fast) - │ ③ 初始展开 O₀ = R₀ → cell_revealed ×|R₀|,channel=initial,规范序 - │ ④ 小人落位 B3 中心格 - ▼ -Installed·Active ── 挖掘期:玩家意图经 D1 → settle_batch(intents)(A2 唯一结算入口) - │ dig 棋盘面判定 → A3 try_spend → 开格 + 连锁 → cell_revealed ×(1+chain_size) - │ flag try_spend → 棋盘旗标记(插/拔零事件外发,反馈经调用返回值命令式驱动) - │ move 免费瞬移(不经账本,零事件;compute_move_path 供 D1 路径预览) - │ stop 先发 flag_judged ×N → 委托 A3.request_stop() - ▼ -轮次结束事务(A3 仲裁:cleared > stopped > ap_exhausted——首次为真处定胜者,余意图 voided) - │ flag_judged ×N(判定基线 = 事务开始旗位,行主序;先于 round_end——事件序契约) - │ 棋盘路径:A2 读 last_round_end 恰一次 → round_end{ap_exhausted/cleared} 外发 - │ stopped 路径:A3 直发 round_end{stopped}(双发射源——A2 禁双发) - ▼ -Installed·Frozen ── Waiting:全态冻结;编排边界受理 install_board(换新图)/ retire_board -``` - -| 出口 | 触发 | 动作 | RAP | -|---|---|---|---| -| cleared | dig 胜 ∧ 结算时点 clears_map=true | A2 外发 `(cleared, new_board)` 恰一条(棋盘路径) | +0(剩余 AP 清零不入 RAP——A3 Rule 5) | -| stopped | C_stop 胜 | 先发 flag_judged ×N → 委托 A3.request_stop() → round_end`(stopped, same_board)` 由 A3 直发 | += remaining_ap(1:1) | -| ap_exhausted | 耗尽 AP 的 C_other | A2 外发 `(ap_exhausted, same_board)` 恰一条 | +0(不变式 remaining=0) | -| 继续 | 不结束轮次 | 无 round_end,继续下一意图 | — | - -## 事件面与枚举 -### 术语表(白话首定义集中于此;已登记 registry 术语条目) -| 术语 | 白话定义 | -|---|---| -| 双包含回验 | A1 与 A2 互检两条包含关系——臂① A2 实际初始展开域 ⊆ A1 生成期排除域(开局不触雷不触变异);臂② A1 求解器初始可见态 ⊆ A2 实际初始展开域(A1 度量不吃亏)。恰等 = 两集合逐格相等 | -| 零特判 | A2 代码不为变异写任何 if 分支——变异只是随格携带的只读标记透传,行为差异全部由生成端约束保证 | -| 规范序 | 事件发射的固定顺序(触发格 BFS、8 邻行主序)——同输入必得同顺序,禁实现自选遍历序 | -| 语义序仲裁 | 批次内不按玩家提交顺序、而按"清图挖 > 停手 > 其余"的固定类别顺序结算 | -| 双发射源 | round_end 有两个合法发射者——棋盘路径(ap_exhausted/cleared)由 A2 发、停手路径(stopped)由 A3 直发,payload 同构 | -| 三源拒绝 | 拒绝原因来自三个互异来源——棋盘面(board_face)/ 资源面(resource_face,AP 不足)/ 相位(phase,非 Active) | -| 单意图批 / 便捷形 | settle_batch 只装一个意图时 ≡ 直接调 try_dig 等便捷 API,行为逐项相同 | -| voided | 轮次结束后未获执行的批次意图——零棋盘效果、零扣费、零事件,区别于非法拒绝 | - -### 发言面规则 -规则: - -1. (规则 1)A2 引擎吃两样输入——A1 产出的棋盘、玩家提交的意图序列,吐一样输出——三种事件组成的事实流;同棋盘同意图序列必得逐位相同的事件流,为此守四零禁令:零随机(不掷骰子、不自建随机源)、零数值字面量(价格读账本、板面读生成产物、变异随格快照携带)、零表读取(参数全经上游)、零界面与输入设备依赖(唯一通道是意图对象,`--headless --script` 完整可驱动)。 -2. (规则 2)A2 对外只报三种事实——每挖开一格报一次 cell_revealed,轮次结束事务开始时对每面在场旗报一条 flag_judged(判中/判空),轮次结束报一次 round_end(停手路径由 A3 直发,A2 禁双发);多一个事件、少一个事件都是接口漂移;同一次收轮先把旗判定全部报完再报轮次结束,所有收轮路径统一(停手路径一样:先报旗判定、再委托收轮,停手不改旗位)。 - -举证:确定性、零字面量与 headless 可驱动依据 D2 Rule 5/1/7;静态扫描 AC-22、回放断言 AC-19/AC-20;payload 验收 AC-4/6/7/8/9,事件序契约 AC-9/AC-10;下游结算触发不依赖事件到达序(B1 强制项①)。 - -### 三事件回边(发射面封闭——增删事件 = 接口漂移修订) -| 事件 | 字段 | 发射点 | 语义要点 | -|---|---|---|---| -| cell_revealed | cell · kind ∈ {safe, mine} · digit · variant_ids · channel ∈ {initial, chain, dig} · reward_eligible | 开格事实 | digit 恒真透传(仅 kind=safe 携带;雾格携带真实数字、呈现隐藏归 D1、判定数据源 = variant_ids);reward_eligible:initial 恒 false / chain·dig ∧ safe 恒 true(含链开雾格)/ kind=mine 恒 false;发射序 = 规范序(初始/连锁 = 触发格 BFS、8 邻行主序固定序) | -| flag_judged | cell · hit | 轮末统一判定批 | 每轮次结束事务开始时对判定基线旗位逐旗一条(基线 = 轮次结束事务开始时的旗位;枚举序 = 行主序扫描,确定性) | -| round_end | path_tag ∈ {ap_exhausted, cleared, stopped} · continuation_hint ∈ {same_board, new_board} | 棋盘路径由 A2 外发 | 核心字段逐字段取自 A3 `last_round_end`(读取权为接口契约),与 A3 stopped 路径 payload 同构;stopped 路径由 A3 直发、A2 禁双发 | - -### 字段值封闭枚举 -| 字段 | 值域 | 语义 | -|---|---|---| -| kind | safe · mine | 开格种类;kind=mine 事件无 digit 字段 | -| channel | initial · chain · dig | initial=初始展开(恒无奖励)· chain=连锁 · dig=单格 | -| reward_eligible | bool | initial 恒 false;chain/dig ∧ kind=safe 恒 true(含链开雾格);kind=mine 恒 false | -| path_tag | ap_exhausted · cleared · stopped | 棋盘路径仅前两者由 A2 外发;stopped 由 A3 直发(双发射源) | -| continuation_hint | same_board · new_board | cleared → new_board;其余 same_board | -| hit | bool | [cell ∈ M];被拔的旗不判;雾内旗恒 false(零特判) | -| intent | dig · flag_place · flag_pull · move · stop | stop 执行 = 批事务内委托 A3.request_stop | -| reject_reason | board_face · resource_face · phase · board_invalid | 三源拒绝 + 装板违例 | - -### 三源拒绝与 board_face 拒绝目录 -| 源 | 判定 | 承载 | -|---|---|---| -| board_face | 挖:目标非 8 向相邻 / 目标已开 / 目标有旗(须先拔旗)· 插旗:非相邻 / 已开 / 已有旗 · 拔旗:非相邻 / 无旗 · 移动:目标未开 / 无 BFS 路径;目录外输入(越界坐标等)= out_of_catalog | sub_reason 封闭枚举(见下表) | -| resource_face | A3 try_spend 返回 false(AP 不足) | reject_reason=resource_face | -| phase | A3 非 Active 或无板态 | reject_reason=phase | - -### sub_reason(仅 board_face 携带,封闭枚举——"须先拔旗"与"非相邻"玩家语义截然不同,必须数据可分;批后修改 = 接口漂移) -| 值 | 语义 | 适用动作 | -|---|---|---| -| not_adjacent | 目标非 8 向相邻 | 挖 / 插旗 / 拔旗 | -| target_revealed | 目标已开 | 挖 / 插旗 | -| target_concealed | 目标未开 | 移动 | -| flag_present | 目标已有旗(挖 = 须先拔旗;插 = 已有旗) | 挖 / 插旗 | -| flag_absent | 目标无旗 | 拔旗 | -| no_path | 经已开区无 BFS 路径 | 移动 | -| out_of_catalog | 目录外输入(越界坐标等)——debug 级诊断,不与玩家语义混桶、禁静默吞 | 全部 | - -### 装板违例诊断类别(board_invalid 携带,封闭枚举) -| 值 | 对应不变式 | -|---|---| -| inv1_mine_in_spawn | ① B3 内无雷 | -| inv2a_variant_in_spawn | ② B3 内无变异格 | -| inv2b_variant_in_r0 | ② R₀ 内无变异格("R₀ 触雾"归此——②的 R₀ 子情形) | -| inv3_digit_invariant | ③ 数字恒真 | -| inv4_r0_equals_s | ④ R₀ ≠ S | - -### 对外 API 面(provisional,封闭枚举——新增入口 = 接口漂移) -| API | 签名 | 语义 | -|---|---|---| -| install_board | `install_board(board)` | 装板 + 校验四不变式 + 初始展开 | -| settle_batch | `settle_batch(intents)` | A2 唯一结算入口(D1 唯一提交入口;单意图批 = 平凡形) | -| try_dig / try_flag_place / try_flag_pull / try_move | `try_*(cell)` | 便捷形 ≡ 对应单意图批,行为逐项相同 | -| compute_move_path | `compute_move_path(cell)` | 只读——BFS 路径(8 邻行主序);不可达格返回空 | -| retire_board | `retire_board()` | 板实例与变异快照消亡(NoBoard 下幂等受理) | -| ActionOutcome | `{accepted, outcome, reject_reason, sub_reason}` | outcome ∈ {executed, voided, rejected};sub_reason 仅 board_face 携带 | - -## 棋盘状态·装板与初始展开 -### 板态 -| 板态 | 进入条件 | 行为/出口 | -|---|---|---| -| NoBoard | 冷启动 / `retire_board()` 后 | 全部动作 API 拒绝(phase 源);`install_board` 受理(Idle/Waiting);retire_board 幂等受理 | -| Installed·Active | 装板完成 ∧ A3 phase=Active | 接受全部动作意图;dig/旗经 `try_spend`,移动免费直达;弃图刷新 = retire + install(B1 `refresh_board` 编排,装板后回本板态);轮次结束事务 → Installed·Frozen | -| Installed·Frozen | A3 phase=Waiting(三路径任一收轮) | 全部动作意图拒绝(phase 源);棋盘/旗/小人全态冻结;`install_board`(换新图)/`retire_board` 受理(编排边界) | -| Retired | `retire_board()` 或战斗终结后编排调用 | 旗/小人/事件分段终结(事件捕获以 install 为段界)——板实例与变异快照一同消亡 | - -### 输入 × 相位 × 板态矩阵(动作意图 ∈ {dig, flag_place, flag_pull, move, stop};编排调用 ∈ {install_board, retire_board}) -| 输入 | NoBoard | Installed·Active | Installed·Frozen | -|---|---|---|---| -| 动作意图(含 stop) | 拒绝(phase) | 受理(经批次结算器) | 拒绝(phase;A3 侧按同一致相位矩阵同判——两侧判定一致) | -| install_board | 受理(Idle/Waiting) | 受理(仅弃图刷新路径——B1 `refresh_board` 编排;非刷新路径仍拒绝——防轮内换板) | 受理(换新图 = 全态重置 + 初始展开重放) | -| retire_board | 幂等受理 | 拒绝(板态) | 受理 | - -### 装板与初始展开规则 -规则: - -1. (规则 3)install_board 在 Idle/Waiting 相位受理,挖掘进行中只有"弃图刷新"这一条编排路径例外(以账本扣费成功为前提),其余在局内装板一律拒绝;受理后 A2 持有生成期变异快照(非数据表活引用,热重载改表不影响行为),当场验四条结构不变式,任一不过即拒绝装板并给出 board_invalid 错误级诊断,绝不带病运行;验过才执行初始展开、把小人放到出生 3×3 中心格。 -2. (规则 4)装板成功的那一次事务里,A2 免费翻开出生 3×3 加上与之连通的空地闭包(每次装板执行一次、跨轮不重放);这片初始展开域与 A1 生成器求解时的初始视野逐格相等——不多开不少开、不外扩一圈"安全边距";翻开守四条铁律:免费(不扣行动点、账本零写入)、计入清图进度(剩余安全格从这片开完后起算)、无奖励(这些格不发奖励、下游不得入库)、永不触雷触雾(出生区无雷 + 闭包只走安全格,在板上即可独立证明)。 - -举证:四条不变式与诊断类别见下表,受理域见上矩阵;"无奖励格不得入库"下游义务见 B1 强制项②;初始展开定义落点承接 A3 EC5 委派;恰等与双包含证明见 F3 与推演件;验收 AC-1/AC-1b/AC-2/AC-3/AC-16/AC-17。 - -### install 四不变式(violation = 拒绝 + `board_invalid` + error 级诊断,fail-fast 不静默;AC-1b/AC-2 按枚举名断言) -| # | 不变式 | 违例诊断(封闭枚举) | -|---|---|---| -| ① | B3 内无雷 | inv1_mine_in_spawn | -| ② | B3 ∪ R₀ 内无变异格(A4 Rule 7 消费侧兜底;"R₀ 触雾"归 R₀ 子情形) | inv2a_variant_in_spawn / inv2b_variant_in_r0 | -| ③ | 数字恒真——num(x) ≡ 8 邻雷数(A2 全部规则的地基) | inv3_digit_invariant | -| ④ | R₀ ≠ S——清图退化板拒绝(防"初始展开即整图"使轮次棋盘路径出口结构性不可达;生产面由 A1 legality 闸保证,本条为纵深防御、非 A1 clearable 闸复验——不可达安全格板 A2 照常运行) | inv4_r0_equals_s | - -补充不变式:板态仅上述四态;变体属性是格级只读快照(无独立运行期状态机分支于变异/雾——零特判);产物只能经程序构造或 A1 产生,运行期不存在该输入源;A2 以 A3 相位观测量为闸、不自持轮次状态。 - -## 动作规则 -符号约定:U / M / S = 全格集 / 雷集 M ⊆ U / 安全格全集 S = U ∖ M;F / G / O = 雾格集 F ⊆ S / 旗集 G / 已开集 O ⊆ U;B3 = 出生 3×3;num(x) = x 的真实数字(8 邻雷数,数字恒真)∈ {0..8};N₈(x) = x 的 8 邻。 - -规则: - -1. (规则 5)挖/插旗/拔旗三个付费动作,A2 先查棋盘面(目标相不相邻、开没开过、旗位对不对),查过再请资源账本扣行动点;任一边说不行,整个动作被拒绝——棋盘不变、不扣费、不发事件;每次拒绝携带三源之一的可辨原因码(棋盘面/资源面/相位,玩家面文案归呈现层);A2 自己绝不直接扣资源;挖成之后连锁规模与清图事实(chain_size, clears_map)由 A2 上报账本。 -2. (规则 6)挖开数字为 0 的格时,它周围 8 向相邻的未插旗安全格免费连锁全开,一路递推到没有新的 0 格为止;连锁格只花首格挖掘价、照常计入清图进度、奖励资格照常;旗格不入链也不当传播源——旗是玩家可用的"链阻断器"(花 1 AP 插旗保护一格不被误链);雾格可被链开但永不传播(生成端保证雾格数字恒非 0),代码里没有为变异写的分支。 -3. (规则 7)点击任何已开格,小人经已开区一次瞬移到位——逐格走的动画是呈现层的事,规则层一次事务完成落位;合法条件两条:目标格已开、且能只经过已开格 8 向连通走过去("已探明区"含已引爆雷格——走过的雷可以穿行站立);移动免费、不经账本、不发事件;只读查询 compute_move_path 返回同一条寻路路径(固定 8 邻行主序,确定性),既是合法性判定载体、也是呈现层路径预览的数据源。 -4. (规则 8)旗是棋盘状态的一部分:插上的旗跨轮保留、随图存续,换图/刷新/战斗结束随之消失;没有"口袋旗"库存、数量无上限、只能插在未开格上;轮次结束时 A2 对当时在场的每面旗报一条判定——旗下是雷判中、不是雷判空,雾里的旗恒判空(雾区无雷,判定零特判);旗留在雷上就每轮诚实重复报判中,去重是结算侧的事,A2 只报事实;插拔旗本身不发事件,界面反馈走调用返回值。 -5. (规则 11)挖开雷格报一条 kind=mine 开格事件,轮次不结束、格子算已开——从此可以通行:小人能站上去、能穿过它继续挖;雷格不计清图进度、不能再挖、不能再插旗;同一轮可连续挖开多颗雷,每颗都是独立事实;雷格通行是有价捷径:挖已知雷 = 花 1 AP + 给敌方送优势,是玩家主动抄近路的权衡与降级板上的兜底通路,不是免费通道。 -6. (规则 12)本作没有双击快开/数字和弦:点击已开数字格的唯一含义就是移动小人;对外接口是封闭枚举、里面没有快开入口,将来谁想加就是接口漂移修订。 - -举证: - -- 规则 5 依据 A3 Rule 9(禁自行扣减),验收 AC-4/AC-11/AC-21;规则 6 算子见 F2,遇旗逐格行为见 EC17,验收 AC-5/AC-6;规则 7 边界见 EC14,呈现归属归 D1,验收 AC-14。 -- 规则 8 价目见下表,判定字段见三事件回边,兑付去重归 A3 Rule 8/OQ5,挪旗价目见 A3 EC3/EC7,验收 AC-11/12/13;规则 11 验收 AC-15、边界 EC10;规则 12 负空间验收 = API 封闭枚举"无对应入口",chord 首遇提示归 D1 强制项③,行为验收 AC-4。 - -| 旗动作 | 花费 | 发生什么 | -|---|---|---| -| 插旗 | 1 AP | 未开格上立一面旗 | -| 拔旗 | 1 AP | 旗从棋盘移除 | -| 挪旗 | 2 AP(拔 + 插) | 旗换个位置 | -| 挖有旗的格 | 拒绝 | 须先拔旗(1 AP)再挖 | - -## 批次结算与收轮 -``` -settle_batch(intents) ── 单一结算事务(到达序 ⟨I₁,…,Iₙ⟩,n ≥ 1) - │ ① 分类 class(I)(批次初态求值):C_dig(执行后 clears_map=true 的 dig) - │ · C_stop(stop)· C_other(非清 dig / flag×2 / move)——真模拟 F2,禁计数器捷径 - │ ② 语义序 ≺:C_dig ≺ C_stop ≺ C_other;同类内按到达序(稳定序) - │ ③ 逐意图执行;轮次结束首次为真处定胜者 ω - │ 其后意图全部 voided——零棋盘效果 · 零 AP 扣减 · 零事件(区别于非法拒绝) - ▼ -胜者 ω → 出口分发(见核心循环节出口分发表) -``` - -| 类别 | 成员 | 结算次序 | -|---|---|---| -| C_dig | dig 且执行后 clears_map = true(真模拟 F2——禁"rem=1 则任意 dig 必清"计数器捷径,反例 = 挖雷不入 S) | 最先 | -| C_stop | stop | 次之 | -| C_other | 非清 dig / flag ×2 / move | 其余(同类内按到达序——稳定序,多 cleared-dig 时最先者执行胜出) | - -四组合真值表(≡ A3 Rule 3 优先级 cleared > stopped > ap_exhausted): - -| # | 批次(到达序) | 结果 | RAP | -|---|---|---|---| -| 1 | [dig清, stop] | (cleared, new_board),stop voided | +0(voided) | -| 2 | [stop, dig清] | 语义序重排 → 同 #1 | +0 | -| 3 | [stop, dig耗] | (stopped, same_board),dig voided | += remaining | -| 4 | [dig耗, stop] | 语义序重排 → 同 #3 | += remaining | - -规则: - -1. (规则 9)一帧多个指令全部经批次入口 settle_batch 提交——A2 唯一结算入口,单意图批等价于逐个调便捷接口;批次是整体事务:先按固定类别顺序重排(能清图的挖最优先、停手次之、其余殿后,同类内按提交顺序),再逐个执行,轮次结束条件第一次成立处定出胜者,其后意图全部 voided——零棋盘效果、零扣费、零事件;voided 不等于被拒绝——拒绝是"本来就不合法",voided 是"来不及了";停手指令经批次入口转交资源系统,停手轮的结束事件仍由资源系统直发。 -2. (规则 10)一次挖掘结算让资源系统仲裁出轮次结束(行动点耗尽或清图胜出)时,A2 读取资源系统的轮次结束记录、组装恰一条轮次结束事件外发,外发之前先把本轮旗判定全部报完;行动点归零的瞬间轮次即结束——不存在"0 行动点还能操作"的窗口。 - -举证: - -- 规则 9:优先级口径与 A3 Rule 3 逐项一致,承接 A3 EC4 deferral;RAP 记账随胜者(键 = 胜者意图类型 × 结算时点 clears_map 真值);stop 经 settle_batch 提交、不直调 A3 的接线义务见 D1 强制项①;验收 AC-9/AC-10,边界 EC6/EC13/EC15。 -- 规则 10:组包即字段转抄——核心字段逐字段取自 A3 `last_round_end`;验收 AC-7/AC-8;清图轮剩余 AP 清零不入 RAP 见 A3 Rule 5。 - -## 行为契约(F1–F4 数值结论) -口径总纲:F1 定终局判定谓词(状态轴)、F2 定连锁展开算子(执行轴)、F3 定初始展开域(对偶轴——A1 度量与 A2 行为的接缝)、F4 定批次仲裁(事务轴)——四条均为行为契约,禁互相折算;本节零平衡公式、零随机、零字面量、零 UI 依赖。变量域、验算数据与全部推导论证见推演件「数值锚定与验算记录」及各问题节。 - -### F1 清图判定谓词(clear_predicate) -**结论**:cleared ⇔ 已开集覆盖全部安全格(等价形:剩余安全格计数 rem = 0 ⟺ cleared);求值点穷举两处——install 初始展开事务尾(不变式④保证恒 false)与每次 dig 执行完成点;插旗/拔旗/移动不改已开集 → 结构上不可能触发 cleared;A3 `clears_map` ≡ 本谓词在该动作事务尾求值——单一谓词两个名字,禁第二套实现。 - -``` -cleared(σ) :⇔ O(σ) ∩ S(B) = S(B) 等价形:|S(B) ∖ O(σ)| = 0 -rem(σ) = |S(B) ∖ O(σ)| ——剩余安全格计数;rem = 0 ⟺ cleared -``` - -| 项 | 判定处理 | -|---|---| -| 雷格 | 恒 ∉ S(已引爆雷格入 O 作 BFS 通道但不入判定) | -| 旗 | 不入 O 不入 S(带旗未开格照常计入 rem——"全图标旗不挖"永不 cleared) | -| 雾格 | 照常计入(A4 Rule 4) | -| 求值点 1 | install 初始展开事务尾——不变式④保证此处恒 false | -| 求值点 2 | 每次 dig 执行完成点(连锁完成后)——批次内逐 dig 求值,与 A3 `request_dig` 按次上报契约一致 | - -### F2 连锁展开闭包(chain_closure)+ chain_size / clears_map 上报参数 -**结论**:连锁闭包 = 单调最小不动点,与 A1 F1 算子①在 G=∅ 域逐字同构;chain_size = 附加格数(不含首格);clears_map ≡ F1 本事务尾求值(禁第二套实现);连锁不越旗(旗格不入链、不作传播源——集合减法非分支);含链开雾格、雾格永不传播(零特判定理非分支);Cl 单调幂等 ⇒ 逐动作增量求值 ≡ 一次全量闭包。 - -``` -Chain(O, c) = μX.[ O ∪ {c} ⊆ X ∧ ∀x ∈ X:( x ∈ S ∧ num(x) = 0 ⇒ N₈(x) ∩ S ∖ G ⊆ X ) ] -dig(c) 的棋盘效果:O′ = Chain(O, c);事件:cell_revealed × |O′ ∖ O|(BFS 规范序) -chain_size(dig(c)) = |O′ ∖ (O ∪ {c})| ——附加格数,不含首格(A3 AC-2/AC-6b 期望依赖) -clears_map(dig(c)) = [ S ⊆ O′ ] ——≡ F1 本事务尾求值 -``` - -### F3 初始展开域(initial_expansion_domain)+双包含回验 -**结论**:O₀ = R₀ = B3 ∪ flood 闭包,与 A1 F1 求解器初始态恰等(同算子同板 ⇒ 同值),显式不含外扩 1 环;恒不开雷 R₀ ∩ M = ∅ 为 A2 侧独立可证定理;双包含两臂构造性成立 ⇒ A1 回退口径(出生 3×3 最小态)不触发、度量保真零降级;退化守卫 R₀ ≠ S——install 拒绝清图退化板(不变式④纵深防御,非 A1 clearable 闸复验)。|R₀| ∈ [9, |S|−1],域非空前提 |S| ≥ 10。 - -``` -O₀ = R₀(B) = μX.[ B3 ⊆ X ∧ ∀x ∈ X:( x ∈ S ∧ num(x) = 0 ⇒ N₈(x) ∩ S ⊆ X ) ] - ≡ A1 F1 "出生 3×3 ∪ flood 闭包" 逐字(同算子同板 ⇒ 同值);显式不含外扩 1 环。 -性质 1(恒不开雷,定理):R₀ ∩ M = ∅(B3 无雷 + 闭包只收安全格)。 -双包含回验:臂① R₀ ⊆ 排除域(以最终产物板计:出生 3×3 ∪ 闭包 ∪ 外扩 1 环)——构造性成立; - 臂② A1 求解器初始态 = R₀ ⊆ O₀ = R₀ ——恰等。 -退化守卫(不变式④):R₀ ≠ S——install 拒绝清图退化板(EC1;非 A1 clearable 闸复验)。 -``` - -### F4 批次仲裁(settle_batch) -**结论**:语义序 C_dig ≺ C_stop ≺ C_other(同类内按到达序稳定);轮次结束首次为真处定胜者、其后意图全部 voided;(path_tag, continuation_hint, AP/RAP 终值) 对任意到达序不变(全批域)——执行/voided 划分的无关性仅对异类竞争成立;同类多成员批内划分由类内稳定序决定(不同到达序 = 不同输入,均为合法确定行为);RAP 记账随胜者。 - -``` -类别函数(排序用,批次初始态求值): - class(I) = C_dig 若 I = dig(c) 且执行后 clears_map = true(真模拟 F2——禁计数器捷径: - "rem=1 则任意 dig 必清"为假,反例 = 挖雷不入 S) - = C_stop 若 I = stop - = C_other 其余(非清 dig / flag ×2 / move) -语义序 ≺:C_dig ≺ C_stop ≺ C_other;同类内按到达序(稳定序——多 cleared-dig 时最先者执行胜出, - 其余 voided;未钉死类内序会使事件流与奖励格归属漂移——规范性义务)。 -结算循环:按 ≺ 逐意图执行;轮次结束首次为真处定胜者 ω,其后意图全部 voided - (false + voided:零棋盘效果、零 AP 扣减、零事件——区别于非法拒绝)。 -胜者 → 出口映射见核心循环节出口分发表;棋盘路径 round_end 由 A2 恰一次外发; - stopped 由 A3 直发(双发射源纪律,A2 禁双发)。 -``` - -### 显式排除声明(归属表) -| 对象 | 归属 | -|---|---| -| 平衡公式 | 本 GDD 无——全部数值归位如下 | -| 价目、ap_per_round、RAP 规则 | A3(F4 只消费 try_spend/request_stop/last_round_end 行为契约,零数值所有权) | -| 雷布/尺寸/密度/可推理率/R₀ 与排除域定义版权 | A1(F3 是其运行期镜像;A1 侧定义修订 = 接口漂移 + metric_version 联动,A2 禁独立改动) | -| 变异约束 | A4(F2 只消费"雾格恒非 0"生成保证) | -| 奖励档位/标中旗判定/结算编排 | B 系(A2 只输出事件流) | -| 曲线 | C3 | -| A2 拥有 | 四条行为契约(F1–F4) | -| 概率/期望公式 | 零(零随机——确定性由 AC-19 行为断言承载:同板同意图序列 ⇒ 事件流逐位相同) | - -### 实现期红线(与 A1 度量的漂移风险清单) -| # | 红线 | -|---|---| -| 1 | 0 格判定必须读真实数字 num(x),禁读显示值 | -| 2 | 初始展开禁加外扩环(破臂①)、禁只开 3×3(破臂②) | -| 3 | clears_map 与 cleared 同一实现 | -| 4 | chain_size 不含首格、链不开雷、含链开雾格 | -| 5 | A1 R₀/算子修订 = metric_version 跳变 + 本 GDD 同步修订 | -| 6 | 双包含臂①排除域以最终产物板计(先布后删无迭代,placed 基准可小于最终 R₀——A1 Rule 4 措辞修订义务,EC1) | - -## 边界情况 -| 条件 | 行为 | 依据 | -|---|---|---| -| EC1 初始展开即整图(R₀ = S,清图退化板) | install 拒绝——不变式④ fail-fast(`board_invalid` + error 诊断),非合同内行为;生产面由 A1 legality 闸拦截;A2 侧不变式④为纵深防御,双包含两臂不受影响(跨 GDD 阻断缺口反例 B 与 A1 修订义务见依赖节登记义务表与推演件) | 不变式④ / systems-index 门禁块 / AC-1b | -| EC2 install 产物违例(B3 内雷 / B3∪R₀ 内变异 / 数字不恒真 / R₀=S) | 拒绝 + 状态不变 + error 恰一类别(不变式①–④)——信任边界 fail-fast;违例板只能由程序构造错误产生(A1 产物经生成期合法性闸),运行期不存在该输入源 | 规则 3 / AC-2 | -| EC3 挖已插旗格 | 拒绝(board_face,sub_reason=flag_present)——须先拔旗(1 AP)再挖;旗是"别挖这里"的承诺标记 | A3 EC11 棋盘面判定落点 / AC-11 | -| EC4 连锁传播开到雾格 | 雾格被免费开出(channel=chain)、digit 恒真透传 + variant_ids 非空(呈现隐藏归 D1)、级联自然停止(雾格非 0 不传播)、计入清图、reward_eligible=true 奖励照常入库——零特判的自然结果,代码零变异分支 | A2×4① / A4 EC4 / AC-6 | -| EC5 玩家在雾格插旗 | 合法、耗 1 AP、旗立在未开雾格上;轮末判定恒 hit=false(雾区无雷——判定逻辑零特判自然覆盖);标错惩罚上线后的一致性推论:雾内旗按"非雷格上的旗"恒受罚——无 A4/A2 特判;D5 教学须警示"雾内插旗纯损" | A2×4② / OQ1 前瞻登记 / AC-12 | -| EC6 同批次多结束路径竞争 | F4 语义序仲裁,四组合与 A3 Rule 3 逐项一致(真值表)、RAP 记账随胜者、voided 意图零副作用(零棋盘写/零扣减/零事件——被 voided 的旗动作不进轮末判定,无幽灵旗);胜出后余意图 voided,棋盘只读查询逐格不变。联合清图让位条款:批内个体非清的 dig 联合可清图时,stop 仍先执行并胜出(C_stop ≺ C_other)——联合清图高光被停手让位,为语义序的显式设计后果(单意图帧提交下生产面不可构造——D1 强制项⑥;F4 语义保留为防御性兜底,AC-10 义务不豁免) | F4 / AC-10 | -| EC7 最后 1 AP 挖开最后安全格 | cleared 与 ap_exhausted 同时成立 → A3 事务内 cleared 胜出 → A2 外发 (cleared, new_board) 恰一条、剩余 AP 清零不入 RAP——防"耗尽优先"实现把清图高光结算为最差结局 | A3 EC10 / AC-7 用例 1 | -| EC8 战斗中热重载修改 VariationTable | 板持生成期变异快照(非活引用)——行为零变化;A2 零表读取使抗重载为构造性;行为级代理 = 换根重放事件流逐位相同 | A2×4④ / A4 EC8 / AC-18 | -| EC9 拒绝目录外溢 | 目录外输入(越界坐标等)按 board_face 拒绝 + `sub_reason=out_of_catalog`(debug 级诊断,不与玩家语义混桶)+ debug 诊断禁静默吞;三源(board_face/resource_face/phase)互异可判定——玩家面文案归 D1(映射源 = sub_reason 枚举) | 规则 5 / AC-21 目录外用例 | -| EC10 挖开雷格 | `kind=mine` 事件(无 digit)、轮次不结束、reward_eligible=false、格子可通行(工程债)可经其 BFS 续挖;同轮连续挖多雷 = 每雷独立事实事件;rem 不变(雷 ∉ S) | 工程债(systems-index 门禁修正记录)/ AC-15 | -| EC11 换图/刷新/战斗结束 | `install_board`(新板)= 旗/小人/已开集全量重置 + 初始展开重放;`retire_board` = 板实例与变异快照消亡——旗随图存续语义(A3 Rule 8)的 A2 侧终点 | A3 Rule 8 / AC-13/17 | -| EC12 非 Active 相位动作请求 | 拒绝(phase 源)、零事件、全态不变——A2 与 A3 两侧按同一相位矩阵各自判定、结论一致;不存在 0-AP 窗口(A3 Rule 3 的对侧消费) | 状态矩阵 / AC-16 | -| EC13 批次内旗动作与终局意图竞争 | 旗动作 ∈ C_other → 被 cleared-dig/stop 压成 voided;判定基线 = 轮次结束事务开始时旗位(voided 旗动作不留痕)——语义序使基线与到达序无关 | F4 / AC-10c/d | -| EC14 移动边界 | 目标未开 / 无 BFS 路径 → board_face 拒绝;目标即当前格定义为零移动,幂等受理;`compute_move_path` 对不可达格返回空——预览与执行同源 | 规则 7 / AC-14 | -| EC15 同批次多个 cleared-dig | 类内稳定序——到达序最先者执行并胜出,其余 voided;(path_tag, RAP) 天然唯一,稳定序规范的是事件流与奖励格归属 | F4 / AC-10e | -| EC16 install 与 A3 相位组合非法(如非刷新路径的 Active 装板〔刷新路径已受理〕/ NoBoard 动作) | 编排面拒绝(板态/相位源)——B1 编排错误 fail-fast 暴露,禁静默(A3"拒绝 + debug 诊断"口径同族,进程致命保留给数据通道) | 状态矩阵 / AC-16 | -| EC17 连锁前沿遇旗(连锁不越旗) | 旗格不入链、不作传播源——被旗挡的格保持未开 + 带旗,仅经该格可达的后续格本轮不被链开(经其他路径可达者照常开出);chain_size 只计实开格;旗格轮末判定照常(hit 按其是否为雷——误标安全格留待玩家自拔,自己的承诺自己付 1 AP 撤回,与 OQ1 惩罚逻辑自洽);零特判合规:传播集 `∖ G` 是集合减法非分支(F2 注) | 规则 6 / F2 注 / AC-5 分支 2 | - -## 依赖与输出 -A2 不依赖任何下游——systems-index TD-SYSTEM-BOUNDARY 唯一回边:A2 只外发事件,B4/B1 订阅后回调;A2 为瓶颈系统(B4/D1/D5 挂其事件),规则一次定稳。 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | A1 | hard(产物消费) | 棋盘产物 = 格状态 + 变异标记 + 出生区(Board class_name 数据契约);双包含回验两臂落点在 F3(臂① 展开域 ⊆ 排除域、臂② 求解器初始态 ⊆ 展开域,恰等——A1 回退口径不触发,门禁缺项即 blocking);install 不变式①–④为消费侧信任边界(fail-fast);A1 修订义务 ×2 见跨 GDD 登记义务表 | -| 上游 | A3 | hard(账本) | `try_spend(action_kind)` 唯一扣减入口(A2 禁自行扣减);`request_dig(chain_size, clears_map)` 参数上报(A2 计算);stop 意图委托 `request_stop()`(A3 直发 stopped round_end);轮末读 `last_round_end` 组包棋盘路径 round_end(读取权 = 接口契约);相位观测量(Idle/Active/Waiting)= A2 动作闸的对侧来源;A3 API 面零改动(settle_batch 是 A2 侧入口) | -| 上游 | A4 | soft(快照透传) | 变异属性经 A1 产物快照只读携带、随 `cell_revealed.variant_ids` 透传——A2 执行逻辑零变异分支(零特判原则,义务是"不加分支");A2×4 清单缺项即 blocking | -| 上游 | D2 | 无直接依赖(登记事实) | A2 零表读取、零 ConfigDB 引用——参数经 A3 账本、板面经 A1 产物;D2 Interactions 表"A2 无直接依赖"由本 GDD 证实 | -| 下游 | B1 | hard(编排,未设计——provisional 登记) | 消费 round_end(棋盘路径)与全事件流结算;换图编排 = `install_board`/`retire_board` 的调用方(接线归 B1 GDD);B1 强制项 ×3 见下表(缺项即 blocking) | -| 下游 | B4 | soft(订阅,未设计) | 清图奖励触发(cleared 路径)与安全格奖励内容归 B4——A2 只上报棋盘面资格事实(`reward_eligible`/`channel`),内容与折算不经 A2;连锁批量授予的溢出吸收设计待 B1/B4 条目化(13 格链 × B3 max_stack=2 ⇒ 大量"溢出未生效"行进结算明细,P2 画面反向伤害连锁幻想——溢出转一次性资源/治疗或显式接受,裁决归 B1/B4) | -| 下游 | D1 | hard(呈现,未设计) | 棋盘/小人/旗/数字渲染;数字显示判定消费 `variant_ids`(雾格无字——digit 恒真透传是前提);三源拒绝呈现(映射源 = reject_reason + sub_reason);D1 强制项 ×6 见下表(缺项即 blocking),数据面义务见呈现与数据供给契约表 | -| 下游 | D5 | soft(Alpha) | 教学口径来源:小人三动作 + 连锁/旗/收轮以本 GDD 规则为准;教学条目:雾内旗纯损、雷格可通行、旗挡链(连锁止于旗属正常)、挖到雷 = 敌方优势而非死亡(经典扫雷玩家最大预期违背)、已开雾格无字属正常——挂 OQ1/EC5/EC17 | -| 下游 | D4 | soft(Alpha) | 挖掘/连锁/雷格/收轮音效挂三事件流;旗/移动反馈经调用返回值命令式驱动(两动作零事件外发——发射面封闭的已声明代价;systems-index 依赖分层 D4 ← A2,B1) | -| 下游 | A5 | soft(垂直切片预留) | 探测类道具的显影面可能挂 A2 查询接口(未开格数字显影)——接口归 A5 GDD 定稿,本 GDD 不预写(OQ4) | - -### B1 强制项(缺项即 blocking,systems-index 门禁块登记) -| # | 义务 | -|---|---| -| 1 | 结算触发 = Waiting 相位编排点、不依赖事件到达序(stopped 轮 A3 直发 round_end 与 A2 旗判定批的到达序不承载语义) | -| 2 | `reward_eligible=false`(initial 通道)的格不得进入奖励入库(A3 EC5 委派闭环) | -| 3 | 诚实重复上报的去重义务(资格以雷格实例为键) | - -### D1 强制项(缺项即 blocking,systems-index 门禁块登记) -| # | 义务 | -|---|---| -| 1 | stop 意图经 `settle_batch` 提交、不直调 A3(单一结算序保证) | -| 2 | 四种格态一眼可辨(已开 0 格地板 / 已开雾格无字 / 未开格 / 未开雾格——左键"已开=移动/未开=挖"消歧的感知前提;后果不对称:误挖 = 1 AP + 可能触雷且不可逆) | -| 3 | 悬停预承诺(光标区分移动/挖/旗目标语义)+ 可挖域(8 向相邻)常驻指示 + 怀旧扫雷玩家 chord 肌肉记忆首遇提示("点击数字格 = 移动小人"——非模态、每 run 一次,A4 先例) | -| 4 | 已引爆雷格"可通行可读"呈现 | -| 5 | `compute_move_path` 呈现语义定稿(合法性指示 vs 穿行动画轨道——P4 氛围载体;BFS 行主序路径可能视觉绕路,形态归 D1 裁决) | -| 6 | 单意图帧输入收集(stop 点击终结当帧收集;F4 语义序退为防御性兜底)+ 批次 voided 呈现义务(至少 stop 被 voided 须可感知——防 [dig清, stop] 静默改判清图、剩余 AP 清零不入 RAP)+ 每次拒绝玩家可感知(文案归 D1,映射源 = reject_reason + sub_reason) | - -### 呈现与数据供给契约(A2 无自有渲染面与 UI——数据供给规格 + D1 呈现义务登记) -| # | 数据面义务 | 归属 | -|---|---|---| -| 1 | 数字可读性的数据前提:digit 恒真透传(含雾格)是"数字是主角"(视觉锚 1)的逻辑地基——呈现层任何隐藏/遮罩都不改数据层真值;已开雾格 = 地板无字(负空间,防误读为 bug) | D1 | -| 2 | 绘制优先级固定(视觉锚 3):数字 > 小人 > 旗 > 变异纹理 > 底色——小人所在格用边框高亮而非覆盖文本;A2 的事件流是 D1 分层绘制的输入 | D1 | -| 3 | 三 channel 驱动动效语义(D1/B5 消费):initial(开局整片亮起——"地牢初醒")· chain(连锁撕开——P1 高光时刻的动效载体;连锁止于旗的呈现已登记 D1/教学)· dig(单格回应) | D1/B5 | -| 4 | kind=mine 事件 = 已引爆雷格视觉态:已开底 + 雷图标 + 可通行可读——玩家必须看得出"这是走过的雷、能走"(D1 强制项④) | D1 | -| 5 | 变异标记保真:variant_ids 透传错误即呈现欺骗(雾格显影/隐藏全链路的数据源) | D1 | -| 6 | 无 MVP 音频:挖掘/连锁/旗/雷格/收轮音效挂 D4(Alpha,依赖分层 D4 ← A2,B1);事件流已含全部触发点 | D4 | -| 7 | 输入模型:鼠标驱动(PC 主输入)——左键已开格 = 移动 / 未开相邻格 = 挖、右键 = 插/拔旗、停手按钮 = `settle_batch([stop])`;全部意图经 `settle_batch` 提交(D1 强制项①)——单帧多意图时 A2 语义序仲裁兜底(F4);触屏/Gamepad 非 MVP 门禁(意图对象架构使后续接入零数据层障碍) | D1 | -| 8 | 单意图帧输入收集(D1 强制项⑥):stop 点击终结当帧收集——F4 语义序退为防御性兜底 | D1 | -| 9 | 输入消歧感知前提(D1 强制项②③):四种格态(已开 0 格地板/已开雾格无字/未开格/未开雾格)一眼可辨、悬停光标区分移动/挖/旗目标语义、可挖域(8 向相邻)常驻指示——硬前提(后果不对称:误挖 = 1 AP + 可能触雷且不可逆) | D1 | -| 10 | 三源拒绝呈现:board_face(sub_reason 封闭枚举)/ resource_face(AP 不足)/ phase(收轮中)——每次拒绝玩家可感知(AC-21 为数据源验收) | D1 | -| 11 | voided 呈现义务(D1 强制项⑥):被 voided 的意图(至少 stop)须玩家可感知——防 [dig清, stop] 静默改判清图、剩余 AP 清零不入 RAP 的读感欺骗 | D1 | -| 12 | 移动路径预览:`compute_move_path` 返回 BFS 路径,呈现语义(合法性指示 vs 穿行动画轨道)归 D1 GDD 裁决定稿(D1 强制项⑤——systems-index 门禁登记项,悬案的数据面已备) | D1 | -| 13 | 输入摩擦护栏观测:每轮原始输入动作数(含被拒/voided)∶ 当轮 AP 消耗 ≤ 2(A3 P4 载体;"点击"以设备中立"输入动作数"计)——归 D1 遥测(A2 只收意图对象、不收原始输入),≤2 为 playtest 待验证假设(挂 A3 OQ3);远距目标两击摩擦的复合意图(点击远格 = 自动 move+dig)登记为 D1 评估项(MVP 可裁决不做、留痕) | D1 遥测 | -| 14 | 结算明细无 A2 附加项:效果归因全部经事件流字段由 B1 呈现(P2) | B1 | - -### 跨 GDD 新登记义务汇总(本 GDD 出具,随 systems-index 门禁块登记) -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| A1-1 | F5 legality 增 R₀ ≠ S(违例 = 该次尝试废弃重试,clearable 同款)——"初始展开即 cleared"反例 B 与 N=1 行整行退化阻断缺口 | A1 | 待回写 | -| A1-2 | F4 批量断言严格零 + Rule 4 排除域基准措辞(最终产物板计) | A1 | 待回写 | -| B1×3 | 结算触发相位编排点 · initial 格不入奖励库 · 兑付去重(明细见 B1 强制项表) | B1 | 已登记(缺项即 blocking) | -| D1×6 | stop 经 settle_batch · 格态可辨 · 悬停预承诺+可挖域+chord 首遇提示 · 雷格可通行可读 · 路径呈现语义定稿 · 单意图帧收集+voided 呈现+拒绝可感知(明细见 D1 强制项表) | D1 | 已登记(缺项即 blocking) | -| B1/B4-1 | 高光兑现节点条目化(含 chord 缺席的标中旗即时兑现补偿候选——清单外散文登记会丢失,B3 先例) | B1/B4 | 待条目化 | -| B1/B4-2 | 连锁批量授予溢出吸收设计(见依赖 B4 行) | B1/B4 | 待条目化 | - -## P0 最小闭环 -1. A1 产板 → `install_board` 受理:持有生成期快照 + 校验四不变式(违例 fail-fast)。 -2. 初始展开 R₀ 免费翻开(cell_revealed ×\|R₀\|,channel=initial,规范序),小人落位 B3 中心格。 -3. 玩家意图经 D1 → `settle_batch`(A2 唯一结算入口)。 -4. dig:棋盘面判定 → A3 `try_spend` → 开格 + 连锁(cell_revealed ×(1+chain_size)),A2 上报 `request_dig(chain_size, clears_map)`。 -5. flag/move:旗入棋盘(1 AP)/ 免费瞬移——零事件,反馈经调用返回值命令式驱动。 -6. 批次内轮次结束首次成立 → 定胜者,其后意图 voided(零效果、零扣费、零事件)。 -7. 收轮:`flag_judged ×N` 先于 `round_end`——棋盘路径 A2 读 `last_round_end` 组包外发,stopped 路径 A3 直发。 -8. 三事件流被 B4/B1/D1/D4/D5 消费(结算归因、呈现、音效)→ Waiting 相位编排受理 `install_board` 换新图,回到步骤 1。 - -## P1 / P2 后置 -后置以对侧登记为生效条件;复活任何一行 = 修订本 GDD,不许静默加回。 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | B1 轮次编排接线(Waiting 出口/next_round_mode/request_refresh 代理)· 结算兑付与 P2 来源标注 · 兑付去重(诚实重复上报的对侧,A3 Rule 8/OQ5)· EC8 末轮判定次序 · 双发射源消费序 | B1 未设计——systems-index B1×8 义务清单 + 本 GDD B1×3,生效条件成立 | -| P1 | B4 奖励内容与差异化插槽 · debuff 档位 | B4 未设计——A4 三条定价硬约束 | -| P1 | D1 数字显示消费 variant_ids · 三源呈现 · 路径预览表现 · 点击摩擦观测 | D1 未设计——A4 D1×2 + 本 GDD D1 强制项 ×6 | -| P2 | A5 显影接口 | 接口归 A5 GDD 定稿(OQ4) | -| P1 | A1×A2 双包含端到端集成用例——"A1 真生成器产物 → A2 install"全链路回验 | 两系统实现后集成冒烟承载(本 GDD 冒烟用程序构造板) | -| P1 | 标错惩罚落地 | OQ1 登记——实测义务保留,不阻塞设计;惩罚前 AC-12 只断言 hit=false | - -## 调参表 -A2 零专属 knob——结构冻结项修订走本 GDD 修订流程非调参;禁止在 A2 侧复制任何参数(D2 Rule 1 单一事实源)。已锁数值以 design/registry 为准,本表只登记字段与归属,不复述锁值。 - -| 字段 | 域 | 默认 | owner | 说明 | -|---|---|---|---|---| -| ap_per_round · dig_ap_cost · flag_place_ap_cost · flag_pull_ap_cost · rap_refresh_cost | 见 registry action_economy | 以 registry 为准 | A3 | 节奏与价目——A2 只消费 try_spend 行为契约 | -| BoardGenTable 九字段 | 见 registry board_gen_table | 以 registry 为准 | A1 | 板面与推理保障 | -| unlock_level | 见 registry | 以 registry 为准 | A4 | 变异资格 | -| flag_pull_ap_cost 联动观测(引用不拥有) | — | — | A3 | 挪旗成本与 OQ1 标错惩罚的双重定价位(A3 OQ2 复核落点——若实测推翻拔旗 1 AP,A2 行为零改动、仅价目表值变化) | -| ap_per_round 联动观测(引用不拥有) | — | — | A3 | 决定每轮可兑现的确定动作供给(A3 OQ3 供给指标) | -| A2 侧可观测指标(非 knob,遥测域) | — | — | A2 | 每消耗 1 AP 输入动作数(≤ 2 护栏,P4 点击摩擦——D1 观测,provisional 待 playtest 验证)· 连锁规模分布 · 批次数/轮 | - -结构冻结清单(非 knob):三事件面封闭 · 初始展开 = R₀ 恰等 · 连锁免费 · 移动/初始展开不经账本 · 无 chord · 批次语义序 · 四条 install 不变式 · 瞬移移动语义。 - -## 验收标准 -### 测试口径 -| 口径 | 要点 | -|---|---| -| 测试载体 | `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree、autoload 显式实例化);A2 冒烟 = Core-Core 集成:被测面 = A2 规则引擎 + 真 A3 实例(资源全经真账本 `try_spend` 驱动——A2 不可自行扣减);冒烟另以 B1 编排角色最小形驱动 `notify_round_start()`/`notify_settlement_done()`(仅开轮/收轮;B1 就绪后改走真实调用方,断言口径不变) | -| 棋盘输入 | Board class_name 直引程序构造(不经生成器、不经 load()/preload()——A4 AC-5/A1 夹具先例;板规格即 A1 产物 schema 的坐标级实例化,A1 未实现不阻塞本冒烟) | -| API 面 | provisional 封闭枚举,见枚举节(install_board · settle_batch——D1 唯一提交入口,单意图批 = 平凡形 · try_* 便捷形 · compute_move_path 只读 · retire_board);无 chord 负空间:封闭枚举即"无对应 API"的验收形态,新增快开入口 = 接口漂移 | -| 事件捕获断言面 | B1/D1 未设计 → 以事件捕获列表断言,分订两发射面:A2 面(cell_revealed / round_end 棋盘路径 / flag_judged)+ A3 直发面(stopped round_end);payload 口径钉死:① digit 恒真透传(仅 kind=safe 携带;雾格携带真值——呈现隐藏归 D1,判定源 = variant_ids);② reward_eligible:initial 恒 false、chain/dig ∧ safe 恒 true(含链开雾格)、kind=mine 恒 false;③ round_end 核心字段 ≡ A3.last_round_end 逐字段(同构) | -| 只读观测量 | A2 侧 = 已开集/旗集/小人位/事件捕获;A3 侧 = ap/rap/phase/last_round_end;多步 GIVEN 均给出构造序列 | -| 夹具策略 | 程序构造小板、每用例先 `reset_diagnostics()`;行为夹具根 = 零(A2 无数据表、无加载期校验类别——`--data-root` 通道在本域无消费者;资源面非默认价目分支经 D2 R3 debug override 构造,A3 AC-7 同款);登记常数协议(A1 黄金向量同源):每板登记 (R₀ 成员集, \|R₀\|, \|S\|, 关键格 digit, 级联集) + 逐格手工推导记录入版本库;失效处置 = 先复核推导、推导无误即实现缺陷 | -| 期望值推导纪律 | 行为类 THEN 数值 = ConfigDB A3 表读值推导(ap_per_round/各价目经测试通道读取)⊕ 板登记常数;不写死玩法数值,唯一例外 = 登记常数;默认价目全 1 AP 下"AP 不足"分支不可构造(A3 EC2 同款)——资源面分支显式承载于 debug override 非默认表值(AC-21) | -| 致命类协议 | 零行 manifest(显式声明)——D2 AC-2b 协议适用前提 = 加载期数据通道致命;A2 无加载期校验,install 违例 = `board_invalid` 拒绝 + error 诊断(进程致命保留给数据通道;实现期 ADR 若裁决升格,回本节补 manifest 行) | -| out-of-scope | deferral 以对侧登记为生效条件——见 P1 / P2 后置表 | - -### 夹具板清单(程序构造小板) -spawn = 出生 3×3 中心格坐标,逐板显式登记:b_spawn / b_flag / b_batch / b_mine_walk / b_degenerate = (3,3),b_chain / b_fog = (3,2)——按默认"板中心"读法该两板 B3 = {2..4}² 会含 y=4 雷墙雷、违反不变式①、板不可安装(已修正并纳入 OQ3 复核范围)。 - -| 板 | 规格(坐标级要点) | 服务 | -|---|---|---| -| `b_spawn` | M = {(1,y): y∈[0,6]∖{3}} 竖墙 6 雷留缺口;R₀=35、\|S\|=43、未开 8 格;(1,3) digit=2 | 安装五属性/双包含/挖掘/移动/相位 | -| `b_chain` | spawn=(3,2);M = y=4 横墙 6 雷留 (3,4) 缺口;R₀=28(y∈[0,3] 全安全格);墙下封闭区 14 格;(3,6) 为 0 格、级联集 \|C\|=13 | 连锁/双包含/链不越旗 | -| `b_fog` | spawn=(3,2);b_chain 几何 + M += {(5,0),(6,1)};雾 F = {(0,5),(1,5)}(链可达)∪ {(6,0)}(链不可达);雾格 digit 2/3/2、厚度≤2 ✓;R₀ 常数随 M 变化按板重算((6,2)/(6,3) 退出 R₀) | 雾链两态/雾旗/快照/零特判/回放 | -| `b_fog_bare` | b_fog 同 M 同几何、variant 标记剥离 | AC-20 同构对板 | -| `b_flag` | b_spawn 同几何复用;(1,2)/(1,4) 雷 = hit 旗靶、(0,3) 安全 = miss 旗靶 | 旗生命周期/轮末判定/三源拒绝 | -| `b_batch` | b_spawn 同几何复用(未开恰 8 格支持构造) | 批次四组合/两收轮路径 | -| `b_mine_walk` | M = {(3,5)} 单雷;(3,4) digit=1 ∈ R₀ | 雷格挖开/已引爆可通行 | -| `b_degenerate` | 8×8、M = {(7,7)} 单雷角——R₀ = S(全 0 格连通,构造性退化) | 不变式④ install 拒绝 | -| `b_invalid_*` | ① mine_spawn:b_spawn+M+=(3,3) ② fog_spawn:b_fog+F+=(3,2) ③ fog_flood:b_fog+F+=(5,1)(R₀ 成员)④ digit:b_spawn+数字篡改 | 不变式①②③④ 各一(AC-2) | - -### AC 清单(Given-When-Then,编号不变,23 条) -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | 真 A3 实例(phase=Idle)与 `b_spawn` | `install_board(b_spawn)`,随后 `notify_round_start()` → Active | accepted=true 且事件捕获**仅**含 cell_revealed 批,逐事件断言:① 免费——A3 ap 仍=表读值(零 try_spend)且诊断零新增;② 计入清图——构造序列挖尽未开 8 格(登记常数)时恰在第 8 次触发 `round_end{cleared, new_board}`(无超前/滞后);③ 无奖励——全部 reward_eligible=false(channel=initial);④ 永不触雷触雾——全部 kind=safe;⑤ 恰等 R₀(有序断言)——事件**有序列表** ≡ 测试侧朴素 BFS 重算 R₀ 的行主序枚举,逐格逐序相等(规范序钉死——DFS/列主序等"错误但确定"的实现不可通过;登记常数 \|R₀\|=35 为独立锚) | 规则 4 / A3 EC5 委派 | -| AC-1b | `b_degenerate`(R₀=S 构造板) | `install_board`;随后 `install_board(b_spawn)` | accepted=false、reject_reason=board_invalid、error 诊断恰一条类别=**inv4_r0_equals_s**(枚举见状态节);随后重装 accepted=true(拒绝原子性) | EC1 / 不变式④ | -| AC-2 | `b_invalid_mine_spawn` / `b_invalid_fog_spawn` / `b_invalid_fog_flood` / `b_invalid_digit` 各板(每用例先 reset_diagnostics) | 各 `install_board` | 均 accepted=false、board_invalid、error 恰一对应类别(**inv1_mine_in_spawn / inv2a_variant_in_spawn / inv2b_variant_in_r0**〔"R₀ 触雾"归此——②的 R₀ 子情形〕**/ inv3_digit_invariant**,封闭枚举见状态节) | 规则 3 / EC2 | -| AC-3 | `b_chain` 与 `b_fog` 各 install 后捕获的初始域格集 E(B);测试侧按 A1 F1/Rule 4 公开定义朴素重算 R₀(B) 与排除域 X(B)=R₀∪外扩 1 环(X(B) 以最终产物板计——先布后删后基准,A1 Rule 4 措辞修订义务 EC1) | 逐板比对 | **臂①** E(B) ⊆ X(B);**臂②** E(B) ≡ R₀(B) **逐格恰等**(不欠展开也不过度展开——A1 回退口径不触发的行为面);两板全用例通过 | 规则 4 / F3 / registry a2_dual_containment(门禁缺项即 blocking) | -| AC-4 | `b_spawn` Active、小人于 R₀ 内 | `try_dig(c)`(相邻未开)→ `try_dig`(非相邻 / 已开格 / 有旗格)→ 等价护栏:同构造态分别驱动 `try_dig(c)` 与 `settle_batch([dig c])`(各新轮) | 第一次 executed、A3 ap −dig_ap_cost(表读值,真 try_spend)、事件恰一条 `{cell=c, kind=safe, channel=dig, reward_eligible=true, digit ≡ 测试侧重算 8 邻雷数}`;拒绝分支 rejected+board_face(sub_reason 分别 = not_adjacent / target_revealed / flag_present)、零事件、ap 不变;等价护栏:事件流/ap/棋盘只读观测量/诊断逐项相同(单意图批 ≡ 便捷形) | 规则 5 / 规则 9 / A3 Rule 2 | -| AC-5 | `b_chain`;构造序列挖 (3,4)→移→挖 (3,5)→移→`try_dig((3,6))`(0 格);分支 2:构造至小人立于 (3,5) 后 `try_flag_place((2,5))`(未开相邻,1 AP)→ 再 `try_dig((3,6))` | 第三次挖掘(分支 1);插旗后再挖(分支 2) | 分支 1:executed 且 ap 总耗 = 3×dig_ap_cost(级联免费——非 3+13 格);事件 channel=chain 批恰 \|C\|=13 条(登记常数)且序 ≡ 测试侧 BFS 行主序枚举、全 reward_eligible=true、digit 恒真透传、事件数 = chain_size + 1(一致性恒等式);级联止于非 0 格(链只经 0 格扩);链格计入清图(挖尽封闭区后余格清图即 cleared)。分支 2:(2,5) 保持未开+带旗(零 cell_revealed)、chain_size=12(级联集减 1——(1,5)/(1,6) 经 (2,6) 照常开出,仅旗格本身被挡)、旗格轮末判定照常 | 规则 6 / F2 / EC17 | -| AC-6 | `b_fog`;同 AC-5 构造至 (3,6) 级联;另一用例:小人移至 (5,1) 后 `try_dig((6,0))` | 级联(链可达雾);全价挖链不可达雾 | 四项逐验:① 链可达雾 (0,5),(1,5) 免费开出(channel=chain、ap 无雾附加扣减);② variant_ids 含 "fog" 且 digit=2/3 恒真透传(呈现判定数据源——A2×4③ 同板证);③ 级联停止(级联集与 b_chain 同构板逐格同形——雾格只作叶);④ reward_eligible=true 且计入 cleared 判定。另一用例(链不可达全价):executed、channel=dig、耗 1 AP 全价、variant_ids 非空、digit=2 透传 | A2×4①③ / A4 EC4 / fog_ap_note 两态执行侧 | -| AC-7 | 用例 1(同帧竞争):`b_batch` 构造至"未开恰 1、ap=1"(cleared 与 ap_exhausted 同事务成立——"耗尽优先"缺陷仅在此构造可检出);用例 2:同构造 ap=k≥2 | `try_dig(末格)` | 用例 1:executed、A2 面 `round_end{cleared, new_board}` 恰一条(ap_exhausted 不触发)、其字段 ≡ A3 `last_round_end` 同帧读值(组包数据源行为面)、与 stopped 路径 payload 同构(字段集/类型一致)、rap 不变(剩余 AP 清零);用例 2(剩余清零非平凡分支):cleared 恰一条、rap 不变(k−1 > 0 清零非平凡) | 规则 10 / EC7 / A3 Rule 5/6/9/EC10 | -| AC-8 | `b_batch` 未开 ≥2、ap=1 | `try_dig(非末格)`;紧接任意 `try_*` | executed、`round_end{ap_exhausted, same_board}` 恰一条、A3 remaining_ap=0 不变式;紧接动作全部 rejected+phase、零事件 | 规则 10 / A3 Rule 3/EC1/EC14 | -| AC-9 | `b_batch` Active 未开完、ap=k≥1 | `settle_batch([stop])` | **A3 直发面**捕获 `round_end{stopped, same_board}` 恰一条(A2 面零 round_end——双发射源行为面)、rap = 前值 + k(1:1,表读值推导)、事件序 = flag_judged ×N 先于 round_end(事件序契约) | 规则 9 / A3 Rule 4/9 | -| AC-10 | `b_batch`(每用例新轮新构造)六场景:a〔dig清→stop〕· b〔stop→dig清〕· c〔dig→stop,ap=1 耗尽型构造:新轮 7 次非清挖〕· d〔stop→dig,同 ap=1 构造〕· e〔dig清₁→dig清₂ 同批〕· f〔非清 dig₁→非清 dig₂ 联合清图;多步 GIVEN:前轮挖雷 (1,2) 开道(雷格可通行的构造性利用)→ 挖尽 x=0 列余格 → 停手收轮;新轮未开恰 {(0,3),(1,3)}、ap=8〕 | 提交各批次 | a:cleared 胜出、rap 不变(stop 清零不入 RAP);b:与 a 同结果(同 path_tag/同 rap 终态/同事件数——异类序无关性);c:**语义序救援用例**——stopped 胜出(朴素到达序将产出 (ap_exhausted, RAP+0)——语义序校正为 (stopped, RAP+1))、rap += 1(表读值推导)、被弃 dig 格仍未开(续轮同图可证);d:与 c 同结果;e:类内稳定序——到达序最先者执行胜出、恰一条 cleared、第二 dig voided 零副作用;f:dig₁ 执行不清图(rem 2→1)、dig₂ 结算时点 clears_map=true 胜出 → cleared、两意图均执行、rap 不变(出口映射按结算时点真值键控——F4)。全用例断言:voided 意图零棋盘写/零扣减/零事件(棋盘只读查询逐格不变)、round_end 恰一条;c/d 断言 `flag_judged ×N` 先于 `round_end`(事件序契约) | 规则 9 / F4 / EC6/EC13/EC15 / A3 EC4 deferral 兑现(A3 冒烟不可构造用例在本节兑现,deferral 生效) | -| AC-11 | `b_flag`、小人于 (2,3) | 依次插 (1,4)、插 (1,2) 后拔 (1,2)(挪旗)→ `try_dig((1,4))`(有旗)→ 插非相邻/插已开/插已有旗/拔无旗/拔非相邻 | 全 executed、ap 合计 −(place+pull)×2(表读值)、旗集随动、零事件外发;挖旗格 rejected+board_face(EC11 落点);各拒绝分支 rejected+board_face | 规则 5/8 / A3 EC3/EC7/EC11 | -| AC-12 | 分支 1:`b_flag` 插 (1,4)(雷)与 (0,3)(安全,经挖 (1,3) 后站立可达),前置断言验"被拔的不判"(插 (1,2) 后拔,轮末无该条目);分支 2(雾旗):`b_fog` 小人相邻未开雾格插旗;分支 3(重复上报):分支 1 收轮后 `notify_settlement_done(same_board)`+`notify_round_start` 续轮旗仍在 | `settle_batch([stop])`(分支 1/3);轮末(分支 2);再停手(分支 3) | 分支 1:flag_judged 恰 2 条**集合断言**:{(1,4),true}、{(0,3),false}(行主序枚举);分支 2:`{cell,hit=false}` 恒(雾区无雷零特判;标错惩罚上线后"恒受罚"推论 = OQ1,惩罚前不可判定);分支 3:再次 {(1,4),true}——A2 逐轮诚实重复上报,**去重归 B1/B4(out-of-scope)** | A2×4② / A4 EC5 / A3 Rule 8/OQ5 上报半 | -| AC-13 | `b_flag` 已插 2 旗 stopped 收轮 | 续轮(same_board);随后 `retire_board()` + `install_board(b_fog)` | 旗集不变且**事件捕获零新增 cell_revealed**(初始展开板级一次、跨轮不重放——每轮重放的违例实现在此用例现形);重装后旗集 = 空、初始展开照常(按新板) | 规则 8 / EC11 / A3 Rule 8/EC9 | -| AC-14 | `b_spawn` 小人于 (3,3) | `compute_move_path((2,3))` 两次 → `try_move((2,3))` → 拒绝/幂等四对:① move 未开格 ② move 已开但 BFS 不可达格 ③ move 目标 = 当前格 ④ 正常移动分支 | 路径两次逐格相同(确定性)且全格 ∈ 已开集、相邻步 8 向合法;try_move executed、位置更新、**ap 不变**(不经账本)、零事件;① rejected+board_face(sub_reason=target_concealed);② rejected+board_face(sub_reason=no_path)**且** `compute_move_path` 对同格返回空(预览与执行同源,一用例双断言);③ executed 幂等(零移动:位置不变、零事件、ap 不变——EC14);④ 保持 | 规则 7 / EC14 / A3 Rule 2 移动行/P4 | -| AC-15 | `b_mine_walk`、小人于 (3,4) | `try_dig((3,5))` → `try_move((3,5))` → 经雷格续挖 (3,6) | executed、ap −1、事件恰一条 `{kind=mine, channel=dig, 无 digit 字段, reward_eligible=false}`、**轮次不结束**(两面零 round_end);try_move executed(**可通行**——工程债验收落点)、位置=(3,5);续挖正常受理 | 规则 11 / EC10 / 工程债登记 | -| AC-16 | NoBoard 或 Installed·Frozen(Idle/Waiting 两分支);另 GIVEN Active | 依次 dig/flag×2/move/`settle_batch([stop])`;Active 下 `install_board`/`retire_board` | 全部 rejected+phase、棋盘只读查询与事件面逐字不变;Active 下装板/退板拒绝(板态——EC16) | 状态矩阵 / EC12/EC16 / A3 输入×相位矩阵对侧 | -| AC-17 | `b_spawn` 已装且部分挖掘 | `retire_board()`;随后 `install_board(b_flag)` | 全动作拒绝(phase;无板态)、事件分段边界确立(跨段断言禁止——防前图泄漏);重装后初始展开按新板重算、无前板残留(旗/小人位/已开集) | 规则 3 / EC11 | -| AC-18 | `b_fog` 基线事件流 E₀ 已捕获 | 测试通道换根加载变异表(B3 AC-15 换根模式)后重放同一意图序列(新 A3 实例+新 install) | 事件流与 E₀ **逐位相同**(含 variant_ids)——生成期快照非活引用;A2 零表读取(AC-22③)使抗重载为构造性,本用例为行为级代理 | A2×4④ / A4 EC8 | -| AC-19 | 同坐标规格独立构造的 `b_fog` ×2(各配全新 A3 实例) | 同一定长意图序列驱动两遍(含挖/链/雾链/插拔旗/移动/多意图批/停手收轮——覆盖三 channel、flag_judged 与批次仲裁) | 两遍事件捕获列表**逐位相同**(数、序、全字段) | 规则 1 / D2 Rule 5 的 A2 层 | -| AC-20 | (`b_fog`, `b_fog_bare`) 同构对(同雷布同 digit、仅 variant 标记差异) | 同一意图序列各驱动一遍 | 两事件流**除 variant_ids 外逐位相同**(差分容许域 = 该字段且仅该字段)——连锁/清图/旗判定/价目/收轮全不感知变异 | A4 Rule 4 零特判 / 规则 1 / A2×4③ 反向证成 | -| AC-21 | `b_flag` + debug override `action_economy.flag_place_ap_cost=2`(D2 R3 域内值;承载声明:默认价目下资源面分支不可构造,同 A3 AC-7)构造 ap=1 | `try_flag_place`(棋盘面合法)→ `try_dig`(非相邻)→ `try_dig((1,4))`(有旗格)→ Waiting 相位任意动作 → `try_dig((-1,-1))`(越界,目录外用例) | rejected+**resource_face**、全态不变;**board_face + sub_reason=not_adjacent**;**board_face + sub_reason=flag_present**("须先拔旗"与"非相邻"数据可分);**phase**——三源互异可判定;目录外:rejected+board_face + **sub_reason=out_of_catalog** + 诊断收集器恰一条 debug(非静默吞) | 规则 5 / EC9 / A3 EC2 对侧 | -| AC-22 | A2 文件集(规则引擎/事件载荷/冒烟脚本/夹具规格) | 静态扫描 | ① 零 `randomize()`、零自建 RNG 构造(**tests/ 豁免不启用**——A2 确定性回放不需种子,严于 A1 先例);② 零 ConfigDB 外 data 表加载(Board class_name 直引豁免);③ **零 `ConfigDB.*` 属性读取**(A2 全部输入经 A3 账本与 A1 产物——设计决策;实现期 ADR 若裁决需读表,走接口漂移修订本条);④ 零 `extends Control/Node2D`、零 `.tscn` preload;⑤ AC-1 在 `godot --headless --script` 实跑通过(退出码 0 + 断言收集器零失败)作为本项判定(Rule 7);⑥ 纳入 D2 AC-14 项目级人工三要素字面量扫描(warning 级 + 人工复核,成员清单随实现建立并入——B3 AC-19 同款) | 规则 1 / D2 Rule 1/2/5/7 | - -### 覆盖矩阵(验收评审用) -| 类别 | 映射 | -|---|---| -| 规则 | 1→AC-19/20/22 · 2→AC-4/6/7/8/9(payload 前言钉死)· 3→AC-1b/2/17/18 · 4→AC-1/3(A3 EC5 委派 + 双包含)· 5→AC-4/11/21 · 6→AC-5/AC-6 · 7→AC-14 · 8→AC-11/12/13 · 9→AC-4 等价护栏/AC-9/10 · 10→AC-7/8 · 11→AC-15 · 12(无 chord 负空间)→API 封闭枚举 | -| Formulas | F1→AC-1②/5/7 · F2→AC-5/AC-6 · F3→AC-1⑤/3 · F4→AC-10 | -| EC | EC1→AC-1b · EC2→AC-2 · EC3→AC-11 · EC4→AC-6 · EC5→AC-12 · EC6→AC-10 · EC7→AC-7 用例 1 · EC8→AC-18 · EC9→AC-21 目录外用例 · EC10→AC-15 · EC11→AC-13/17 · EC12→AC-16 · EC13→AC-10c/d · EC14→AC-14 四对 · EC15→AC-10e · EC16→AC-16 · EC17→AC-5 分支 2 | -| 义务 | A2×4①→AC-6 · ②→AC-12 · ③→AC-6/AC-18/AC-20 · ④→AC-18 · 双包含①→AC-3 · ②→AC-3 · A3 EC4 deferral→AC-10 · 工程债→AC-15 · OQ1 在位→推演件开放问题区 | -| 规模 | 23 条 = AC-1…AC-22 + AC-1b(原"EC4 腿"编号为 AC-6,EC17 由 AC-5 分支 2 承载) | - -## 版本历史 -| 版本 | 日期 | 改动 | -|---|---|---| -| v2.0 | 2026-09-14 | 两件套迁移:按模板 v2 重排为 design 结论件(设计目的/系统范围/核心循环/领域章节×6/依赖与输出/P0 闭环/P1·P2 后置/调参表/验收标准),公式推导论证、候选取舍、体验锚点论证、已裁决争议、义务审计台账与全部 OQ 移至推演件 `design/gdd/analysis/a2-minesweeper-rules.md`;规则、数值、AC/EC/F/OQ 编号与内容零变更 | -| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例(docs/lean-gdd-sample-b1.md)重排——正文修订注记剥离收敛至本表;速览/体验锚点/枚举/边界情况/AC/义务台账/覆盖矩阵/开放悬案转表格,流程转字符画;F1–F4 公式本体、Variables 与验算数据全保留;术语统一以 voided 行文;语义与 2026-09-09 定稿及 2026-09-12 D4 修订对齐,零规则变更 | -| D4 修订 | 2026-09-12 | install_board 受理域扩 Active·仅弃图刷新路径:B1 `refresh_board` 编排内、A3 扣费成功为前提;其余 Active 装板仍拒绝(防轮内换板原则对非刷新路径不变),EC16 随之收窄 | -| v1 | 2026-09-09 | full /design-review 定稿 Approved:game-designer/systems-designer/qa-lead/ux-designer 四专员 + CD 终审六 blocking 同日修订核销、用户拍板放行(A3/A4/A1/B3 先例);systems-designer 起草 F1–F4 + 反例 B 阻断缺口(登记 A1 修订义务)、qa-lead 起草 23 条 AC(AC-1…22 + AC-1b + 覆盖矩阵 + 夹具坐标规格);本次定稿含:初始展开 R₀ 恰等 / 批次语义序仲裁 / 移动瞬移语义 / install 四不变式 / sub_reason 封闭枚举(UX-1)/ 连锁不越旗(GD-1)/ 雷格通行有价捷径(GD-2)/ 到达序无关性收窄 / 联合清图让位条款 / D1 强制项 ×1→×6 / B1 强制项 ×3 / spawn 坐标修正(b_chain、b_fog=(3,2))/ 已引爆雷格可通行(工程债);评审日志 design/gdd/reviews/a2-minesweeper-rules-review-log.md | diff --git a/design/archive/gdd-2026-09-14/a3-action-economy.md b/design/archive/gdd-2026-09-14/a3-action-economy.md deleted file mode 100644 index e037f035..00000000 --- a/design/archive/gdd-2026-09-14/a3-action-economy.md +++ /dev/null @@ -1,431 +0,0 @@ -# A3 行动经济(Action Economy) - -> **状态**:Approved · **版本**:v2 · 2026-09-14 -> **承载支柱**:P1 主(每轮取舍的节拍器)· P2 次(规划的延迟兑现)· P3(旗稀缺性→AP 机会成本)· P4(移动免费的氛围归属) -> **层级**:Layer 1 Foundation · Milestone MVP · 设计顺序第 2 位(上游 D2 已 Approved) -> **一句话**:玩家每轮的行动预算账本——固定 AP、统一价目、停手 1:1 转存 RAP,收益全以战斗效果直兑进结算,自身不产生、不折算任何抽象资源点。 -> **推演件**:`design/gdd/analysis/a3-action-economy.md`(本文件只收结论,理由在那里) - -## 设计目的 - -A3 是玩家每轮的行动预算账本:扫雷侧每个决策都花 AP,收益全部以战斗效果直兑进轮次结算;纯资源账本,零随机、零表现面。没有 A3,挖/旗/停手就没有统一成本语言——执行归 A2、兑付归 B1、显示归 D1。 - -1. 推理免费、兑现花 AP——取舍落点在"确定动作先兑现哪些"与"轮末赌不确定格 vs 停手攒 RAP"(P1 节拍器)。 -2. 连锁展开免费——一次正确推断被免费兑现成一整片区域,连锁开的格计入清图进度(推理放大器)。 -3. 收手换退出权——停手把剩余 AP 1:1 攒成 RAP,面对纯盲猜换一张新图是"我不赌"的体面出口(P2)。 -4. 承诺有重量——标中旗削弱敌人、踩雷强化敌人、挖安全格强化自己;旗无数量上限,稀缺性由 AP 机会成本承载(P3)。 -5. 边缘探索免费——小人移动免费、挖/旗限 8 向相邻,服务地牢氛围而非经济杠杆(P4)。 - -## 系统范围 - -负责: - -- AP 资源账本独占:`try_spend` 为全项目唯一扣减入口——余量检查、扣减、结束仲裁在单一原子事务内完成,禁双重折算 -- 统一价目(挖/插旗/拔旗各 1 AP;移动/连锁 0 成本冻结) -- 三结束路径仲裁(cleared > stopped > ap_exhausted)与 round_end 停手路径直发 -- RAP 池生命周期(战斗域:停手进账、刷新支出、战斗末清零) -- `last_round_end` 单槽只读记录 -- F1 五条款下游经济契约(登记为 B1 GDD 验收项) -- ActionEconomyTable 回填 owner(表本体归 D2) - -不负责: - -- 棋盘面规则与执行(A2) -- 轮次编排与结算(B1) -- 奖励内容与档位(B4) -- 数值表本体与 ConfigDB 读取机制(D2 承载,A3 仅回填) -- 呈现(D1) -- 教学(D5) -- 任何随机机制(本系统零随机、无 RNG 流) - -## 核心循环 - -``` -notify_round_start() [B1 编排;战斗首轮要求当前 Idle] - │ RoundStart(瞬态):AP←8 硬重置 · RAP 不动(跨轮保留) - ▼ -Active(挖掘期) - │ request_dig / request_flag_place / request_flag_pull ──┐ - │ request_stop ──────────────────────────────────────────┤ 各自进入 try_spend(action_kind) - │ request_refresh ───────────────────────────────────────┘ 单一原子事务:余量检查·扣减·结束仲裁 - │ │ - │ ├─ request_refresh 且 rap ≥ rap_refresh_cost 且未达每轮上限 - │ │ → 扣费 · 当场换新图继续挖(AP 不重置 · 无清图奖励 · 轮次不终结) - │ ▼ - │ 结束路径胜出(同帧/同批次仲裁:cleared > stopped > ap_exhausted) - ▼ -RoundEnd(瞬态) - │ stopped → RAP += remaining_ap(1:1) - │ ap_exhausted → 断言 remaining_ap = 0(违反即致命) - │ cleared → 剩余 AP 清零(不入 RAP)· 清图奖励(内容归 B4) - │ 写 last_round_end(单槽只读记录) - ▼ -Waiting - │ next_round_mode = same_board → RoundStart(同图续轮) - │ next_round_mode = new_board → RoundStart(新图;仅 cleared 轮;RAP 保留) - │ battle_over → Idle(RAP 清零 · ap=0;下一场战斗由 B1 发 round_start 重启) -``` - -出口分发: - -| 出口 | path_tag | continuation_hint | 剩余 AP / RAP | 换图 | -|---|---|---|---|---| -| 清图 | cleared | new_board | 剩余 AP 清零(不入 RAP)+ 清图奖励归 B4 | 下轮新图 | -| 停手 | stopped | same_board | RAP += remaining_ap(1:1,无乘数) | 同图续轮 | -| 耗尽 | ap_exhausted | same_board | 恒 0(不变式断言) | 同图续轮 | -| 挖掘期刷新 | 无 round_end——轮次不终结 | — | −rap_refresh_cost(每轮 ≤ refresh_cap_per_round) | 当场换图(无清图奖励;旧板旗失效) | -| 战斗结束 | — | battle_over 信号 | RAP 清零 | → Idle | - -## 核心规则 - -### 预算与价目 - -规则: - -1. [B1]在[轮次开始]经 `notify_round_start()` 触发时,A3 把 AP 硬重置为表值 `ap_per_round`(默认 8)——上轮剩余不累积、不结转;RAP 池开轮时原样保留,不做任何加减。 -2. [玩家]在[挖掘期]执行挖开格/插旗/拔旗各花 1 AP(表值),且只能作用于小人 8 向相邻的格子;移动小人与连锁展开免费;A3 定价、A2 执行,是全项目唯一消耗口径;不做经典扫雷的双击快开(chord)——每格兑现都必须花 AP。 - -| 动作 | 消耗 | 要点 | -|---|---|---| -| 挖开格 | `dig_ap_cost` = 1 AP | 仅限小人 8 向相邻格;触发连锁展开(flood fill)时连锁部分免费,连锁开的格计入清图进度 | -| 插旗 | `flag_place_ap_cost` = 1 AP | 仅限相邻格;无旗子实物资源——旗为棋盘标记,数量无上限 | -| 拔旗 | `flag_pull_ap_cost` = 1 AP | 仅限相邻格(与挖/插对称);移除棋盘标记、无返还物;OQ2 挂原型补丁复核 | -| 移动小人 | 0(冻结) | 点击已开格移动,BFS 限已探明区(A2 承载);免费服务 P4 探索氛围,非经济杠杆、调参豁免 | -| 连锁展开 | 0(冻结) | 免费;连锁开的格计入清图进度 | - -设计意图:价目均匀分布是有意的 MVP 简化,异质性钩子(地形成本修饰)已为 A4 预留。 - -### 轮次结束与仲裁 - -规则: - -1. [A3]在[AP 扣到 0 的瞬间]立即以 ap_exhausted 结束轮次——不存在 0 AP 还能操作的窗口;每个动作都在账本事务内结算并判定一次结束;多种结束方式同时成立时按固定优先级只裁出一个赢家,与到达顺序无关;不把同一份剩余 AP 按两条路径重复折算。 -2. [玩家]在[挖掘期任意时刻]可主动停手——输入层直调 A3、不经棋盘;停手立即以 stopped 结束本轮,剩余 AP 按 1:1 原值转存 RAP 池、无乘数加成;图没开完下轮继续在同一张图上挖;停手不是战斗收入流,是纯风险管理工具。 -3. [A3]在[全部安全格开完(含连锁展开开的格)]时以 cleared 结束轮次——剩余 AP 直接清零,不折算、不进 RAP 池,同时发放清图奖励;奖励发什么、发多少归 B4,且 B4 奖励表须预留按图类型(A1 biome/tag 上下文)分支的结构位;A3 只上报"清图了"这一事实,不拥有奖励内容、不感知图类型;清图后下一轮换新图。 -4. [A3/A2]在[轮次结束时]只向 B1 输出一条两字段消息——怎么结束的 + 下轮用不用换图的提示(仅为编排建议);权威的换图指令是 B1 之后回发的 `next_round_mode`;消息不夹带任何折算数值——进结算明细的收益全部是具体战斗效果,来源归因标注由 B1 承担。 - -同时成立时的仲裁(固定常量序,单事务一次判定): - -| 同时成立时 | 优先级 | 胜出后发生什么 | -|---|---|---| -| 清图(cleared) | 最高 | 剩余行动点清零 + 清图奖励,下轮换新图 | -| 停手(stopped) | 居中 | 剩余行动点 1:1 存入 RAP 池,下轮同图 | -| 行动点耗尽(ap_exhausted) | 最低 | 剩余行动点恒为 0(实现层断言,违反即致命),下轮同图 | - -### 配置纪律与效果直兑 - -规则: - -1. [A3]把[全部玩法数值]存 D2 的 `ActionEconomyTable` 配置表、经 ConfigDB 类型化读取——每轮发多少 AP、每个动作花多少、刷新门槛多高、每轮能刷几次全部入表;代码零玩法数值字面量:改数值=改表回填,不动代码;表不变,行为逐位相同;本系统零随机、无 RNG 流。 -2. [A3]把[全部扫雷收益]以战斗效果直兑——挖到安全格给主角上 buff、标中旗给怪物上 debuff、踩雷给敌方上增益、清图发奖励,直接进轮次结算明细;不存在抽象点数、不存在折算乘数,折算公式根本不存在;对账契约 = 「经济契约与数值」节 F1 五条款,约束效果侧(结算系统),登记为 B1 GDD 验收项。 - -### 旗与账本入口 - -规则: - -1. [玩家]插旗即在棋盘上放置一面标记——旗没有口袋/背包实物资源,归棋盘系统(A2)所有;跨轮保留、随图存续,清图或刷新换图时随之消失;数量无上限,稀缺性全由"插旗要花 AP"承载:插旗 = 1 AP + 棋盘多一面标记,拔旗反向(标记移除、无返还物);标中旗的收益兑付受五条硬约束(下表)。 -2. [A2]作为[挖/插/拔的调用方]只判棋盘面合法性(相邻、目标格状态、无双击快开)并执行棋盘效果,必须经 A3 账本扣费,自己无权扣资源;余量检查、扣减、结束仲裁在账本同一事务内原子完成;round_end 消息有两个合法发射源(下表)。 - -标中旗兑付硬约束: - -| 兑付硬约束 | 意思 | -|---|---| -| 兑付一次性 | 每颗雷在本次战斗内至多兑付一次,资格随首次兑付消费 | -| 当轮结算 | 旗的放置实例只是当轮结算的兑付载体,不囤积到以后 | -| 资格以雷格实例为键 | 认雷不认旗——拔旗重插同一雷格,不恢复已消费的资格(堵死每轮 2 AP 的重插农场) | -| 禁止逐轮重复兑付 | 同一颗雷的收益不会逐轮反复发 | -| 换图资格重置 | 换图后新图的雷是新实例,资格自然重置 | - -round_end 合法发射源: - -| 事项 | 责任方 | 运作方式 | -|---|---|---| -| 棋盘路径外发(耗尽 / 清图) | A2 | 账本扣费成功且本次事务内轮次结束时,A2 读取 `last_round_end` 组包外发——该读取权是接口契约的一部分,非仅测试设施 | -| 停手路径直发(stopped) | A3 | 停手是非棋盘输入,由输入层直调 A3,A3 仲裁后自行外发,payload 与 A2 路径同构——纯停手轮不存在"无发射者"漏洞 | -| `last_round_end` 只读记录 | A3 | 单槽只读记录;测试/审计断言落点,同时是 A2 组包 round_end payload 的合法数据源 | -| Waiting 出口 | A3 | 消费 B1 回发的 `next_round_mode ∈ {same_board, new_board}` 与 `battle_over` 信号 | - -### RAP 池 - -规则: - -1. [玩家]经[D1 刷新入口]在[挖掘期(Active 相位)]发起刷新,B1 `refresh_board` 挖掘期刷新编排内调用 `request_refresh() -> bool`,账本受理——RAP 池唯一进账 = 停手时剩余 AP 的 1:1 转存,唯一支出 = 刷新雷图;战斗域内跨轮次、跨扫雷图一直保留,战斗结束(进入 Idle)立刻清零;每轮最多刷 2 次;禁止"攒满就自动刷";RAP 不折算、不兑付任何战斗收益——纯风险退出资源。 - -RAP 池细则: - -| 维度 | 细则 | -|---|---| -| 来源 | 唯一来源 = 停手转存(1:1,无乘数);清图与 ap_exhausted 的剩余 AP 均不入 RAP | -| 生命周期 | 战斗域:战斗内跨轮次、跨扫雷图累积;`battle_over` 进入 Idle 时清零(每场战斗清零;清零的可见反馈与教学落点见呈现与 UI 契约);MVP 无 RAP 上限;跨战斗携带为未来选项,若开放须修订本条并登记 D3/C2 持久化归属(OQ7) | -| 支出 | 唯一支出 = 刷新雷图;决策主体 = 玩家——经 D1 刷新入口在挖掘期(Active 相位)发起,B1 `refresh_board` 编排内调用 `request_refresh() -> bool`;禁止"RAP 满即自动刷" | -| 受理与换图 | `rap ≥ rap_refresh_cost`(默认 8)时扣减并当场换新图继续挖——AP 不重置、本轮剩余 AP 保留(A2 装板受理域已同步:Active·仅刷新路径);刷新获得的新图不产生清图奖励(它不是清图);不足则拒绝、状态不变(EC13) | -| 每轮上限 | `refresh_cap_per_round`(默认 2)——轮内计数、RoundStart 重置,超限拒绝(EC15);无冷却;每次独立检查 `rap ≥ rap_refresh_cost` 并扣减 | -| 旧板旗 | 随旧板失效——零兑付、旗 AP 不返还(与拔旗不返还同族;A2 换图全量重置承载) | -| 经济注记 | 刷新价格实际 = rap_refresh_cost + 每轮 2 次上限;挖掘期当场刷新无结算发生——敌方每轮照常结算的时间税不构成刷新本身的隐性成本;OQ3 弃图率/刷新率预警阈值联动复核 | -| 收益 | 无战斗收益——RAP 不折算、不兑付任何战斗效果,纯风险退出资源 | - -停手与挖掘期刷新对照: - -| 维度 | 停手 | 挖掘期刷新 | -|---|---|---| -| 时点 | Active 任意时刻 | Active(挖掘期) | -| 发起 | 玩家输入层直调 A3 | 玩家经 D1 发起,B1 `refresh_board` 编排内调用 | -| 轮次 | 结束(path_tag=stopped),本图未开完 → 下轮同图 | 不终结——当场换新图继续挖 | -| 资源 | RAP += remaining_ap(1:1) | RAP −= rap_refresh_cost(每轮 ≤ 2 次) | -| 收益 | 风险退出权(无战斗收益) | 新图(无清图奖励;旧板旗失效零兑付) | - -设计意图:停手改产风险退出权而非战斗收入——面对纯盲猜,攒 RAP 换一张新图是"我不赌"的体面出口。 - -## 枚举与对外 API - -### 值域封闭枚举(path_tag / 信号 / 动作类型 / 相位) - -| 值 | 字段 | 产出点 | 语义 | -|---|---|---|---| -| ap_exhausted | path_tag | AP 归 0 瞬间(try_spend 事务内,A2 外发) | 轮次耗尽;continuation_hint 恒 same_board;不变式 remaining_ap=0 | -| cleared | path_tag | 全部安全格开完(含连锁格;A2 外发) | 清图;恒 new_board;剩余 AP 清零 + 清图奖励(B4) | -| stopped | path_tag | 玩家主动停手(A3 直发) | 提前结束;恒 same_board;RAP += remaining_ap(1:1) | -| same_board | continuation_hint / next_round_mode | stopped/ap_exhausted 轮输出;B1 回发 | 下轮继续同图(stopped/ap_exhausted 轮恒 same_board——B1 回发违约 fail-fast) | -| new_board | continuation_hint / next_round_mode | cleared 轮输出;B1 回发 | 下轮换新图(A1 经 B1 编排生成) | -| battle_over | B1 → A3 信号 | 战斗终结 | → Idle,RAP 清零、ap=0 | -| dig / flag_place / flag_pull | action_kind(try_spend 参数) | A2 棋盘面判定通过后 | 账本扣减的三种动作;move/chain 0 成本不经账本(A2 承载) | -| Idle / Active / Waiting | phase(只读观测量) | 资源状态机 | 可观测相位域全集;RoundStart/RoundEnd 为事务内瞬态、不可观测 | - -### 对外 API 面(封闭枚举,8 入口全 bool——新增入口 = 接口漂移) - -| API | 签名 | 语义 | -|---|---|---| -| notify_round_start | `notify_round_start() -> bool` | 开轮(B1 编排) | -| request_dig | `request_dig(chain_size: int, clears_map: bool) -> bool` | 挖掘;chain_size = 连锁附加格数(不含首格,≥0;首格恒耗 1 AP);clears_map = 本次动作后全图安全格开完 | -| request_flag_place | `request_flag_place() -> bool` | 插旗 | -| request_flag_pull | `request_flag_pull() -> bool` | 拔旗 | -| request_stop | `request_stop() -> bool` | 停手(A3 直发 stopped round_end) | -| request_refresh | `request_refresh() -> bool` | 挖掘期刷新(RAP 池规则) | -| notify_settlement_done | `notify_settlement_done(next_round_mode) -> bool` | 记录编排意图(phase 停留 Waiting) | -| notify_combat_end | `notify_combat_end() -> bool` | 战斗终结 → Idle、RAP 清零 | - -## 经济契约与数值(F1 downstream_effect_contract) - -**结论**:全部扫雷收益以战斗效果直兑(安全格→主角 buff、标中旗→怪物 debuff、踩雷→敌方增益),无抽象点数、无折算乘数——折算公式不存在;契约为对效果侧的五条款,登记为 B1 GDD 验收项(systems-index 门禁 ①–⑤);playtest 复核归 OQ3,当量归一归 OQ1。推导与数值锚定论证见 analysis 件「F1 推导论证与数值锚定」节。 - -| # | 条款 | 内容 | 闭合 owner | -|---|---|---|---| -| 1 | 单一当量对照条款 | B1 须出效果档位对照表(1 最低档安全格 buff = ? 当量;debuff/清图奖励/敌方增益均对照归一),对全部收益来源单一换算——分源改率 = 契约失效,须回本 GDD 重议;归 OQ1(注意与 OQ6 清图奖励插槽区分) | B1 | -| 2 | 标中旗锚条款 | 标中旗的怪物 debuff 档位当量必须严格大于最低档安全格 buff 当量;对照基准须为连锁放大的边际挖掘收益(单 AP 平均挖掘当量,含连锁期望放大);每战标中旗总吞吐(N 旗 = N debuff)无单档上限可依恃,由 B1 按条款 1 对照表对账;插旗挤占清图进度的边际轮成本由 B4 定档时核算,或在其 GDD 声明 MVP 忽略并给理由 | B4 表设计 + B1 对照验收 | -| 3 | 挖掘风险条款 | 挖掘决策 EV 健康不等式(见公式):两端分别锚定 A1 可推理率生成参数(P1 下限)与 B2 惩罚上限表值(上限值登记为 B2 GDD 验收项);B1 为单一闭合对账 owner(A1/B2 供给锚值,B1 签字验收),登记为 B1 GDD 强制检查点 | B1 | -| 4 | 清图奖励条款 | 清图奖励 > 0,量级与差异化分支归 B4(输入含 A1 图类型上下文) | B4 | -| 5 | 清图 vs 弃图刷新支配性条款 | 清图奖励当量下界须使"推到底清图"的期望当量 ≥ "确定格挖完即弃图刷新"的期望当量(见公式);该环强度与 A1 可推理率反向耦合;与条款 3 共同登记 B1 强制检查点 | B1 | - -### 公式与验算 - -``` -条款 3(挖掘决策 EV 健康不等式): - P(安全) × V_safe_lb > P(雷) × V_mine_ub - P(安全) / P(雷) —— 挖掘目标格为安全格 / 为雷的概率 - V_safe_lb —— 最低档安全格 buff 当量下界 - V_mine_ub —— 敌方增益当量上界 - -条款 5(清图 vs 弃图刷新支配性): - C ≥ 弃图所节省的期望雷险当量 + Δ轮数 × 敌方结算强度当量 - C —— 清图奖励当量(B4,条款 4) - inputs —— B4 的 C、B2 惩罚上限、A1 雷密度/可推理率、B1 结算强度(B1 闭合对账) -``` - -Variables: - -| 变量 | 含义 | 锚定来源 | -|---|---|---| -| P(安全) / P(雷) | 挖掘目标格为安全格 / 为雷的概率 | A1 可推理率生成参数(P1 下限——决定 P(安全) 的玩家可达上界) | -| V_safe_lb | 最低档安全格 buff 当量下界 | B1 条款 1 效果档位对照表 | -| V_mine_ub | 敌方增益当量上界 | B2 惩罚上限表值(登记为 B2 GDD 验收项) | -| C | 清图奖励当量 | B4(条款 4 差异化插槽) | -| Δ轮数 | "推到底清图"与"确定格挖完即弃图刷新"的轮数差 | A1 雷密度/可推理率 × B1 结算强度 | - -验算项(provisional): - -| 验算项 | provisional 值 | 刷新时点 | -|---|---|---| -| 条款 2 对照基准 | 下限 1:1(单 AP 平均挖掘当量,含连锁期望放大) | B4/B1 定稿校准 | -| 条款 3 目标带 | 原型临时值(伏击 +3 / 敌 18HP/4ATK)代默认表给出首版示例 | 随 B2 表回填刷新 | -| 条款 4 清图奖励 | +10 临时锚(B4 插槽的 provisional 参考) | 量级归 B4 | -| 条款 5 支配性 | +10 锚对默认 8 AP 图形况粗验通过 | 正式锚随 B4/B2/B1 表值定稿 | - -## 状态机 - -轮次内资源状态机——A3 资源侧视图:只暴露资源余量与 `last_round_end`,并消费 B1 信号: - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| RoundStart(瞬态) | `notify_round_start()`(B1 编排;战斗首轮要求当前 Idle) | AP←8(硬重置);RAP 不动(跨轮保留)→ Active | -| Active | 预算就绪 | 接受耗 AP 动作并经 `try_spend` 原子扣减;每个动作结算事务内按优先级仲裁(cleared > stopped > ap_exhausted)→ RoundEnd(胜出 path_tag);挖掘期刷新在此相位受理 | -| RoundEnd(瞬态) | 任一结束路径胜出 | 停手:RAP += remaining_ap(1:1);ap_exhausted:不变式断言 remaining_ap=0,违反即致命;清图:剩余 AP 清零。写 `last_round_end` → Waiting | -| Waiting | 结算完成前不接受 round_start(AC-14) | 消费 B1 信号:`next_round_mode=same_board` → 下轮 RoundStart(同图——stopped/ap_exhausted 轮恒 same_board);`next_round_mode=new_board` → 下轮 RoundStart(新图,A1 经 B1 编排生成——仅 cleared 轮;RAP 保留);`battle_over` → Idle(RAP 清零)。request_refresh 不在此相位受理 | -| Idle | 战斗终结 | 不响应任何动作请求;RAP=0、ap=0;下一场战斗由 B1 发 round_start 重启(唯一出口) | - -- **不变式**:可观测相位域 = {Idle, Active, Waiting}——RoundStart 与 RoundEnd 均为单事务内瞬态,不可观测、不作为任何测试 GIVEN;ap_exhausted 轮恒 remaining_ap=0;RAP 只经停手增加、只经刷新扣减与 battle_over 清零;编排权威序列以 B1 轮次生命周期编排章节为准。 - -### 输入 × 相位矩阵 - -全部 8 个 API 返回 bool;非法输入 = 拒绝(false)+ 状态不变 + debug 诊断——fail-fast 不静默吞编排错误,但不采用进程致命(进程致命保留给 D2 数据通道)。 - -| 输入 | Idle | Active | Waiting | -|---|---|---|---| -| `notify_round_start` | 受理(RoundStart) | 拒绝 | 拒绝(settlement 消费后受理——AC-14 门) | -| `request_dig` / `request_flag_place` / `request_flag_pull` / `request_stop` | 拒绝 | 受理(经 `try_spend`) | 拒绝 | -| `request_refresh` | 拒绝 | 受理(挖掘期当场换图) | 拒绝 | -| `notify_settlement_done` | 拒绝 | 拒绝 | 受理(重复调用拒绝) | -| `notify_combat_end` | 拒绝 | 拒绝 | 受理(→ Idle,RAP 清零) | - -## 边界情况 - -| 条件 | 行为 | 依据 | -|---|---|---| -| EC1 AP=0 后仍有动作请求 | 全部拒绝(返回 false)——轮次已在归 0 瞬间结束,不存在 0-AP 窗口 | 轮次结束与仲裁 | -| EC2 AP 不足以支付动作(含插旗/拔旗——旗无实物资源,拒绝只看 AP) | 拒绝、状态不变;`last_round_end` 不变 | 旗与账本入口 / AC-7 | -| EC3 玩家拔旗再插他格(挪旗) | 合法——插+拔合计耗 2 AP(插 1 + 拔 1,默认值下);相对"直接改插他格"多耗的 1 AP(拔旗)即"防免费重排"的有意代价;旗标记的移除/重建为 A2 棋盘操作,A3 只见 AP −2 | 预算与价目 / AC-16 | -| EC4 同帧/同批次多结束路径竞争 | 按总仲裁 cleared > stopped > ap_exhausted,与到达顺序无关、单次判定;"先停后挖"腿的批次语义在 A3 冒烟 API 上不可构造(同步单调用无事务批次概念)——该腿显式 deferral 至 A2 集成测试承载(systems-index 门禁登记,非静默豁免);A3 冒烟承载"先挖后停"腿(AC-8) | 轮次结束与仲裁 / AC-8 | -| EC5 连锁展开开完全图 | 连锁免费;清图判定以"安全格全部开完"为准(含连锁开的格)→ 正常触发 cleared;RoundStart 的初始 3×3 自动展开同理(退化小图属既有行为,不设独立分支);退化图刷清图奖励的钓鱼风险登记为 A1/B1 下游约束——最小安全格数下限归 A1 生成参数验收;初始展开的定义落点(免费、计入清图进度、无奖励)归 A2 GDD 承载,本 GDD 仅经 `chain_size`/`clears_map` 参数引用其结果 | 预算与价目 / AC-6b | -| EC6 满 AP 停手 | 合法——RAP +8(= rap_refresh_cost,恰好可达一刷,RAP 池基线节拍,有意;该节拍与 OQ3"纯停手轮占比"预警同源,调参时联动评估);退化环健康性由 F1 条款 5(支配性不等式)+ OQ3 弃图率/完成度指标守门——诚实声明全文见 analysis 件「停手与刷新」节 | RAP 池 / F1 条款 5 / OQ3 | -| EC7 同轮内插旗后又拔旗 | AP 合计消耗 2(插 1 + 拔 1,默认值下);旗标记由 A2 移除,A3 无旗状态可返 | 预算与价目 | -| EC8 战斗最后一轮的收益兑现 | 敌人已全灭时 B1 结算先判胜,当轮 buff/debuff/清图奖励是否兑现 = B1 判定次序域,A3 无断言义务(out-of-scope);A3 义务仅为每轮无条件输出一条 `(path_tag, continuation_hint)` | B1 域 | -| EC9 跨轮/跨图资源携带 | RAP 是唯一跨轮携带量(战斗域,跨图也保留);停手不是战斗资源机制——无复利问题;AP 腿每轮硬重置;旗标记随图存续(A2 域);RAP 战斗结束清零(AC-11) | 预算与价目 / RAP 池 / AC-11 | -| EC10 最后 1 AP 挖开最后安全格 | cleared 与 ap_exhausted 同时成立 → 清图胜出:输出 `(cleared, new_board)`、剩余 AP 清零 + 清图奖励 + 换图,ap_exhausted 不触发——防"耗尽优先"实现把清图高光结算为最差结局、训练玩家永远留最后一格停手 | 轮次结束与仲裁 / AC-4b | -| EC11 挖已插旗的格 | 拒绝——须先拔旗(1 AP,默认值下)再挖;旗是"别挖这里"的承诺标记,挖旗格合法化会催生零风险滥用;误标改主意的代价 = 拔旗 1 AP(P3 承诺重量);棋盘面判定归 A2 | A2 域 / AC 前言 out-of-scope | -| EC12 RAP 生命周期边界 | MVP 无上限;战斗结束(Idle)强制清零;跨战斗携带若未来开放,须修订本条与 RAP 池规则并登记 D3 持久化归属 + C2 冒险域语义(OQ7)——禁止静默超域 | RAP 池 / OQ7 | -| EC13 RAP 不足时请求刷新 | `request_refresh()` 返回 false、RAP 不变、相位不变(Active 相位内的资源不足拒绝;与 AC-14 的相位非法拒绝区分——后者附 debug 诊断,两者均为 bool 口径) | RAP 池 / AC-5b | -| EC14 清图/耗尽轮次产生剩余 AP | 清图剩余 AP 清零(不入 RAP);ap_exhausted 恒 remaining_ap=0(不变式断言);两路径 RAP 增量恒为 0(AC-4/AC-6 断言);不变式断言的实现载体为 debug 断言(冒烟无 fault-injection 载体;行为级代理 = AC-4 的 rap 不变断言) | 轮次结束与仲裁 / AC-4 / AC-6 | -| EC15 同一轮内多次请求刷新 | 受理至每轮上限 `refresh_cap_per_round`(默认 2)为止,超限拒绝(resource_face;轮内计数、RoundStart 重置);每次独立检查 `rap ≥ rap_refresh_cost` 并扣减;无冷却;每次刷新都当场换新图且不产生清图奖励;挖掘期当场刷新无结算发生——OQ3 联动复核 | RAP 池 / AC-5b | - -## 呈现与 UI 契约 - -A3 不拥有 UI,对外暴露的状态与反馈义务: - -| # | 义务 | 归属 | -|---|---|---| -| 1 | 当前 AP 与当前 RAP 为 HUD 常显字段 | D1 | -| 2 | 刷新入口为玩家发起,入口可用性由 B1/D1 呈现 | B1/D1 | -| 3 | `battle_over` 时 RAP 清零须有可见反馈——防"攒的钱凭空没了"读感(对账义务 #9) | D1 | -| 4 | 动作非法原因需可区分且双源——棋盘面非法(非相邻格/挖旗格等,A2 判定)/ 资源面非法(AP 不足 / RAP 不足,A3 判定),D1 呈现(原因读数的测试承载声明见验收标准前言 out-of-scope) | D1/A2 | -| 5 | 结算明细的效果项带来源标注(P2 归因) | B1 | -| 6 | 交互成本指标(每消耗 1 AP ≤ 2 次点击)归 A2/D1 观测(P4 免费移动的点击摩擦护栏) | A2/D1 | -| 7 | 无专属表现面、无音频需求;AP/RAP 余量变化与"资源不足"反馈的呈现归 D1/A2 | D1/A2 | -| 8 | AP/旗(价目)/停手/RAP 的教学口径以本 GDD 价目表为准,须含"RAP 战斗结束清零"条目(防"存的钱凭空没了"误读) | D5 | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard | ActionEconomyTable schema 与 ConfigDB 类型化读取;本 GDD 为该表回填 owner | -| 上游 | A1 | 间接事实依赖 | 新图生成经 B1 编排调用——A3 不直接消费 A1 接口,仅 Waiting 出口消费其结果信号 | -| 下游 | A2 | hard | 账本调用(`try_spend`)+ 价目表执行 + round_end 棋盘路径外发(payload 组包读取 `last_round_end`);A2 校验棋盘面合法性,资源合法性归 A3;旗标记棋盘状态归 A2;EC4"先停后挖"批次仲裁 deferral 至 A2 集成测试 | -| 下游 | B1 | hard | RoundEnd 输出 `(path_tag, continuation_hint)`;挖掘期刷新编排(`refresh_board`)内调用 `request_refresh()`;回发 `next_round_mode`/`battle_over`;F1 契约验收项(效果档位对照表单一线性换算) | -| 下游 | B4 | soft | 清图奖励差异化插槽(按图类型分支);标中旗 debuff 档位(OQ5/F1 条款 2 锚约束) | -| 下游 | D1 | soft | AP/RAP HUD 常显;刷新入口与 RAP 清零反馈;非法原因双源呈现 | -| 下游 | D5 | soft | 教学口径来源(含 RAP/刷新/RAP 战斗末清零) | - -无其他玩法上游(Foundation 层)。 - -对账义务登记(活契约;已履行行 #1–3 见 analysis 件附录): - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| 4 | config 结构位 `refresh_cap_per_round` 预留;D2/registry 字段回写随实现批次(届时 AC-10a 七字段清单同步扩为八字段) | D2 | 待实现批次 | -| 5 | F1 五条款验收——效果档位对照表/标中旗锚/挖掘风险不等式/清图奖励/弃图支配性(条款 3/5 为 B1 强制检查点;systems-index 门禁 ①–⑤) | B1(供给锚值:A1/B2/B4) | 已登记 | -| 6 | EC4"先停后挖"批次仲裁腿 deferral 至 A2 集成测试(A3 冒烟 API 不可构造;A3 冒烟承载"先挖后停"腿 AC-8) | A2 | 已登记(systems-index 门禁) | -| 7 | 退化图刷清图奖励的钓鱼风险——最小安全格数下限归 A1 生成参数验收;初始展开定义落点(免费、计入清图进度、无奖励)归 A2 GDD 承载 | A1/A2/B1 | 已登记(EC5) | -| 8 | 图类型上下文在战斗域内恒定(biome 挂关卡层、不逐图重掷——防 `request_refresh` 退化为 biome 重掷钓鱼口) | A1/B4 共同验收 | 已登记(OQ6) | -| 9 | 刷新入口(玩家发起)与 battle_over 时 RAP 清零的可见反馈 | D1 | 已登记(D1 GDD 验收项) | - -## P0 最小闭环 - -1. B1 发 `notify_round_start()`——AP 硬重置 8,RAP 跨轮保留,进入 Active。 -2. 玩家挖/插旗/拔旗——A2 判棋盘面合法后经 `try_spend` 各扣 1 AP;连锁展开免费且计入清图进度。 -3. 玩家可随时停手——RAP += 剩余 AP(1:1);或 rap ≥ 8 时经 D1 入口刷新当场换图(每轮 ≤ 2 次)。 -4. 结束路径在账本事务内仲裁(cleared > stopped > ap_exhausted),写 `last_round_end`。 -5. round_end `(path_tag, continuation_hint)` 输出给 B1(棋盘路径 A2 外发、停手 A3 直发)。 -6. B1 结算——安全格 buff / 标中旗 debuff / 清图奖励以战斗效果直兑进明细(F1 五条款对账)。 -7. B1 回发 `next_round_mode` 或 `battle_over`——同图续轮 / 仅清图轮换新图 / 战斗终结 RAP 清零。 -8. 下轮 RoundStart 回到步骤 1,或进入 Idle 等待下一场战斗。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | RAP 跨战斗存蓄开关(OQ7) | MVP 每场战斗清零;待垂直切片 playtest 验证 Boss 图连刷策略,开放须修订 RAP 池规则/EC12 并登记 D3 持久化归属 + C2 冒险域语义 | -| P1 | 清图奖励按图类型差异化分支消费(OQ6,归 B4 表设计) | B4 奖励表预留结构位;A3 只上报 cleared,图上下文经 B1 传递、不经 A3 | -| P2 | 动作成本异质性(地形成本修饰钩子,归 A4) | MVP 价目均匀分布为有意简化;异质性钩子已预留 | -| P2 | AP 耗尽软提示(OQ4,归 D5 教学,低优先) | 规则已定"AP=0 即收轮";教学若发现新手困惑加提示不改规则,可扩展覆盖 RAP 达标刷新引导与 RAP 战斗末清零提示 | - -## 调参表 - -ActionEconomyTable schema——单行全局、int 类型;D2 承载、A3 回填 owner。已锁数值以 `design/registry/entities.yaml` 的 `action_economy` 条目为准: - -| 字段 | 域 | 默认 | owner | 说明 | -|---|---|---|---|---| -| ap_per_round | int [1, 32] | 8 | A3 | 每轮行动点(双重身份:节奏 knob 兼停手 RAP 转存规模 knob) | -| dig_ap_cost | int [1, 8] | 1 | A3 | 挖单格成本(域下限 1:0 = 无预算系统失效,越域校验拒绝) | -| flag_place_ap_cost | int [0, 8] | 1 | A3 | 插旗 AP 成本(旗无实物资源,仅此一项消耗) | -| flag_pull_ap_cost | int [0, 8] | 1 | A3 | 拔旗 AP 成本(OQ2 复核落点) | -| rap_refresh_cost | int [1, 64] | 8 | A3 | RAP 刷新门槛;默认 8 = ap_per_round,使"满 AP 一轮停手 = 恰好一刷"成为基线节拍;单字段域内任意值均可运作(仅节奏差异),跨字段约束见下 | -| move_ap_cost | int | 0 | A3 | 移动免费(P4 承载,调参豁免)——冻结 | -| chain_ap_cost | int | 0 | A3 | 连锁展开免费——冻结 | -| refresh_cap_per_round | 结构位(int) | 2(provisional——结构位预留,D2/registry 字段回写随实现批次) | A3 | 每轮刷新上限(RoundStart 重置计数);届时 AC-10a 七字段清单同步扩为八字段 | - -- knob 列纪律:移动/连锁 0 成本为结构冻结、非 knob;非 knob 字段仍入表——代码零字面量,修订须走本 GDD 修订流程;RAP 1:1 转存与战斗域生命周期为结构(跨战斗携带 = OQ7 预留开关);旗数量无上限为结构。 -- **跨字段校验(D2 validate() 级)**:任一动作成本字段(`dig_ap_cost` / `flag_place_ap_cost` / `flag_pull_ap_cost`)≤ `ap_per_round`——违反即加载期致命(D2 Rule 6 fail-fast);归 ActionEconomyTable schema 类 `validate()` 跨字段类别(D2 既有"schema validate() 收集后致命"机制承载,无需新增 D2 校验通道);违规夹具登记为 D2 校验双通道条件性夹具(同悬空引用待遇);软锁论证见 analysis 件「调参影响与交互」节。 -- **域上界注记**:dig/flag 上限 8、refresh 上限 64 为 MVP 量级护栏(非推导界),随调参需要修订。 -- knob 调高/调低影响、knob 交互(含 `rap_refresh_cost : ap_per_round` 比值节拍、A1 密度联合复核、OQ3 阈值联动)见 analysis 件「调参影响与交互」节。 - -## 验收标准 - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | A3 是被动账本,挖/插/拔的棋盘面执行归 A2(设计顺序第 6 位)、轮次节拍归 B1(第 9 位)——均未实现;冒烟脚本(`--headless --script`,承 D2 冒烟框架)直接驱动 A3 最小 API 面;A2/B1 就绪后改走真实调用方,断言口径不变 | -| API 面 | 8 个 API 布尔返回 = 受理/拒绝——"拒绝"直接断言返回值(notify_* 与 request_* 同为 bool);相位非法拒绝附 debug 诊断、非进程致命;受理矩阵见状态机节输入×相位表 | -| 参数语义 | `chain_size` = 连锁附加格数(不含首格,≥0;首格恒耗 1 AP);`clears_map` = 本次动作后全图安全格开完 | -| 只读观测量 | `ap` · `rap` · `phase` · `last_round_end`(记录 path_tag / continuation_hint,可空);相位观测域 = {Idle, Active, Waiting};RoundEnd 为事务内瞬态、不可观测,不作为 GIVEN | -| 口径声明 | `notify_settlement_done` 仅记录编排意图,phase 停留 Waiting(AC-11 断言);轮次开启仍由 `notify_round_start` 触发(AC-14 的门不被绕过);各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导(默认 8/1/1/1/8 下的具体数见各 AC;测试读取表值计算期望,不写死) | -| 夹具一致性 | 冒烟经 `chain_size`/`clears_map` 参数注入棋盘事实(信任方向见依赖 A2 行)——各 AC 使用独立夹具图,`clears_map=false` 腿的安全格余量在夹具中显式登记(防"传 false 却实际清图"的夹具失配假失败);多步 GIVEN 均给出构造序列 | -| 覆盖声明(out-of-scope) | EC11 与挖/插/拔相邻性、旗标记棋盘状态与跨轮留旗(A2 棋盘面域,A2 GDD 承载 AC,systems-index 门禁登记);EC8 末轮判定次序(B1 域);移动/连锁 0 成本不经账本(A2 侧承载);刷新的换图生成与奖励内容(B1/A1/B4 域);资源面拒绝原因的读数区分(UI 要求"可区分",但冒烟 API 无原因观测量——bool + 构造上下文可推断,呈现归 D1/A2 集成测试);跨字段校验违规(`validate()` 级,归 D2 校验双通道条件性夹具) | -| last_round_end 单槽 | 同值双发射不可区分(跨值覆盖由 AC-8/AC-9 值断言承担,同值双发防御归 A2 集成) | - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | -|---|---|---|---| -| AC-1a | phase=Idle(冷启动,rap=0) | `notify_round_start()` | 返回后 ap=8、rap=0、phase=Active | -| AC-1b | 上轮以 (stopped) 结束且 rap=3、`notify_settlement_done(same_board)` 已消费 | `notify_round_start()` | ap=8(硬重置)、rap=3 不变(RAP 跨轮保留)、phase=Active | -| AC-2 | Active ap=8 | `request_dig(chain_size, false)` 以 chain_size ∈ {0, 1, 5} 各在新轮次执行一次 | 每次返回 true 且扣减恒为 1(连锁免费:chain_size=5 时 ap 8→7 而非 8→2) | -| AC-3a | ap=8 | `request_flag_place()` | true、ap=7(旗标记为 A2 域,A3 无旗观测量) | -| AC-3b | ap≥1(AC-3a 产物 ap=7) | `request_flag_pull()` | true、ap=6 | -| AC-16 | AC-3a 产物(已插 1 旗、ap=7,旗构造经 `request_flag_place()`——A3 冒烟无棋盘观测量) | `request_flag_pull()` 后 `request_flag_place()` | 两调用均 true、AP 合计 −2(挪旗成本,EC3)、轮次不结束 | -| AC-4 | ap=1(构造:新轮 7 次 `request_dig(0,false)`)且 clears_map=false(前置:该格非最后安全格) | `request_dig(0, false)` | true、轮次立即结束、`last_round_end=(ap_exhausted, same_board)`、rap 不变(+0,EC14) | -| AC-4b | ap=1 且仅剩 1 个安全格(构造同上,digs 作用于预设夹具图) | `request_dig(0, true)` | true、`last_round_end` 值等于 `(cleared, new_board)`(清图胜出,EC10)、rap 不变;不存在第二条输出 | -| AC-5 | Active ap=3 且图未开完(构造:5 次非清图挖,8−5=3) | `request_stop()`;随后 `notify_settlement_done(same_board)` + `notify_round_start()` | true、`last_round_end=(stopped, same_board)`、rap=3(1:1 转存,恰一条输出);新轮 ap=8、rap=3 | -| AC-5b | 分支 1:Active 且 rap ≥ rap_refresh_cost(构造:满 AP 停手 → rap=8 → `notify_round_start()` 回 Active——RAP 跨轮保留);分支 2:Active 且 rap=3(构造:前轮挖 5 后 `request_stop()` → rap=3 → `notify_round_start()`) | `request_refresh()`(两分支各一次) | 分支 1:true、rap=0、phase 不变(Active——挖掘期当场换图,A2 装板受理联动);分支 2:false、rap=3、phase 不变(EC13) | -| AC-6 | ap=5(构造:3 次非清图挖) | `request_dig(0, true)`;随后 `notify_settlement_done(new_board)` + `notify_round_start()` | true、`last_round_end=(cleared, new_board)`、rap 不变(剩余 AP 清零,EC14);新轮 ap=8、rap 仍= 前值(RAP 跨图保留,EC9 的 cleared 腿) | -| AC-6b | 冷启动 ap=8、夹具图恰余 4 个安全格 | `request_dig(3, true)`(附加 3 格连锁开完全部余量;chain_size 不含首格) | true、ap=7、`last_round_end` 值等于 `(cleared, new_board)`、rap 不变——连锁免费且连锁格计入清图判定(EC5),单次判定 | -| AC-8 | Active、剩余安全格恰 1、ap≥1(先挖后停腿——A3 冒烟可测子集) | `request_dig(0, true)` 后 `request_stop()` | 第二调用返回 false、`last_round_end=(cleared, new_board)` 恰一条、phase=Waiting(EC4;stop-first 腿 deferral 至 A2 集成,门禁登记) | -| AC-15 | Active ap=8 且图未开完 | `request_stop()` | true、`last_round_end=(stopped, same_board)`、rap=8(满停 = 刷新门槛恰可达,RAP 池基线节拍,EC6) | -| AC-7 | ap=1(构造:7 次非清图挖)且 debug override `flag_place_ap_cost=2`、`flag_pull_ap_cost=2`(域 [0,8] 内,经 D2 R3 注入);承载声明:默认价目下全动作 1 AP,"AP 不足"腿(EC2)在默认表值下不可构造(ap≥1 恒可支付、ap=0 即收轮),故本 AC 显式承载于非默认表值夹具 | 依次 `request_flag_place()`、`request_flag_pull()`、`request_dig(0,false)` | 前两者 false(AP 不足,EC2)、最后者 true(ap 1→0,触发 ap_exhausted);`last_round_end` 断言只含末次记录 | -| AC-9 | phase=Waiting(经 ap_exhausted 路径构造;RoundEnd 瞬态不可观测) | 依次 `request_dig(0,false)`、`request_flag_place()`、`request_flag_pull()`、`request_stop()` | 全部 false、ap/rap 不变、`last_round_end` 不变(无第二条输出) | -| AC-11 | phase=Waiting 且 rap>0(构造:停手轮后) | `notify_settlement_done(same_board)`;随后 `notify_combat_end()` | settlement_done 返回 true 且 phase 仍= Waiting(仅记录编排意图,AC-14 门不被绕过);combat_end 返回 true、phase=Idle、rap=0(战斗域清零,EC12)、ap=0 | -| AC-12 | phase=Idle | 任何动作/停手/刷新请求 | 全部 false、`last_round_end` 保持 null、phase 不变 | -| AC-13 | phase=Idle | `notify_round_start()`(新战斗首轮) | 返回 true、phase=Active、ap=8(Idle 唯一出口;RoundStart 瞬态不作断言落点) | -| AC-14 | phase=Waiting 且结算未完成(未消费 next_round_mode) | `notify_round_start()` | 返回 false、phase 停留 Waiting、`last_round_end` 不变(fail-fast = 拒绝 + debug 诊断,不静默吞编排错误;统一 bool 口径,非进程致命) | -| AC-18 | phase=Active(冷启动后、未挖任何格) | 依次 `notify_round_start()`、`notify_settlement_done(same_board)`、`notify_combat_end()` | 全部返回 false、ap/rap/phase/`last_round_end` 均不变(输入×相位矩阵 Active 列全覆盖;防 B1 双启动静默 AP←8 重置);`request_refresh` 于 Active 受理(见 AC-5b) | -| AC-17 | 全新 A3 实例(同一 ConfigDB 表;每遍以新实例构造,无跨实例状态) | 同一动作序列驱动两遍 | 两遍 `last_round_end` 序列与 rap 轨迹逐项相同(零随机的行为级证据,D2 AC-15 的 A3 层前身) | -| AC-10a | ConfigDB 加载完成 | 脚本解析 `design/registry/entities.yaml` 的 `action_economy` 条目 | 与 `ConfigDB.action_economy` 七字段(ap_per_round / dig_ap_cost / flag_place_ap_cost / flag_pull_ap_cost / rap_refresh_cost / move_ap_cost / chain_ap_cost)逐一相等;registry 缺任一字段即失败 | -| AC-10b | A3 文件集 | 纳入 D2 AC-14 项目级扫描域 | 引用其人工三要素口径,不另设自动化字面量硬 THEN——字面量判定误报率高,D2 已定性为 warning 级 + 人工复核 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排为 design 件——设计推演(F1 推导论证、数值锚定、候选取舍、体验锚点论证、EC6 退化环诚实声明、knob 影响与交互、软锁论证)剥离至 `design/gdd/analysis/a3-action-economy.md`;对账义务已履行行(#1–3)移 analysis 附录;规则/数值/AC/EC/依赖/OQ 编号与内容零变更 | -| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例(docs/lean-gdd-sample-b1.md)重排——正文修订注记剥离收敛至本表;速览/体验锚点/枚举/边界情况/AC/义务台账/OQ 转表格,流程转字符画;F1 五条款、公式与验算数据全保留;语义与 2026-09-07 三轮评审修订版及 2026-09-12 D4 修订对齐,零规则变更 | -| D4 修订 | 2026-09-12 | 刷新决策前移挖掘期:`request_refresh` 由 B1 `refresh_board` 挖掘期刷新编排内调用(原结算编排期 Waiting 相位代理调用退役);新增每轮刷新上限 `refresh_cap_per_round` 默认 2(RoundStart 重置、超限拒绝,EC15);旧板旗随旧板作废(零兑付、旗 AP 不返还,A2 换图全量重置承载);stopped/ap_exhausted 轮恒 same_board 钉入 Waiting 出口契约 | -| 三轮评审修订版 | 2026-09-07 | 三轮 full review(game-designer · systems-designer · qa-lead · economy-designer · creative-director)8 条文本级 blocking 同日全部核销,用户拍板接受修订并标记 Approved、免独立 delta 核销(不设第四轮全量评审):RAP 池新增(停手剩余 AP 1:1 转存,原 ×2 折算与 stop_multiplier 删除;战斗域生命周期、battle_over 清零);清图剩余 AP 作废(原 ×1 折算与 clear_multiplier 删除);F1 结构性改写为五条款并钉死 B1 闭合 owner(原 F1 折算公式与 F2 挖/停/清激励不等式整体作废——F2 被二轮评审击穿两条数学缺陷:博弈树错误、缺风险项,不再修复而是移除病灶);旗子单态(口袋旗双态删除,数量无上限,稀缺性由 AP 机会成本承载);round_end 双发射源(stopped 由 A3 直发);兑付资格以雷格实例为键(堵重插农场);ActionEconomyTable 四字段删除 + rap_refresh_cost 新增(同日三次回填);跨字段校验(动作成本 ≤ ap_per_round);输入×相位矩阵增补;评审日志 design/gdd/reviews/a3-action-economy-review-log.md | -| v1(初稿定稿) | 2026-09-07 前 | 数值继承原型 v2/v3 实测结论与 game-concept 定稿:AP=8 定稿(12 点否决);连锁免费(原型 v2 定稿);统一行动经济(原型 v3:挖/插/拔均限相邻、拔旗 1 AP 条文读法确认);三向效果与清图奖励结构落位 | diff --git a/design/archive/gdd-2026-09-14/a4-terrain-variation.md b/design/archive/gdd-2026-09-14/a4-terrain-variation.md deleted file mode 100644 index eb4bd996..00000000 --- a/design/archive/gdd-2026-09-14/a4-terrain-variation.md +++ /dev/null @@ -1,478 +0,0 @@ -# A4 地形变异(Terrain Variation) - -> **状态**:Approved · **版本**:v2 · 2026-09-14 -> **一句话**:定义地形变异——基础规则上的区域性规则偏离;MVP 唯一变异为迷雾。 -> **推演件**:`design/gdd/analysis/a4-terrain-variation.md`(推导、论证与开放问题 OQ1–8 全在那里) -> **承载支柱**:P1 主(信息诚实边界——"不可推理"永不伪装成"可推理")· P3(信息维度变体——定价通货从雷险换信息+AP;迷雾仅其信息切面)· P2(暗面警示——雾区奖励可预期性切面)· P4(地牢氛围本体承载) -> **层级**:Layer 1 Foundation · Milestone MVP · 设计顺序第 3 位(上游 D2、A3 已 Approved) - -## 设计目的 - -A4 是定义层系统:在基础扫雷规则上叠加区域性规则偏离的框架 + MVP 迷雾。变异由棋盘生成(A1)布置在图上、玩家在挖掘中遭遇并应对——看见迷雾边界那一刻决策就出现。没有 A4,难度只能靠雷数单调缩放、关卡间"解锁新变异"的推进感消失,且"无法推理"的格子会以埋伏形式随机出现;迷雾把"你推不出来"从暗处的埋伏变成明处的选择——显式标注、可绕行、可买情报,是 P1"我算对了"的诚实兜底、P3"风险与收益同源"在空间维度的载体。 - -1. 数字不再说话是明示不是陷阱:雾外仍可用区外数字推理雾边缘的雷(跨雾推理——被雾边已知约束放大的常规推理体验,非独立机制);"不可推理"永不伪装成"可推理"(基础区可推理率生成保证归 A1)。 -2. 不赌命,赌信息与行动力:雾格成本两态——链可达雾格经邻接 0 格连锁免费开出、链不可达雾格按全价收紧盲区预算;"里面有价值"是契约而非愿望,由 B4 三条定价硬约束兜底(义务清单 B4-①②③)。 -3. 边界可见、内容隐蔽:雾内奖励若不可见,规划退化成探索惊喜(创意风险 #1,CD 门禁登记 B4/A4 落实)——Core Rules 定迷雾信息呈现规则的精确切面,奖励可见性/探测机制的接口在此预留、内容归 B4/A5。 -4. 趴在地图上的黑暗:未探索的黑暗是有形状、有边界、趴在地图上的实体;岩浆/冰冻随关卡解锁延续"越深越险的地貌"叙事(P4 越下越险)。 - -设计意图:雾是清图的必经段而非可绕过的支线,"绕开走"的真实形态是 A3 的停手/弃图风险退出(垂直切片起再加"是否用道具买情报",A5);玩家每轮都在看见并应对变异——直接感知。 - -## 系统范围 - -负责: - -- 变异的定义与交互规则 owner——玩家不"使用"A4,而是在挖掘中遭遇并应对它 -- VariationTable 8 字段定义(D2 承载,本 GDD 回填 owner) -- F1 候选池门控谓词(variant_pool_gate) -- 信息剥夺边界与双向效应(雾藏什么、不藏什么、补什么) -- 生成期布置约束声明(执行归 A1) -- 零特判原则的规则面(义务是"不加分支") -- 未来变异扩展框架(加行即用 + 接口漂移回写) - -不负责: - -- 布置算法与区域参数(A1 BoardGenTable) -- 挖/旗执行逻辑(A2) -- 呈现(D1) -- 教学文案(D5) -- 奖励内容与定价(B4/B1) -- 道具(A5) -- 全局变异语义(C3) -- 玩法数值字面量与随机(数据表 + RngService 封闭流) - -## 核心循环 - -### 地形布置(A1 生成期——A4 只声明约束与门控,算法归 A1) - -``` -A1 生成新扫雷图(雷图 · 尺寸 · biome,(level_index, node_depth) 维度) - │ ① pool = F1(level_index, board_biome);pool=∅(雾未解锁 / biome_tag 全不匹配) - │ → 静默布置普通图,不报错(EC1) - │ ② 池非空 → 逐候选按 cell_constraint=safe_nonzero 求可行域;非可行(非 0 安全格 - │ 面积或连通分量不足)→ 跳过雾布置,本图为合法无变异图(EC2 降级;k 口径总纲:本 GDD 无平衡公式——迷雾的全部数量参数(区域数/尺寸/位置/与雷密度及图尺寸的交互)归 A1 BoardGenTable,且须在 Rule 3 结构推论硬边界(厚度 ≤2【≡ 任意 3×3 窗口非全雾】/ f ≤ 8d)内定义。A4 侧定量内容仅三条:F1 门控谓词、结构推论承重数学、雾致预算增量注记。 - -### F1 布置候选门控(variant_pool_gate) - -**结论**:pool 是集合谓词(MVP 规模 ≤1)——unlock_level 直接整数比较(无 D2 R1 floor 解析:unlock_level 是定义表列,非进度表行键);biome_tag 空集 = 通配(全 biome 可用),非匹配失败;空池合法,A1 静默布置普通图不报错(验收⑥)。 - -``` -pool(level_index, board_biome) = { v ∈ VariationTable | - (v.unlock_level ≤ level_index) ∧ (v.biome_tag = ∅ ∨ v.biome_tag ∩ board_biome ≠ ∅) } -eligible(v, L, B) :⇔ v ∈ pool(L, B) ——成员判定形式(AC-3 消费) -``` - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| level_index | int | ≥1 | 当前关卡序号;与 unlock_level 直接整数比较(无 D2 R1 floor 解析——unlock_level 是定义表列,非进度表行键) | -| v.unlock_level | int | [1, 999] | VariationTable 列(fog 默认 2) | -| v.biome_tag | StringSet | ∅ 或非空 | ∅ = 通配(全 biome 可用),非匹配失败 | -| board_biome | StringSet | 非空 | 当前图 biome 标签集;值域与来源归 A1(BoardGenTable biome 字段,A1 回填)——本 GDD 只声明集合类型语义 | - -Output Range:pool 为集合(MVP 规模 ≤1);逐项判定输出 bool;空池(如 level 1 雾未解锁)合法——A1 静默布置普通图,不报错(验收⑥)。 - -| level_index | pool | 验算 | -|---|---|---| -| 1 | ∅ | 雾未解锁——空池合法,静默布置普通图 | -| 2 | {fog} | fog.unlock_level=2、biome_tag=∅ 通配任意 board_biome | -| 3(magma 建行后) | {fog, magma} | 未来 magma(unlock_level=3);A1 从池中选取时必须消费 board_gen 流(回放确定性——验收⑧) | - -### 结构推论(Rule 3 承重数学——厚度、面积上界、外环雷下界) - -**结论**:非 0 安全格 ⇒ 每雾格必有非雾雷邻居 ⇒ 雾区任意处厚度 ≤2,可判定谓词 ≡ 任意 3×3 窗口非全雾(度量钉死为窗口谓词而非"直线连续行程 ≤2"——宽 3 对角带无任何全雾 3×3 窗、完全合法,按行程读法会误拒);雾面积占比存在依赖雷密度的必要上界 f ≤ 8×雷密度;k 格雾区外环必含 ≥⌈k/8⌉ 雷(雾形携带雷簇位置信息——雾边 = 推理锚)。 - -``` -非 0 安全格 ⇔ 8 邻域含 ≥1 雷;雷不可能为雾格(区内无雷) - ⇒ 每个雾格 x:∃雷 m ∈ N₈(x)(非雾雷邻居) -① 厚度:3×3 全雾窗口的中心格 8 邻全雾 ⇒ 8 邻无雷 ⇒ 中心为 0 格, - 与"雾格 ∈ 非 0 安全格"矛盾 ⇒ 任意 3×3 窗口非全雾 ⟺ 厚度 ≤2 - (雾区恒为雷集切比雪夫 1-膨胀出的边界带) -② 面积上界:每雾格 ≥1 个雷邻居,每雷至多作为 8 个雾邻格的见证 - ⇒ f ≤ 8×|M|(f = 雾格数,|M| = 雷数) -③ 外环雷下界:k 格雾区的外环(雾邻界外格集)承载全部雷邻居见证, - 外环每格至多邻 8 个雾格 ⇒ |外环雷| ≥ ⌈k/8⌉ ——雾形本身携带雷簇位置信息(Rule 5 增益侧) -``` - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| f | int | ≥0 | 雾格总数(雾面积占比的分子) | -| \|M\| | int | ≥0 | 雷数(雷密度分母 = 全格数) | -| k | int | ≥1 | 单个雾区格数 | -| N₈(x) | 格集 | —— | x 的 8 邻 | - -| 构型 | 谓词判定 | 验算 | -|---|---|---| -| 3×3 实心雾块 | 不可能成雾 | 中心格 8 邻全雾 ⇒ 8 邻无雷 ⇒ 0 格,与非 0 安全格矛盾 | -| 宽 3 对角雾带 | 合法 | 无任何全雾 3×3 窗;按"直线连续行程 ≤2"读法会误拒——度量钉死为窗口谓词 | -| f > 8×\|M\| | 违反必要上界 | 见②——参数域拒绝(EC10 联动) | -| k 格雾区 | \|外环雷\| ≥ ⌈k/8⌉ | 见③——雾边 = 推理锚,禁单向建模(验收④) | - -### 雾致预算增量(唯一 A4 侧定量注记) - -**结论**:雾不改变 AP 价目,但改变清图预算构成,雾格 AP 成本分两态——链可达免费开出(EC4)、链不可达按全价 dig_ap_cost 结算;雾致预算增量 = 链不可达雾格数 × dig_ap_cost,计入清图总预算需求,参与 A1 BoardGenTable 设计期聚合核算(非逐板运行期强制,违例动作 = 修正参数,验收⑤);该增量对 A3 F1 条款 5 仅是可行性输入、不提供雾成本显著性保证——局限如实登记。 - -``` -价目不变:挖/旗/移动成本雾内外一致(零特判,Rule 4) -雾格 AP 成本两态: - 链可达雾格 → 免费(邻接非雾 0 格连锁展开零价——EC4) - 链不可达雾格 → 全价 dig_ap_cost 结算 -雾致预算增量 = 链不可达雾格数 × dig_ap_cost (量纲闭合:格 × AP/格) -计入清图总预算需求 → 参与 A1 BoardGenTable 设计期核算 -总预算可用量与全量校验(全量待挖下界 ≤ 可用预算)口径归 A1/A3 契约,非本 GDD 定义 -``` - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| 链不可达雾格数 | int | ≥0 | A1 生成期计算并输出(B1 条款 5 对账输入的生产者义务——验收⑤) | -| dig_ap_cost | int | A3 knob(=1) | 归 A3 所有,本 GDD 引用不拥有 | - -| 情形 | 预算增量 | 验算 / 说明 | -|---|---|---| -| 链可达雾格(邻接非雾 0 格) | 0 | 连锁展开零价——免费开出(EC4) | -| 链不可达雾格 | dig_ap_cost / 格 | 全价结算;增量 = 链不可达雾格数 × dig_ap_cost | -| 稀疏图(链可达占比高) | 全价假设高估 | 系统性高估雾成本——高估方向为预算安全侧(level-designer 评审发现) | - -### 对 A3 F1 条款 5 的对账(三腿入账——构成变化而非消解) - -| 腿 | 效应 | 方向 | -|---|---|---| -| 雷险腿 | 雾区无雷、不产生 50/50 赌雷 | 消解(消解声称仅对此腿成立) | -| 信息腿 | 雾边寂静减少推理原料(推高弃图)与雾边推理锚增益(Rule 5)方向相反——净效应实测、非定理("50/50 减少可能反向利好清图"成立,"必然推高弃图"不采纳) | 双向 | -| AP 腿 | 链不可达雾格全价无连锁折扣,抬高清图成本——敌方结算时间税随之上行 | 推高弃图 | - -对账契约要点: - -1. 雾面积占比与链不可达占比为 B1 条款 5 对账输入变量;链不可达占比的生产者义务 = A1 生成期计算输出(验收⑤)——防输入变量有名无源。 -2. B1 闭合对账须雾板/无雾板两态分别验算支配性不等式——A3 provisional 验算只在无雾图形况做过。 -3. 两条方向性护栏:①雾板净当量优势带上界(雾板 vs 无雾板 EV 差的容许带——防福利方向);②防钓鱼方向(与 A3 OQ6 防钓鱼约束对账):雾板下界抬升不得使"弃图刷雾板"支配"即刷"——逐板奖励差分 × 最低雾出现率 × 8 RAP 刷新会构造出 A3 OQ6 明令防的刷新钓鱼环;解法(关卡层常量锚 / 防钓鱼不等式 / 与 OQ6 显式对账)归 B4/B1。 -4. playtest 弃图率/完成度指标雾板分层观测(注记回执 A3 OQ3——聚合指标会被雾板污染或反向掩盖)。 - -## 边界情况(EC1–EC11) - -| 条件 | 行为 | -|---|---| -| EC1 候选池为空(雾未解锁如 level 1,或 biome_tag 全不匹配) | A1 静默布置普通数字图——空池合法、非错误、无 warning(两种来源同待遇)。依据 F1 Output Range / 验收⑥ | -| EC2 cell_constraint 无解(非 0 安全格面积或连通分量尺寸不足以布置任何雾区——图太小 / 雷太密 / 雷太稀致雷膨胀皮肤碎裂 / 参数要求过高;判据含连通性而非仅总面积——雾域恒为雷集边界带,总面积充足但碎裂成小分量时同样无解) | 本次布置雾的尝试失败 → 跳过雾布置,本图为合法无变异图(A1 生成算法的降级产物);禁止放宽约束硬塞——Rule 3 承重规则不为布置成功率让步;部分达成契约:BoardGenTable 要求 N 区而仅达成 k 小人 > 旗 > 变异纹理 > 底色——雾纹理不得干扰雾外数字辨识;已开雾格 = 地板无字(不留雾残留遮蔽) | D1 | -| 3 | 调色板交换优先(视觉锚 4) | 雾纹理须支持 biome 色板变体(biome_tag 字段的换皮对应)——新 biome 不新增雾资产,只换色板 | art-bible | -| 4 | 边界可读性 = 硬指标 | 未开雾格的区域边界在任何色板下必须可读——"明处的选择"幻想的视觉前提(P1 诚实边界的呈现面),与"数字可读性 × 暗色氛围"样张测试(game-concept 风险登记第 1 条)同批验证;原型 v3 紫色迷雾格已验证基线可读性,正式色值/形状归 art-bible 格子样张测试定稿 | art-bible / D1 | -| 5 | "雾区无雷"知识的静态传达 | D1 MVP 验收两条 + 必含要点枚举(义务清单 D1-①②③)——D5 里程碑在 Alpha,雾在 MVP level 2 即首遇,D1 是 MVP 唯一活载体(对比 A1×15/A2×4,本知识此前零验收落点) | D1 | -| 6 | 已开雾格负空间与结束拍 | 已开雾格 = 地板无字(负空间呈现,防误读为 bug)+ 底色层 tint 残留与雾区全开一次性完成信号(D1 验收候选——"站在洞口前"承诺的结束拍与清图进度可读;tint 处于视觉锚 3 最低层,与视觉锚 2"不留雾残留遮蔽"的冲突口径:遮蔽禁的是遮挡数字/实体的雾残留,tint 是底色层标记不犯此条;转正与否及完成信号粒度(视觉合并域 = 信号单元,禁实例级双响)归 OQ8 裁决) | D1 | -| 7 | 结算与 HUD 负空间 | 结算界面无 A4 附加项(雾格奖励 = 普通安全格奖励,无独立归因类别——P2 标注归 B1);无 HUD 常显字段(变异是棋盘属性非资源,与 A3 的 AP/RAP 不同) | B1 / D1 | -| 8 | 动效与音频 | 雾格开出瞬间的"雾散"过渡(可选,MVP 不承诺)归 B5/D1 表现里程碑,非 A4 义务;无音频需求(雾开出音效归 D4 Alpha 期) | B5 / D4 | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard | VariationTable schema 承载与 ConfigDB 读取(唯一玩法上游;本 GDD 为该表回填 owner,8 字段 schema 见调参表节);新字段走接口漂移规则 | -| 上游 | A3 | 相邻契约 | 零运行时接口消费(Foundation 层;A3"地形成本修饰"价目钩子本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口);预算注记在文档层引用 `ap_per_round` / `dig_ap_cost` 两值(承重数学节与调参表跨 GDD 引用);A3 F1 条款 5 对账三腿入账见承重数学节,登记 B1 强制检查点输入项 | -| 下游 | A1 | hard | 候选池门控(F1)+ cell_constraint 生成期强制 + 出生区及其生成期可达域排除(保守上界 = flood 闭包外扩 1 格);区域数量/尺寸/位置参数归 BoardGenTable(A1 回填,本 GDD 不定数值)且须在厚度 ≤2 / f ≤ 8d 硬边界内定义;布置随机经 board_gen 流;可推理率生成参数按雾边双向净效应建模(禁单向补偿)——共 15 项登记 A1 验收(义务清单 A1-①…⑮,缺项即 blocking) | -| 下游 | A2 | hard | 变体属性只读查询(开格时决定数字显示与否)+ 零特判原则(A2 执行逻辑无变异分支——义务是"不加分支"而非"加处理");雾格开启结果照常上报(安全格)——登记 A2 验收四项(义务清单 A2-①…④,缺项即 blocking) | -| 下游 | A5 | soft(垂直切片) | counter_item_ids 消费 + 探测类道具语义 = 雾内数字显影(恢复推理原料,非排雷,EC6);悬空引用校验 + 条件性夹具随 A5 首个道具 id 回填(D2"首个引用字段 owner 补"条款的 A4 侧兑现) | -| 下游 | B1 | soft(注记级) | 运行期结算不感知变异(雾格奖励 = 普通安全格奖励);设计期 F1 条款 5 对账输入:三腿入账 + 雾板/无雾板两态验算 + 两条方向性护栏(优势带 / 防钓鱼)+ playtest 指标雾板分层(义务清单 B1-1) | -| 下游 | B4 | soft | 雾区奖励内容/密度归 B4 表 + A1 参数;三条定价硬约束(义务清单 B4-①②③,B4 GDD 验收项);定价成本口径按链不可达雾格计(承重数学节注记);奖励预知方案(创意风险 #1)A4 侧切面已定:雾不额外隐藏内容,预知归 B4 呈现 + A5 探测 | -| 下游 | C3 | soft(垂直切片) | scope=global 枚举位(精英/Boss 图全局变异);global 行出现前须先定稿语义(MVP warning 校验);落地时重审 cell_constraint 覆盖与零特判原则是否仍成立(含 hide_numbers⇒safe_nonzero 跨字段校验相容性) | -| 下游 | D1 | soft | 雾纹理呈现规格(区域边界可读 / 形状+颜色双通道 / 绘制优先级 / 已开雾格 = 地板无字)+ MVP 验收两条与必含要点枚举(义务清单 D1-①②③)+ 已开雾格 tint / 雾区全开完成信号(验收候选,OQ8)+ 已开雾格与 0 格可判定区分(0 格携带"八邻无雷"推理信息,视觉混淆会污染推理——tint 为当前唯一区分手段,转正与否随 OQ8 裁决) | -| 下游 | D5 | soft | "雾区无雷"教学口径 + 教学要点(雾 = 盲区不赌命 · 雾内旗恒空 · 清图含雾格 · 雾内无连锁折扣(连锁止于雾界属正常)· 雾格成本两态的玩家侧保守启发式)+ "每雾格必邻区外雷"教学候选(口径归 D5 裁定)+ 解锁序列动态适配(EC9——教学文案不得写死解锁关号) | - -开放问题 OQ1–8 全量登记于推演件 `design/gdd/analysis/a4-terrain-variation.md`。 - -### 跨 GDD 义务清单(对侧 GDD 门禁评审逐项核对落位,缺项即 blocking) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| A1-① | 候选池门控(F1) | A1 | 已登记 | -| A1-② | cell_constraint 生成期强制 | A1 | 已登记 | -| A1-③ | 出生区及其初始展开可达域永不含雾(可达域 A1 生成期确定性计算,保守上界 = flood 闭包外扩 1 格) | A1 | 已登记 | -| A1-④ | 可推理率参数按雾边双向净效应建模(寂静减项 × 推理锚增项,禁单向补偿——义务形式为 BoardGenTable 域内可判定谓词) | A1 | 已登记 | -| A1-⑤ | 清图预算按增量构成核算(雾致预算增量 = 链不可达雾格数 × dig_ap_cost,计入清图总预算需求;设计期聚合校验、违例 = 调参修正)+ 链不可达雾格占比生成期计算输出(B1 条款 5 对账输入生产者义务) | A1 | 已登记 | -| A1-⑥ | 空池静默(未解锁或 biome_tag 全不匹配时跳过、不报错) | A1 | 已登记 | -| A1-⑦ | 降级静默、产物合法(EC2) | A1 | 已登记 | -| A1-⑧ | 多变异选取消费 board_gen 流(回放确定性) | A1 | 已登记 | -| A1-⑨ | EC3 邻接出生区合法(约束谓词 = 出生 3×3 格集及其可达域内无变异格,邻接不构成违反) | A1 | 已登记 | -| A1-⑩ | EC10 雾占比参数域(< 全覆盖拒绝 × 可推理率下限联动,可判定谓词) | A1 | 已登记 | -| A1-⑪ | EC11 双雾区实例独立(布置身份与 board_gen 取号独立) | A1 | 已登记 | -| A1-⑫ | 厚度 ≤2(≡ 任意 3×3 窗口非全雾,非直线行程读法)/ f ≤ 8d 硬边界——区域尺寸/占比参数须在边界内定义(Rule 3 结构推论) | A1 | 已登记 | -| A1-⑬ | EC2 触发判据含连通分量尺寸(非仅总面积;含部分达成契约——实际达成区数按 shortfall 分级上报) | A1 | 已登记 | -| A1-⑭ | 降级率按 (level_index, node_depth) 埋点 + 最低雾出现率参数义务(禁放宽 Rule 3 达成;义务形式为批量统计断言——每 (level_index, node_depth) 批量板断言出现率下限 / 降级率上限,阈值与样本量归 A1 GDD 定,防形容词级观测) | A1 | 已登记 | -| A1-⑮ | board_biome 非空域校验(F1 输入前提,fail-fast 闭合) | A1 | 已登记 | -| A2-① | EC4 连锁开雾格(无数字 + 级联停止 + 计入清图 + 奖励入库) | A2 | 已登记 | -| A2-② | EC5 雾内旗恒不中(含标错惩罚上线后的一致性推论) | A2 | 已登记 | -| A2-③ | 开格上报携带变体标记(数字显示判定的数据源) | A2 | 已登记 | -| A2-④ | EC8 棋盘持有生成期变异快照、不受表重载影响 | A2 | 已登记 | -| B4-① | 雾内奖励档位下界 ≥ 最低档安全格 buff 当量——防雾格沦为"全图单位 AP 期望收益最低格"的纯税(注记:A3 条款 2 教义的对照基准为连锁放大边际收益,本锚仅是反淹没下界、不保证 per-AP 平价——per-AP 检查归 B1/B4 对账) | B4 | 已登记(B4 GDD 验收项) | -| B4-② | 清图奖励锚随雾成本负担联动上浮——口径 = 链不可达雾格数 × dig_ap_cost,与定价成本同分母;上浮形态须为关卡层常量或受 B1 防钓鱼不等式约束(定量曲线归 B4) | B4 | 已登记(B4 GDD 验收项) | -| B4-③ | 雾板净当量优势带上界(防福利方向——雾在 level 2 小图低密关链免开占比结构性最高,仅单向防税下界会使雾板退化为零成本糖果区;谓词定量归 B4) | B4 | 已登记(B4 GDD 验收项) | -| B1-1 | F1 条款 5 对账输入:三腿入账(雷险腿消解 + 信息腿双向净效应 + AP 腿链不可达全价)+ 雾板/无雾板两态验算 + 两条方向性护栏(优势带 / 防钓鱼)+ playtest 弃图率/完成度指标雾板分层 | B1 | 已登记(强制检查点输入项) | -| D1-① | 图例含"迷雾 = 无雷盲区"条目——条目恒在、不设解锁门、可随时回看(MVP 验收) | D1 | 已登记 | -| D1-② | 首遇提示一次性触发:触发谓词 = 首个实际含雾格的板进入可操作状态(挖掘阶段开始)时——生成期一次查询即判定,免疫 EC2 降级板误触发与 EC3 贴脸雾 t=0 歧义;"一次性"作用域 = 每 run 一次(MVP 无持久化设施,存档级"一生一次"归 Alpha D3/C4 后重议);可在图例回看 | D1 | 已登记 | -| D1-③ | 提示与图例必含要点枚举(A4 持验收权——D1 文案缺任一要点即验收不通过):雾 = 无雷盲区不赌命 · 雾格不传播连锁(连锁止于雾界属正常——防"连锁莫名断了"的被骗感)· 雾内插旗纯损;文案与呈现形态定稿归 D1 GDD(硬约束:非模态、不劫持输入、不打断挖掘流) | D1 | 已登记 | -| D1-④ | 已开雾格 tint 残留 / 雾区全开一次性完成信号(验收候选——"站在洞口前"承诺的结束拍与清图进度可读;转正与否及完成信号粒度归 OQ8 裁决) | D1 | 已登记(候选,OQ8) | -| C3-1 | scope=global 语义定稿 + 落地重审(cell_constraint 覆盖与零特判原则,含跨字段校验相容性) | C3 | 已登记 | -| A5-1 | counter_item_ids 首个道具 id 回填 + 悬空引用校验 + 条件性夹具补全(D2"首个引用字段 owner 补"条款兑现) | A5 | 已登记(A5 期) | -| D5-1 | "雾区无雷"教学口径 + 要点集(雾=盲区不赌命 / 雾内旗恒空 / 清图含雾格 / 无连锁折扣·止于雾界正常 / 成本两态保守启发式)+ "每雾格必邻区外雷"教学候选 + 解锁动态适配(EC9) | D5 | 已登记 | - -双向一致性核对(systems-index 依赖分层表):A1 ← A4, D2 ✅ · A2 ← A1, A3, A4 ✅ · A5 ← A2, A4, B4 ✅ · Foundation 层含 A4、无上游 ✅——无单向依赖遗漏;C3 与 A4 的关系(精英/Boss 图全局变异)由本节显式化,不与索引冲突。 - -## P0 最小闭环 - -1. A1 生成新扫雷图:求 F1 候选池(unlock_level ≤ 当前关卡序号且 biome_tag 匹配才入池)——池空则静默出普通图(无变异,EC1)。 -2. 池非空则在可行域(非 0 安全格)内布置雾区:硬边界逐项成立(厚度 ≤2 / f ≤ 8×雷密度 / 雾占比 < 全覆盖 / 出生 3×3 及可达域排除 / board_gen 流取号);不可行则降级为合法无变异图(EC2)。 -3. 玩家开局:出生区及连锁可达域永无雾;看见雾区边界(专属纹理)——边界可见、内容隐蔽。 -4. 玩家挖格或 0 格连锁传播至雾格:A2 只读查询变体属性——雾格照常开出、不显示数字;连锁来源免费、单格挖掘全价 dig_ap_cost(两态)。 -5. 连锁路由决策:玩家安排挖掘顺序让 0 格连锁免费吃掉雾格;链不可达雾残段权衡"全价续付清图"还是"停手/弃图"(A3 风险退出;垂直切片起再加"是否用道具买情报",A5)。 -6. 雾格计入清图进度、安全格奖励照常入库;既有系统零变异分支;雾内插旗合法但轮末判定恒不中。 -7. 清图判定含雾格——全部安全格(含雾格)开满即触发清图结算;链不可达占比等生成期输出回流 B1 条款 5 对账。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | 岩浆/冰冻变异建行 | MVP 无容器(CD 门禁);变异框架已就位、加行即用,随垂直切片关卡解锁建行;P3 雷险维度由其承接(OQ5) | -| P1 | 探测道具消费 counter_item_ids(EC6 显影) | A5 期生效;显影时效/定价归 A5 GDD 定稿(OQ2) | -| P1 | scope=global 全局变异语义 | C3 语义未定稿;MVP 仅预留枚举位 + warning 校验(OQ4) | -| P2 | "雾散"开出过渡动效 | 可选,MVP 不承诺——归 B5/D1 表现里程碑,非 A4 义务 | -| P2 | 雾开出音效 | D4 Alpha 期 | -| P2 | A3"地形成本修饰"per-cell 价目钩子 | 本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口 | -| P2 | 首遇提示"一生一次"作用域 | MVP 每 run 一次(无持久化设施);存档级归 Alpha D3/C4 后重议 | -| P2 | 变异解锁曲线复核 | "每关至少引入一个新元素"的推进节奏随 C3 难度曲线定稿复核(OQ6) | - -## 调参表 - -### VariationTable schema 定稿(D2 回写义务——本 GDD 为回填 owner) - -| 字段 | 域 | 默认(fog 行) | knob | owner | 说明 | -|---|---|---|---|---|---| -| variant_id | String(主键) | "fog" | ✗ | A4 回填 / D2 承载 | 变异标识;A1 候选池与 A2 查询的键 | -| display_name | String | "迷雾" | ✗ | A4 回填 / D2 承载 | 图例/教学用名(本地化归 D6) | -| unlock_level | int [1, 999] | 2 | ✓ | A4 回填 / D2 承载 | 首次可布置关卡序号(game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻);本表为定义表(数值恒定)非进度成长表,键 = variant_id,进度语义承载于此列——D2 Rule 4 豁免,语义写入 schema 注释 | -| scope | enum {region, global} | region | ✗ | A4 回填 / D2 承载 | 作用域;global 仅预留枚举位(语义归 C3,MVP 不产生 global 行) | -| info_mask | enum {none, hide_numbers} | hide_numbers | ✗ | A4 回填 / D2 承载 | 信息规则:该变异隐藏什么;新信息规则走接口漂移 | -| cell_constraint | enum {any, safe_nonzero} | safe_nonzero | ✗ | A4 回填 / D2 承载 | 布置约束:允许落在什么格子上——Rule 3 承重规则的数据载体,A1 生成期强制执行 | -| biome_tag | StringList 可空 | [] | ✓ | A4 回填 / D2 承载 | 关联 biome 主题(AD 门禁换皮约束);空 = 全 biome 可用 | -| counter_item_ids | StringList 默认空 | [] | ✗ | A4 回填 / D2 承载 | 可穿透该变异的 A5 道具清单(预留,A5 期回填——探测=雾内数字显影);非平衡 knob(内容回填字段,与"结构冻结"归类一致) | - -### knob 效应与真 owner - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| unlock_level(fog 行) | 2 | 变异内容推迟,关卡间"解锁新变异"的推进感断裂(每关至少引入一个新元素的节奏被打破) | 教学压力前移——玩家尚未在纯数字环境建立推理信任即遇信息剥夺(P1 落差语义丧失;D5 教学须跟随实际值动态适配,EC9) | -| biome_tag(fog 行) | [](全 biome 可用) | 收窄出现范围——某些 biome 无雾,多样性下降 | ——(空集即基线,无"更低") | - -- 非 knob 字段(结构冻结):scope(MVP 恒 region——开放 global 是 C3 的语义义务而非调参)、info_mask / cell_constraint(fog 行值即规则定义本身,修改 = 改规则,须走本 GDD 修订流程而非调参)、counter_item_ids(A5 期内容回填,非平衡 knob)。 -- Knob 交互与真 owner:迷雾的实际手感参数——区域数量 / 区域尺寸 / 雾面积占比 / 与雷密度的联动——全部在 A1 BoardGenTable((level_index, node_depth) 维度,A1 回填),那是难度曲线的函数;A4 的表只管"资格";禁止在两表间复制参数(单一事实源,D2 Rule 1);unlock_level 与 BoardGenTable 的难度轴正交(门控定"谁入池",表参数定"摆多大/摆哪"——systems-designer 审查确认无冲突)。 -- 跨 GDD 引用:A3 的 `ap_per_round`(8)与 `dig_ap_cost`(1)均归 A3 所有,本 GDD 不重复列出;雾致预算增量构成仅消费 dig_ap_cost(承重数学节注记),清图总预算的可用量口径归 A1/A3 契约。 - -## 验收标准 - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree、autoload 显式实例化)——A4 是定义层系统,冒烟域 = 定义层(schema / 门控谓词 / 校验);布置层 = A1 集成(15 项,义务清单 A1-①…⑮)· 执行层 = A2 集成(4 项,义务清单 A2-①…④)——deferral 以对侧登记为生效条件,A1×15 / A2×4 清单已同步 systems-index 门禁记录 | -| 致命用例协议 | 独立进程协议承 D2 AC-2b(runner manifest 逐条登记"调用→期望退出码";单进程内只做测试通道收集断言) | -| 夹具注入 | 经 `--data-root` 注入,五根齐备(3 根致命错误夹具 + 1 根 warning 夹具 + 1 根合法数据变体夹具,见夹具清单) | -| 期望值推导纪律 | 由表值推导不写死——unlock_level 与 biome_tag 均为 knob,推导纪律适用两者(防 EC9 及 biome_tag 调参假失败) | -| 诊断卫生 | 每用例先 `reset_diagnostics()`(承 D2 冒烟协议,全局声明) | -| runner manifest | 四行退出码登记:dup→≠0 · oob→≠0 · mask→≠0 · global→0(biome_tag 根仅进程内测试通道消费、无退出码行,AC-3 前置断言其零诊断加载) | -| 豁免声明 | 空表/缺表/类型错类别由 D2 AC-2 同类别夹具承载,A4 不设专属夹具(loader 级类别、与表内容无关,D2 夹具可承载;空表情形另由 AC-1"恰含一行"间接兜底) | -| 悬空引用处置 | counter_item_ids 为 D2 schema 首个引用型字段——MVP 显式声明不校验悬空引用(字段恒空、A5 未回填);A5 GDD 回填首个道具 id 时补悬空校验 + 条件性夹具(义务清单 A5-1) | - -### 夹具清单 - -| 夹具根 | 内容 | 级别 | 服务 | -|---|---|---|---| -| variation_dup_key | 重复 variant_id;与 D2 AC-2 重复键夹具独立同型(A4 表首用,避免跨表耦合) | 致命 | AC-4 / AC-4b | -| variation_unlock_oob | unlock_level=0 | 致命 | AC-4b | -| variation_mask_constraint | info_mask=hide_numbers + cell_constraint=any 跨字段违规(EC4"级联止于雾格"承重保证的测试落点) | 致命 | AC-4 / AC-4b | -| variation_global_scope | scope=global 行 | warning 级、非错误(游戏通道 0 退出) | AC-6 | -| variation_biome_tag | 合法门控测试行:biome_tag=[ice]、unlock_level=1 | 合法(无对应校验类别) | AC-3 | - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | 干净检出(默认表根) | 冒烟加载 Core Rules-3 表清单 | VariationTable 加载成功、恰含 fog 一行(无岩浆/冰冻行——内容事实断言);fog 行非 knob 六字段(variant_id/display_name/scope/info_mask/cell_constraint/counter_item_ids)与 schema 定稿值逐一相符("fog"/"迷雾"/region/hide_numbers/safe_nonzero/∅);unlock_level 与 biome_tag 两个 knob 字段仅作类型域断言、期望 = 表读值(不作定值断言——合法调参不得假失败) | Core Rule 8 / 义务清单 | -| AC-2 | fog 行表值 (u, tag=∅)(默认行),board_biome 任意非空集(全腿作用于干净检出默认表根——仅 fog 一行) | 对 (level_index=u) 求 pool;仅当 u>1,再对 (level_index=u−1) 求 pool | level_index=u 时恒含 fog;u>1 时 u−1 腿 pool=∅(u=1 时 u−1=0 越出 level_index≥1 域、不测——F1 前置域);tag≠∅ 交集推导分支由 AC-3 夹具腿承载(默认表根仅 fog 一行、tag 恒 ∅,该分支在默认根不可构造;夹具根上 ice 行 unlock_level=1、u−1 腿不真) | F1 | -| AC-3 | 前置断言:夹具根零诊断加载(每用例 reset_diagnostics() 后加载,防 schema 演进劣化静默);eligible(v, L, B) := v ∈ pool(L, B)(F1 谓词的成员判定形式)。第一腿:fog.biome_tag=∅(默认行);第二腿:夹具根 variation_biome_tag(测试行 biome_tag=[ice]、unlock_level=1 写入夹具规格——防门控腿掩蔽 biome 腿,并承载 tag≠∅ 交集推导语义) | 第一腿在 level_index=u(fog.unlock_level 表读值)以任意非空 board_biome(单/多元素集各一)求 eligible;第二腿在 level_index=1 以 board_biome={dungeon} 与 {dungeon, ice} 分别求 eligible(v=测试行) | 第一腿恒 true(通配语义——∅ 不因 board_biome 取值失败);第二腿 false / true(单元素 {dungeon} 不交集 → false;{dungeon, ice} 交集 → true) | F1 通配与交集 | -| AC-4 | 夹具根 variation_dup_key 与 variation_mask_constraint | `load_tables(root, collect_only=true)`(测试通道) | 错误清单各含重复键类别 / 跨字段校验类别(hide_numbers⇒safe_nonzero) | schema 校验 | -| AC-4b | 夹具根 variation_dup_key、variation_unlock_oob(unlock_level=0)与 variation_mask_constraint | 各以独立 headless 进程跑游戏通道 collect_only=false | 三进程均非 0 退出且错误清单完整(D2 Rule 6 加载期致命——"游戏内真的会死") | schema 校验致命 | -| AC-5 | schema 实例构造(实例化一律走 class_name 直引、不经 load()/preload()——AC-7 扫描豁免条款;程序构造免夹具) | `validate()` 作用于 unlock_level ∈ {0, 1000};∈ {1, 999} | {0, 1000} 均域错误;{1, 999} 均合法 | 域校验 | -| AC-6 | 夹具根 variation_global_scope(每用例先 reset_diagnostics()) | 测试通道加载;同夹具游戏通道独立进程 | 诊断收集器 warning 恰一条且来源类别 = global 语义注记、其余表零诊断(防他表 schema 演进以无关诊断稀释断言);游戏通道以 0 退出(非致命半句) | EC7 | -| AC-7 | A4 文件集(schema/谓词/冒烟脚本) | 按 D2 AC-9 模式静态扫描(`randomize()` / `RandomNumberGenerator` / ConfigDB 外 data 表加载) | 零命中(扫描域扩入 A4;schema class_name 直引实例化豁免——AC-5 程序构造前提,承 D2 AC-9 模式) | Core Rule 8 | -| AC-8 | ConfigDB 加载完成 | 脚本解析 `design/registry/entities.yaml` 的 `variation_table` 条目 | 与 ConfigDB VariationTable 8 字段定义(字段名/类型/域/knob 标记)逐一相等;定值断言仅限非 knob 字段,knob 字段(unlock_level/biome_tag)对账口径 = registry 随调参同步或本 AC 豁免其值(防 EC9 调参经此后门假失败);对账域显式排除 `mvp_content` 与 `fog_ap_note`(前者含 knob 活值登记);缺任一即失败(仿 A3 AC-10a) | D2 回写义务 | -| AC-9 | (人工·视觉)边界可读 / 双通道 / 色板变体 | 归 art-bible 格子样张测试(AD 门禁),非冒烟域——阈值委托的排期门与违约判定挂 systems-index 门禁增补记录;art-bible 缺位期以原型 v3 紫色为临时明度基线,就位后强制复测 | 操作化口径("可读"须为可判定谓词,防形容词验收):① 形状通道 = 色板无关线稿资产 + 对全部底色的明度对比数值下限(阈值 art-bible 定、须存在);② 新增 biome 色板强制重跑样张清单(AD 门禁复测项);③ 样张须含最坏用例:宽度 1 雾带(每格即全边界——Rule 3 结构推论下的正常形态)、"旗 × 雾纹理 × 边界"三重叠加格、宽度 1 雾带两侧毗邻数字格(视觉锚 1"纹理不干扰数字辨识"的真实威胁面在邻格——雾格自身无数字) | 呈现契约 1/4 | -| AC-10 | (人工·字面量)A4 文件集 | 纳入 D2 AC-14 项目级扫描 | 人工三要素口径,引用不另设(与 A3 AC-10b 同型) | Core Rule 8 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套格式迁移:按模板 v2 拆分——本文只装结论,公式推导论证/数值锚定论证/候选方案取舍/体验锚点论证/已裁决争议与开放问题 OQ1–8 迁 `design/gdd/analysis/a4-terrain-variation.md`;规则改编号人话句、边界情况改条件\|行为两列表;全部规则、数值、AC/EC/义务清单/OQ 编号原样保留,零规则变更 | -| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例(docs/lean-gdd-sample-b1.md)重排——正文修订注记剥离收敛至本表;速览/体验锚点/枚举/义务台账/开放问题转表格,布置与揭示流程转字符画;F1 门控谓词、厚度 ≤2 / f ≤ 8d 结构推论、雾致预算增量公式本体与验算全保留;语义与 2026-09-08 定稿对齐,零规则变更 | -| rev2 | 2026-09-08 | 同日 re-review 六项 blocking 同日核销(CD 终裁建议 delta 核销免第三轮 full 评审,用户拍板照此放行——A3 先例):① systems-index 登记闭环补全(A1×15 全枚举——⑤扩链不可达占比生产者义务、⑬扩部分达成、⑭增批量统计断言形式条款,A2×4、D1×2、B4×3、B1 条款 5 输入,registry referenced_by 补 B1/B4);② knob 口径统一(counter_item_ids 非 knob 误标修正、AC-1 改双 knob 表读值断言、AC-8 排除 mvp_content/fog_ap_note);③ 校验与 AC 可执行性(新增第五夹具 variation_mask_constraint、manifest 第四行、AC-3 夹具根零诊断前置、AC-2 钉死默认表根);④ 修订残留失实清理("探路"改连锁路由 + 续付/退出两轴、雾格成本两态口径、厚度钉死 3×3 窗口谓词防对角带误拒、夹具计数改 3 致命 + 1 warning + 1 合法、预算改增量构成——原"≤ 轮数上限 × ap_per_round"不等式作废("轮数上限"在 A3 契约无定义、恒真空转)、Upstream 改零运行时接口消费);⑤ B4 约束簇(②改链不可达同分母口径——原"雾面积"分母脱钩作废、增③防福利上界、防钓鱼张力对账 A3 OQ6、①per-AP 平价注记);⑥ MVP 验收契约(D1 必含要点补"雾格不传播连锁"、首遇提示谓词改"首个含雾板进入可操作状态"——原"雾格首次与已开区相邻"作废(贴脸雾 t=0 即真、远雾图滞后)、一次性作用域 = 每 run、EC2 部分达成契约、A1⑤ 设计期聚合校验);顺带:D5 成本教学改玩家侧保守全价启发式、Rule 7 可达域保守上界 + A2 展开域 ⊆ A1 排除域回验、OQ1 占比双重身份、新增 OQ8、AC-9 补 art-bible 指针与宽度 1 雾带邻格用例——明细见 review log | -| rev1 | 2026-09-08 | full 独立评审(game-designer · systems-designer · qa-lead · economy-designer · level-designer · ux-designer 六专员 + creative-director 终裁)八项 blocking 同日核销:① 可推理率对账公理自相矛盾 + Rule 5 单向建模——改双向净效应、厚度 ≤2 / f ≤ 8d / ⌈k/8⌉ 结构推论入文(登记 A1 验收);② Player Fantasy"三选项"失实——改诚实版(雾 = 清图必经段、绕开 = A3 风险退出、买情报标注 A5 期)+ B4 两条定价硬约束 + P3 降格"信息切面"("清图判定豁免雾格"选项经裁决否决——违反零特判承重规则);③ "雾格全部全价"半假——改链不可达两态口径;④ EC2 判据扩连通分量 + 降级率埋点与最低雾出现率义务;⑤ EC3 预设 A2 未定义行为——Rule 7 可达域生成期确定性计算、邻接合法结论保留;⑥ AC 四处硬伤(AC-1 写死 unlock_level=2 等)+ deferral 闭环——A1 清单 11→15 扩容并登记 systems-index 门禁记录;⑦ EC11 定向粒度改 variant 行级、实例级定向归 A5 期新字段;⑧ "雾区无雷"教学零 MVP 落点——登记 D1 MVP 验收两条 + AC-9 操作化;顺带:hide_numbers⇒safe_nonzero 跨字段校验、EC10 升格参数域拒绝、已开雾格 tint 完成信号候选、"跨雾推理"措辞降调——明细见 review log | -| v1 | 2026-09-08 | 初稿定稿:承重规则"生成期布置约束(雾区仅非 0 安全格)+ 零特判原则 + fog unlock_level=2"用户拍板;lean 门禁 systems-designer 审查 Formulas(排除声明成立、谓词改集合语义、补下游验收项与预算构成注记)、qa-lead 审查 Acceptance Criteria;评审日志 design/gdd/reviews/a4-terrain-variation-review-log.md | diff --git a/design/archive/gdd-2026-09-14/a5-minesweeper-aux-items.md b/design/archive/gdd-2026-09-14/a5-minesweeper-aux-items.md deleted file mode 100644 index 52c5009a..00000000 --- a/design/archive/gdd-2026-09-14/a5-minesweeper-aux-items.md +++ /dev/null @@ -1,467 +0,0 @@ -# A5 扫雷辅助道具(Minesweeper Auxiliary Items) - -> **状态**:Approved · **版本**:v2 · 2026-09-14 -> **一句话**:挖掘期辅助消耗品——板级信息叠加层与 AP 增量,获取挂 B4、使用经 B1。 -> **推演件**:`design/gdd/analysis/a5-minesweeper-aux-items.md`(本文件只收结论,理由在那里) -> **承载支柱**:P1 主(信息道具 = 推理原料的恢复、替代推理窄域化)· P2 · P3 · P4 · **层级**:Layer 2.5 Core · Milestone 垂直切片(里程碑首位,设计顺序第 11 位) - -## 设计目的 - -A5 是挖掘期的信息与行动力市场:道具从 B4 奖励池获取(安全格奖励的一部分),在挖掘阶段由玩家主动消耗——雾区数字显影恢复推理原料、雷位真视与奖励预读把未知变成规划素材、AP 增量扩大当轮行动预算;效果即时可见(叠加层直接改变棋盘呈现),不进结算明细。没有 A5:雾区应对只剩停手/弃图两轴,创意风险 #1 缺未开格奖励身份的道具侧预读,"纯猜局面用道具缓解"无兑现通道;A5 同时是 B4 OQ2 与 A4 OQ2 的收口 owner。 - -1. 推不出的地方,我能买回线索——显影恢复雾格数字(恒真透传,非新信息源);真视把"代答"锁在 3×3 救急档;道具零随机、不引入新赌点。 -2. 这瓶显影尘是我上一轮捡到的——获取 = B4 奖励池 aux 行(来源 {cell, round} 逐件归因);使用 = 挖掘期自主时点、效果即时可见;经真视插旗兑付的 weaken 走既有 flag_hit 结算行——归因链不断。 -3. 买情报的代价是放弃一件战利品——aux 行挤占战斗奖励池权重;叠加层随图消亡,弃图刷新时已花显影沉没;真视≠自动兑付(插旗仍花 1 AP)。 -4. 地牢里前人留下的工具——主题命名(显影尘/探巢摆钟/地穴全图卷);item_id 直作图标键(形状+色相双通道),程序化占位先行。 - -## 系统范围 - -负责: - -- AuxItemTable schema(D2 承载、A5 回填 owner,键 = item_id——定义表非进度成长表) -- 五维度框架与覆盖断言(F2)· MVP 六行内容(值 provisional 归 C3) -- 板级叠加层容器(显影/真视/预读三集)与关卡域库存(消耗与库存规则) -- 使用目标校验规则(谓词表)· 获取与使用全流程规则 - -不负责: - -- 奖励池与权重所有权(B4——aux 行值 provisional 归 C3) -- 棋盘状态与数字(A2——恒真透传) -- AP 账本(A3——grant_ap 为接口漂移预授权) -- 变异定义(A4——counter_item_ids 为 A4 字段、A5 消费回填) -- 结算段序与使用编排调用权(B1) -- 呈现(D1)· 教学文案(D5)· 本地化(D6)· 图标美术(art-bible) - -全局硬约束:零随机(零 RNG 流消费)· 零特判延伸(A2 代码零 A5 分支——叠加层为派生信息层、零回写 A2/B4 状态)· 真视窄域护栏(雷位真视 ≤3×3、全图级仅限显影/预读类)· 无效/零信息目标不可用不消耗 · 库存关卡域 · Used 不可逆。 - -## 核心循环 - -``` -获取(install 期身份预分配——B4 域) - B4 roll_board → 格奖励身份含 aux 行(category=aux_item 激活后) - ▼ -开出资格格 → B1 grant 返回 aux_item → 路由 A5.add_item(两库存正交,不入 B4 库存) - ▼ -A5 关卡域库存(跨轮/跨图/跨战斗延续;D1 常读条) - ▼ -使用(挖掘期 Active 相位,D1 意图 → 组合根 → B1 编排——唯一调用权) - ① 相位 gate(非 Active → 拒绝) - ② validate_use(读 A2 只读面;失败 ⇒ 全链拒绝、零消耗) - ③ 逐 kind 应用(空间先、ap_grant 后):apply_overlay / A3.grant_ap - ④ consume——Used 不可逆、回执 = 快照投影 + 来源 - ▼ -D1 重查 query_inventory / query_overlays 刷新呈现 - ▼ -消亡:board retire(换图/RAP 刷新/战斗结束)→ B1 编排 retire_overlays(与 B4 同点) - 关卡结束 → B1 编排 clear_inventory(与 B4 同点 + 清空反馈计数) -``` - -| 出口 | 触发 | 动作序列 | 约束 | -|---|---|---|---| -| 正常使用 | Active 相位 + 有效目标 | validate → apply_overlay / grant_ap → consume → 回执 | 序即原子(apply/grant 无失败域 → consume 恒达) | -| 目标拒绝 | validate_use 失败(无雾可显/坐标越板/预读窗口零未开资格格等) | 全链拒绝 | 零消耗、库存不变、D1 反馈可辨 | -| 相位拒绝 | 非 Active(Waiting/结算中) | 相位 gate 拒绝 | 零消耗;与 B4 道具窗口两输入面互不竞争 | -| 随图消亡 | cleared 换图 / RAP 弃图刷新 / 战斗结束 | retire_overlays | 已花道具不返还(信息投资沉没——设计意图) | -| 关卡清空 | 关卡结束(victory/defeat 皆然) | clear_inventory | 恰一次幂等;清空前快照计数供反馈行 | - -## 道具定义(维度·schema·内容) - -规则: - -1. 规则 1:道具定义表里的每一件道具,必须标出它属于哪类帮助——情报、雷险、行动、规划、反制,至少标一类;五类每种至少有一件道具,游戏加载数据后自动检查;游戏运行时完全不读这个标签(代码零维度分支)。 - -### dimension_tags(五值封闭枚举) - -| 值 | 语义 | MVP 覆盖行 | -|---|---|---| -| info | 情报维度——推理原料的恢复(雾格数字) | probe_dust / catacomb_scroll | -| risk | 雷险维度——惩罚格真视(直接雷位信息) | nest_pendulum / blast_kit | -| action | 行动维度——当轮 AP 增量 | sapper_order / blast_kit | -| plan | 规划维度——奖励身份预读(寻路素材) | loot_compass / catacomb_scroll | -| counter | 变异对抗维度——counter_item_ids 消费(A4 框架) | probe_dust(fog 行回填) | - -### AuxItemTable schema(D2 新表,A5 回填 owner;键 = item_id) - -| 字段 | 类型/域 | 默认 | knob | 说明 | -|---|---|---|---|---| -| item_id | String(主键唯一) | — | ✗ | 道具标识;B4 RewardTable.effect_id(aux 行)与 VariationTable.counter_item_ids 的引用键 | -| display_name | String 非空 | — | ✗ | 玩家可读名(D1 呈现数据源;本地化归 D6——B2/B3/B4 同库惯例) | -| dimension_tags | StringList ⊆ 五值枚举 非空 | — | ✗ | 维度覆盖断言载体(F2);组合维度 = 稀有多维行的声明面 | -| effect_kinds | StringList ⊆ 四值枚举 非空、无重复 | — | ✗ | 效果组合(MVP ≤2——多维度结合的 schema 承载) | -| target | enum {none, fog_region, area_3x3, board_wide} | — | ✗ | 目标形态;校验 = target ∈ 各空间 kind 支持域交集(全非空间 ⇒ 恒 none);area_3x3 运行时解析 = 窗口 ∩ 板内格(边缘裁剪——加载校验域仍为整窗) | -| magnitude | int [0,999] | — | ✓ | 仅 ap_grant 行消费(= AP 点数,加载校验 ≥1——B4 item 行先例);空间行不消费非校验项 | -| use_phase | enum {active_dig} | active_dig | ✗ | 使用时机(MVP 单值;扩枚举走本 GDD 修订——B4 use_timing 扩值同批对齐) | - -### MVP 内容行集(六行——目标值,回填生效以 B4 修订批为前提;值 provisional 归 C3) - -| item_id | display_name | dimension_tags | effect_kinds | target | magnitude | RewardTable 权重/tier | -|---|---|---|---|---|---|---| -| probe_dust | 显影尘 | [info, counter] | [fog_reveal] | fog_region | — | w5 / t2 | -| sapper_order | 工兵令 | [action] | [ap_grant] | none | 2 | w5 / t2 | -| loot_compass | 探宝罗盘 | [plan] | [reward_preview] | area_3x3 | — | w4 / t2 | -| nest_pendulum | 探巢摆钟 | [risk] | [mine_reveal] | area_3x3 | — | w4 / t2 | -| catacomb_scroll | 地穴全图卷 | [info, plan] | [fog_reveal, reward_preview] | board_wide | — | w1 / t3 | -| blast_kit | 爆破工兵包 | [action, risk] | [ap_grant, mine_reveal] | area_3x3 | 4 | w1 / t3 | - -- 常规四行 = 单维中数值(tier 2 与现行池主力同档);稀有两行 = 双维组合 + 高数值(tier 3 超现行池最高档、magnitude 4 = 半轮预算)——稀有道具设计指令的直接兑现。 -- 维度覆盖:五维度各 ≥1 行(counter 由 probe_dust 承载并回填 VariationTable.fog.counter_item_ids——义务 A4×①)。 -- 全图卷组合校验:fog_reveal ∩ reward_preview 支持域交集 = {board_wide} ✓;爆破包空间 kind 仅 mine_reveal → target=area_3x3 ✓。 -- 六行均 pool_tag=safe_cell(aux 行为格奖励;tier 2/3 ≥ T_fog_min=2 → 雾池档位过滤自然兼容;clear_default 池不入 aux 行)。 - -### schema 校验类别(诊断封闭枚举) - -| 类别 | 级别 | 触发条件 | 语义 | -|---|---|---|---| -| 重复键 | 致命 | item_id 重复 | D2 Rule 6 既有类别 | -| 维度域外 | 致命 | dimension_tags 空 / 含枚举外值 | F2 覆盖断言的前提 | -| 效果域外 | 致命 | effect_kinds 空 / 含枚举外值 / 含重复 | 规则 2 | -| 目标交集违例 | 致命 | target ∉ 各空间 kind 支持域交集(全非空间行 target ≠ none 同类) | 规则 3 真视窄域护栏的强制面 | -| magnitude 域外 | 致命 | magnitude ∉ [0,999];ap_grant 行 < 1 | B4 item 行 power ≥ 1 先例 | -| use_phase 域外 | 致命 | use_phase ∉ {active_dig} | 规则 6 | -| counter 悬空 | 致命 | VariationTable.counter_item_ids 含 AuxItemTable 无此行 id | A4 悬空引用校验激活(义务 A4×②——A5-1 兑现) | -| aux 引用悬空 | 致命 | RewardTable aux 行 effect_id 在 AuxItemTable 无此行 | B4 悬空校验双表扩展(义务 B4×②) | - -设计意图:维度是内容规划的自查清单——保证五种帮助每种至少一件,玩家不管遇到什么困境都有得买。 - -## 使用效果与目标域 - -规则: - -1. 规则 2:玩家在挖掘阶段选中一件道具使用,道具做四件事之一,稀有道具同时做两件——显影(雾格数字现形,到这张图被换掉为止)、真视(圈定范围里雷的位置现形,同上)、预读(没挖开的格子预告里面的奖励,同上)、加行动力(当轮行动点变多,只对当前这一轮);加行动力 = 行动点 + 道具表数值,其余三种只是把格子记进"要额外显示"的名单——数字永远读棋盘真值,奖励身份永远读奖励表。 -2. 规则 3:凡是"告诉你雷在哪"的效果,一次最多照亮 3×3 格,任何道具都不能全图看雷;看数字(显影)和看奖励(预读)允许全图;限制写进数据校验——任何看雷道具的范围字段超过 3×3,加载数据时直接报错拒绝。 - -### 效果明细(规则 2 的实现参照——字段名与数据源) - -| kind | 效果 | 目标域支持 | 时效 | 零信息判据(不可用条件) | 呈现数据源 | -|---|---|---|---|---|---| -| fog_reveal | 未开雾格数字显影(恢复推理原料——A4 EC6 语义定稿) | fog_region / board_wide | 本图持续(叠加层) | 全板无未开雾格(板级 → 图标灰) | A2 板面恒真数字 + digit_reveal 格集 | -| mine_reveal | 雷格真视(惩罚格现形——真视≠自动兑付,插旗仍花 1 AP) | area_3x3(护栏上限) | 本图持续 | 恒有信息(零雷 = "这 9 格没雷"——恒可用) | mine_reveal 格集(标记呈现,art-bible 键契约) | -| reward_preview | 未开资格格奖励身份预读(寻路素材——创意风险 #1 兑现) | area_3x3 / board_wide | 本图持续 | board_wide:全板无未开资格格(板级 → 灰);area_3x3:窗口内零未开资格格(点击级 → 拒绝) | B1 query_reward_identity 既有读面 + reward_preview 格集 | -| ap_grant | 当轮 AP 增量(remaining_ap += magnitude;溢出停手转存 RAP 走 A3 既有规则零特判) | none(非空间) | 当轮一次性 | 恒可用 | A3 AP 读数(既有命令式刷新面) | - -### 目标域开放表(规则 3 护栏) - -| 效果 | 允许的范围 | -|---|---| -| 显影(看数字) | 一个雾区,或全图 | -| 预读(看奖励) | 3×3,或全图 | -| 真视(看雷) | 只许 3×3,全图禁止 | - -设计意图:恢复推理原料的效果可以大,代替推理的效果必须小而贵——花钱全图看雷等于把游戏换成走格子。 - -## 获取与库存 - -规则: - -1. 规则 4:玩家挖到带道具的格子时,战斗结算系统(B1)把道具放进辅助道具的关卡背包;它和战斗道具背包(B4 管)是两个独立的包,互不混装,但寿命一样——都活到关卡结束。 -2. 规则 5:背包里的辅助道具跨轮次、跨地图、跨战斗都在,直到整个关卡打完(无论输赢)由 B1 一次性清空;每件都记录从哪个格子的哪一轮捡到,结算能归因来源;用一件少一件、不能反悔;背包不设上限,稀缺靠掉落权重控制(供给期望见 F1)。 - -### 状态 - -| 容器/条目 | 状态 | 进入 | 出口 | -|---|---|---|---| -| 库存条目 | InStock → Used → Cleared | add_item 授予 → InStock;consume → Used(不可逆) | 关卡结束 → Cleared(clear_inventory;跨战斗/跨图延续同 B4 库存) | -| 板级叠加层 | Empty → Active → Retired | 首次 apply_overlay → Active(三集条目累积) | retire_overlays → Retired(cleared 换图/RAP 刷新/战斗结束——随图消亡,不跨图) | - -不变式:Used 不可逆;库存条目仅存关卡域;叠加层随图消亡且零回写 A2/B4 状态(派生信息层);A5 全 API 零随机。 - -设计意图:信息投资随图沉没——已花道具不返还是设计意图而非疏漏。 - -## 使用规则与校验 - -规则: - -1. 规则 6:玩家只能在挖掘阶段(轮次进行中)使用辅助道具,任意时点可以,用一件消耗一件;结算阶段用不了——那个窗口属于战斗道具,两个"用道具"的入口在时间上错开,不会冲突。 -2. 规则 7:玩家发起使用后,B1 按固定顺序执行四步——相位检查 → 目标校验 → 产生效果 → 消耗;所有会失败的情况都在前两步被拦下,后两步在合法输入下不会失败,所以"产生效果"和"消耗道具"永远成对发生;带两个效果的稀有道具施加顺序钉死:先空间效果(显影/真视/预读)、后加行动力——定义表里效果的书写顺序不承载运行时语义。 -3. 规则 8:目标不合法时道具不白白消耗,分两级——整张图都没东西可看时(板级零信息),背包里这件道具直接置灰、根本选不了;单个点击位置上没东西可看时(点击级零信息),那一次点击被拒绝、给可辨认的提示;两种情况道具都留在背包。 -4. 规则 9:用道具不扣 AP——成本已经付过了(捡到它,那个格子就没出战斗奖励);挖格、插旗的价格不受任何影响。 -5. 规则 10:A5 不监听事件、不画界面、不用随机数、不改任何其他系统的数据;全部信息来自三个已经存在的事实来源:棋盘数字真值、奖励身份、行动点账本;其他系统的代码里不会有任何一行"为了 A5"而写的判断(机器验收见 AC-14)。 - -### 使用编排分支(规则 7 的实现参照) - -| 分支 | 条件 | 动作 | 拒绝语义 | -|---|---|---|---| -| validate 失败 | 无效目标/Used 句柄/Cleared 库存 | 全链终止 | 零消耗 + 诊断(D1 反馈可辨) | -| 空间 kind | resolved_target 域内 | apply_overlay 逐 kind 写入 | 域内输入恒受理(validate 前置保证) | -| ap_grant | magnitude ∈ [1,999] | A3.grant_ap(magnitude) → remaining_ap 增 | 域内恒受理(AP 无上限域——A3 漂移条款) | -| consume | validate 已过 | Used 标记 + 回执 | Used 不可逆(重复 → false + 诊断) | - -### 使用目标校验谓词(规则 8 的实现参照) - -| 谓词 | 条件 | 裁定 | -|---|---|---| -| 中心格越板 | area_3x3 目标中心格 ∉ 板 | 拒绝、零消耗 + 诊断 | -| 边缘窗口 | area_3x3 中心格贴边/角(窗口探出板外) | 照常受理——resolved_target = 窗口 ∩ 板内格(角 4 格 / 边 6 格);真视窄域护栏不破(≤3×3 只缩不扩) | -| 板级零信息——显影类 | 全板无未开雾格(含无雾板降级产物) | 不可用:库存投影 usable=false、D1 图标灰、使用入口禁用;强行调用 validate_use → false + 诊断零消耗(EC2 同判据) | -| 板级零信息——预读类 | 全板无未开资格格(board_wide) | 同上 | -| 点击级零信息——预读类 | 所选窗口 ∩ 板内格中零未开资格格(area_3x3) | 该次拒绝、零消耗、D1 反馈可辨(拾取预览高亮将受影响格,辅助避空) | -| 真视恒可用 | 零雷窗口 = "这 9 格没雷"(信息非空) | 无零信息拒绝——仅中心格越板拒绝 | -| 组合行可用性 | 各 kind 判据取 OR(任一 kind 有信息即可用) | 爆破包因 ap_grant 恒可用;全图卷 = 有未开雾格 ∨ 有未开资格格 | - -- 可用性预判数据源 = A2 只读面(板面/已开状态/雾区身份 + reward_eligible 资格标记——读接口白名单同批扩列,缺口预检 1);A5 零事件订阅 → 板级判据随挖掘进展变化,usable 按 query 时点现算(派生信息层零缓存义务)。 - -### 边界情况 - -| 条件 | 行为 | 依据 | -|---|---|---| -| EC1 无效目标(fog_region target 时板内无未开雾区;area target 中心格越板;area 预读窗口内零未开资格格) | validate_use → false + 诊断,全链拒绝——零消耗、库存不变;板级判据另经库存投影 usable=false 前置呈现(图标灰) | 规则 8 · 谓词表 | -| EC2 无雾板(L1 或降级产物)上用显影尘/全图卷 | 同 EC1 拒绝不消耗——道具留存关卡域库存,后续雾板可用(雾 unlock_level=2 的跨关持有合法) | 规则 8 / A4 F1 | -| EC3 显影/真视后 RAP 弃图刷新 | 叠加层随旧板消亡(retire_overlays)、已花道具不返还——信息投资沉没(A3 旧板旗随旧板消亡同款先例);玩家侧含义 = 别在待弃板上花情报 | 状态表 / A3 rap_rules | -| EC4 显影格被开出 | 叠加层条目留存无害——已开格数字恒显示(A2 恒真),呈现自然合并、A5 零清理维护(零事件订阅的结构福利) | 规则 10 | -| EC5 真视雷格被踩(挖开) | 事实照旧——真视 = 信息非保护,雷→伏击照常;玩家侧价值 = 预先规避或插旗兑付 weaken | 规则 2(mine_reveal 语义) | -| EC6 真视格插旗 | 正常 1 AP 插旗、轮末判定标中——weaken 走既有 flag_hit 路径(P2 归因链完整) | A3 flag_rules | -| EC7 预读格的映射 Retired(换图/战斗结束) | 叠加层同批消亡(retire_overlays 与 B4 retire_mapping 同点编排)——预读徽章不会指向已消亡映射 | 状态表 / B4 E6 | -| EC8 Waiting 相位(结算中)使用意图 | 相位 gate 拒绝零消耗——A5 仅 Active;与 B4 结算窗口使用两输入面互不竞争 | 规则 6 | -| EC9 clear_inventory 后 use/validate | false + 诊断(Cleared 逻辑失效态——B4 E7 同款幂等守卫) | 状态表 | -| EC10 同一件道具重复选中 | validate_use 对 Used 句柄 → false + 诊断(Used 不可逆——B4 E9 同款) | 状态表 | -| EC11 组合行(爆破包/全图卷)部分效果失败 | 结构上不可达——validate 前置拦下全部可失败输入,apply_overlay/grant_ap 域内无失败路径;规范序(规则 7)即原子性证明 | 规则 7 | -| EC12 ap_grant 后停手 | 溢出 AP 按停手路径 1:1 转存 RAP(A3 既有规则零特判——道具增量与基础 AP 同待遇);cleared 轮剩余 AP 不折算同款(A3 既有清图规则零特判) | A3 rap_rules | -| EC13 VariationTable.counter_item_ids 悬空引用 | D2 加载期致命(校验随 AuxItemTable 建表激活——A5-1 兑现;条件性夹具 a5_dangling_counter) | 校验类别表 | -| EC14 RewardTable aux 行 effect_id 悬空 | D2 加载期致命(dangling_aux_item 新类别——B4 悬空校验双表扩展) | 校验类别表 | -| EC15 战斗中热重载 AuxItemTable/RewardTable | D2 既有门(战斗中 reload 拒绝);库存实例持行值快照(B4 E14 同款);叠加层为运行时态不涉表重载 | D2 / B4 E14 | -| EC16 aux 行在无雾板被 roll 中 | 正常入库——获取与可用性解耦(池不按雾有无分列,雾档过滤仅作用于雾格身份——B4 F2 域);EC2 承载使用侧 | B4 F2 / EC2 | -| EC17 area_3x3 中心格贴边/角(窗口探出板外) | 照常受理——resolved_target = 窗口 ∩ 板内格(角 4 格 / 边 6 格),道具照常消耗;真视窄域护栏不破(只缩不扩) | 规则 8 · 谓词表 | -| EC18 零信息可用性门(板级判据随挖掘进展翻转) | 板级判据(无未开雾格 / 无未开资格格)→ 库存投影 usable=false、D1 图标灰、使用入口禁用;点击级判据(area 预读窗口空)→ 拒绝零消耗;组合行判据取 OR——爆破包 ap_grant 恒可用、全图卷 = 有雾格 ∨ 有资格格;A5 零事件订阅,usable 按 query 时点现算 | 规则 8 · 谓词表 | - -设计意图:点错了不扣道具——挖掘期玩家可能手滑点错,不该为此受罚。 - -## 数值结论 - -口径总纲:A5 零平衡公式——池权重/tier/magnitude 全部 provisional 归 C3;本节三条 = 供给渗透(F1)、覆盖断言谓词(F2)、信息价值方向预检(F3,方向性非定量)。推导与论证见推演件。 - -### F1 aux 渗透供给(aux_supply_rate) - -**结论**:默认根下 aux 道具期望 ≈1.7 件/板(\|资格格\|=10 口径)、稀有件 ≈0.17 件/板(≈每 6 板一件)——渗透率 ≈16.7%(战斗类 83.3%),供给面有界。 - -``` -E[N_aux/板] = |U| × (Σw_aux / W_total) -E[N_rare/板] = |U| × (w_scroll + w_blast) / W_total -默认根:Σw_aux = 5+5+4+4+1+1 = 20;W_total = 100(B4 原池)+ 20 = 120 -|U| = 10(B4 direction_precheck 保守板口径) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 资格格数 | \|U\| | int | 板级 | install 期资格格集基数(B4 义务⑥供清单;分布缺口待 A1 actuals——B4 预检 11 同款) | -| aux 行权重和 | Σw_aux | int | — | 六行 w 之和(provisional 归 C3) | -| 池总权 | W_total | int | — | safe_cell 池全部活行权重和(aux 行入池后重算——B4 F1 联动重算义务) | - -### F2 维度覆盖谓词(dimension_coverage) - -**结论**:coverage(d) :⇔ ∃活行 aux(d ∈ dimension_tags ∧ RewardTable 行 weight>0)——五维度 coverage 恒真为加载后内容审计断言(AC-12);维度是内容标尺非运行时逻辑(代码零维度分支)。 - -``` -coverage(d) :⇔ ∃r ∈ AuxItemTable : d ∈ r.dimension_tags ∧ reward_row(r.item_id).weight > 0 -断言 ∀d ∈ {info, risk, action, plan, counter} : coverage(d) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 维度 | d | enum | 五值 | dimension_tags 值域 | -| 活行 | r | 表行 | — | AuxItemTable 行 ∧ 对应 RewardTable 行 weight>0 | - -### F3 信息价值方向预检(info_value_direction——方向性非定量) - -**结论**:显影的价值 = 残余盲猜端收缩——可推理格增加 → 玩家盲赌次数(暴露)下降 → 期望踩雷下降(P1 正向);引用式 P(雷) = \|M\| ÷ (\|M\| + (1−ι)×\|S\|) 对 ι 递增——收益在"少赌",不在"单赌更安全"。真视把 k 格从决策域移除(必避/必旗候选)。两者均为正向信息增量、定量当量换算归 B1 条款①对照表扩列(义务 B1×④注记,MVP 不入对照表)。 - -``` -显影:fog_reveal k 格 → 板级 ι(免赌开据占比)上移 - → 残余盲猜安全格 n_s = (1−ι)×|S| 收缩 → 盲赌次数下降 → 期望踩雷 ↓ - 单次盲赌条件概率 P(雷) = |M| ÷ (|M| + n_s) 随 n_s 收缩而上行 - (与 B1 F4 同式,B1 F4 另设 n_s < 1 适用域守卫) -真视:mine_reveal k 格 → 该 k 格移出"盲挖候选域" - 期望收益 = P(雷|盲) × (伏击暴露期望 − 标中 weaken 收益期望) 的差值锁定 - 精确当量归 B1 对照表(MVP 不闭合——间接效应如实登记) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 可推理率 | ι | float | [0,1] | A1 板级实际值(actuals p10 为对账口径——registry 既有) | -| 雷数/安全格数 | \|M\|/\|S\| | int | 板级 | A2 板面事实 | -| 真视格数 | k | int | ≤9 | area_3x3 护栏上界 | -| 残余盲猜安全格 | n_s | float | [0, \|S\|] | (1−ι)×\|S\|——B1 F4 同名变量(n_s < 1 适用域守卫同款) | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard | AuxItemTable 新表 schema 承载与 ConfigDB 读取(本 GDD 回填 owner——走 D2 接口漂移规则回写 D2 表清单);校验类别族见道具定义节 | -| 上游 | A2 | hard | 只读面消费(板面/已开状态/雾区身份——目标校验与显影数据源);A2 侧零改动零义务(零特判延伸——A2 代码零 A5 分支) | -| 上游 | B4 | hard(修订批) | aux_item category 激活(预留枚举兑现)+ effect_id 双表校验 + use_timing 扩值 + 默认根六行 + 池总权重算——义务清单 B4×①…⑤ 缺项即 blocking | -| 上游 | A3 | soft(接口漂移预授权) | grant_ap(n) 新入口(第 9 API):Active 相位受理、remaining_ap += n(无上限域)、其他相位拒绝、零随机——A3 GDD 修订批登记(义务 A3×①) | -| 上游 | A4 | 内容契约 | counter_item_ids 消费与回填(fog 行 = [probe_dust]);未来变异建行时各配 ≥1 反制道具(框架级"每变异 ≥1 反制");A4 OQ2 由本 GDD 收口(时效 = 本图持续、定价 = 池权重) | -| 上游 | B1 | hard(编排) | use_aux 编排 + 生命周期编排 + 授予路由——义务清单 B1×①②③ 缺项即 blocking(B1 是全部战斗域状态变更的唯一编排方) | -| 下游 | D1 | soft | 呈现义务 4 项(缺项即 blocking,见义务清单)——aux 库存条/使用交互/叠加层三集呈现/清空反馈;叠加层数据源 = query_overlays 只读投影 | -| 下游 | D5 | soft | 教学候选:"买情报"闭环(捡到道具→需要时用→情报换安全)+ 真视≠保护的措辞口径 | -| 下游 | art-bible | soft | §4.6 图标键扩容:item_id 六键 + 叠加层标记三族(显影/真视/预读徽章——预读徽章与 B4 已开格徽章同族) | -| 下游 | B5/D4 | soft | 道具使用反馈(后置里程碑);D4 音频挂点(Alpha——使用音/无效反馈音) | -| 下游 | registry | 确认 | a5_aux_items 条目登记(本 GDD 定稿回填)+ variation_table.mvp_content counter_item_ids 注记更新 | - -### 跨 GDD 义务清单(对侧 GDD 修订批逐项核对落位,缺项即 blocking) - -> 义务编号以本 GDD 为源;跨 GDD 台账登记时采用「A5→对侧×①」前缀形式(B4→B1×①…⑥、B1 义务账本 B4×①…⑥ 为既有同形编号——前缀防混淆)。 - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| B1×① | use_aux 编排入口(唯一调用权):Active 相位 gate(A3 phase getter)→ 规范序 validate→逐 kind 应用→consume;拒绝路径零消耗反馈 | B1 修订批 | 已登记 | -| B1×② | 生命周期编排:board retire(cleared 换图/RAP 刷新/战斗结束)→ A5.retire_overlays 与 B4 retire_mapping 同点;关卡末 → A5.clear_inventory 与 B4 clear_inventory 同点 + 清空反馈计数 | B1 修订批 | 已登记 | -| B1×③ | 授予路由:grant 返回 category=aux_item → A5.add_item(与 B4 stock 分流对偶——每格受理恰一次承接延伸) | B1 修订批 | 已登记 | -| B1×④ | 注记级:aux 信息价值不入条款①对照表(间接效应)——对照表扩列义务登记调参期(F3) | B1 修订批 | 已登记(注记) | -| B4×① | category 枚举扩值 aux_item(五值→六值——Rule 1 修订);交付轴归类 = A5 可选类(不入 B4 库存、经 B1 路由) | B4 修订批 | 已登记 | -| B4×② | effect_id 消费扩展:aux_item 行必填(AuxItemTable 精确引用)+ 悬空校验双表 + 条件性夹具 dangling_aux_item | B4 修订批 | 已登记 | -| B4×③ | use_timing 枚举扩值 {pre_settlement, during_dig}——aux 行 = during_dig(game-concept"使用时机"字段语义延伸) | B4 修订批 | 已登记 | -| B4×④ | 默认根行集 +6 aux 行(本 GDD MVP 行集表值回填;F1 池总权重算 + direction_precheck 联动重算;并按 B4 缺口预检 6 流程重制登记常数与受影响 AC——σ 黄金轨迹 Ψ/Φ、AC-18 category 值域内容断言等随批重推导,防静默假失败) | B4 修订批 | 已登记 | -| B4×⑤ | OQ2 收口注记:未开格身份呈现深度 = 道具驱动预读(A5 plan 维度)——未预读格仍不呈现、自动寻路不做(A5 侧裁决,D1 共担呈现) | B4 OQ2 | 已登记 | -| A3×① | grant_ap 接口漂移(第 9 API):`grant_ap(n) -> bool`——Active 相位受理、remaining_ap += n、无上限域、其他相位拒绝;8 API→9 API 封闭枚举扩容 | A3 修订批 | 已登记 | -| A4×① | VariationTable.fog.counter_item_ids = [probe_dust] 回填(D2 表值 + registry mvp_content 同批——A4 GDD 正文不改,A4 EC6/OQ2 收口) | D2/A4 修订批 | 已登记 | -| A4×② | counter_item_ids 悬空引用校验激活 + 条件性夹具 a5_dangling_counter(A4 测试口径"首个道具 id 回填时补校验"条款兑现——A5-1 义务闭环) | D2/A4 修订批 | 已登记 | -| A4×③ | 框架内容契约:未来变异建行时 counter_item_ids 各配 ≥1 反制道具("每变异 ≥1 反制"——岩浆/冰冻行随垂直切片批) | A4 后续批 | 已登记 | -| D1×① | aux 库存常读条(挖掘期规划面——与 B4 库存条并置或分区呈现归 D1 裁决;枚举序 = add_item 受理序) | D1 修订批 | 已登记 | -| D1×② | 使用交互:选中道具 + 目标拾取(雾格/中心格)或无目标确认;可用性门呈现(板级零信息 → 图标灰、入口禁用——usable 投影数据源,B4 usable_now 先例)+ 拾取预览(area_3x3 悬停高亮将受影响格);无效/零信息目标可辨反馈(零消耗语境);相位 gate 呈现 | D1 修订批 | 已登记 | -| D1×③ | 叠加层三集呈现:显影格数字(数据源 = A2 板面 + digit_reveal 集)/ 真视标记(形状+色相双通道)/ 预读徽章(数据源 = B1 query_reward_identity 既有读面——与已开格徽章同族) | D1 修订批 | 已登记 | -| D1×④ | 关卡末清空反馈:"剩余辅助道具 ×N 随关卡结束清空"(B4 义务⑤同款先例) | D1 修订批 | 已登记 | -| D2×① | AuxItemTable 新表登记(表清单 + schema 校验族——D2 GDD 接口漂移修订批) | D2 修订批 | 已登记 | -| D2×② | VariationTable/RewardTable 表值回填(counter_item_ids / 六行 aux)+ 两处悬空校验激活 | D2 修订批 | 已登记 | -| D5×① | 教学候选登记:"买情报"闭环 + 真视≠保护口径(非 blocking——D5 里程碑 Alpha) | D5 | 已登记(候选) | -| art-bible×① | §4.6 图标键扩容:item_id 六键 + 叠加层标记三族(键冻结流程同既有——终稿美术归样张批) | art-bible 后续批 | 已登记 | - -### 呈现数据面(A5 供给、D1 消费——呈现归 D1) - -| # | 数据面义务 | 归属 | -|---|---|---| -| 1 | 叠加层三集只读投影 query_overlays(digit_reveal/mine_reveal/reward_preview 三格集)——D1 呈现唯一数据源;数字/徽章本体读既有面(A2 板面、B1 query_reward_identity),A5 零数据复制 | D1 消费 | -| 2 | 库存投影 query_inventory(逐件 {item_id, source{cell, round}, 快照, 状态, usable};枚举序 = 受理序)——来源归因呈现保 P2;usable = 板级零信息判据预判(可用性门数据面) | D1 消费 | -| 3 | 使用回执 consume 返回快照投影——使用瞬间确认反馈数据源;无效目标拒绝附诊断类别(可辨反馈) | D1 消费 | -| 4 | 负空间:A5 效果零结算明细行(挖掘期即时可见性承载归因——与 B4 道具行协议区分);无 HUD 常显字段(库存条外);真视不自动标旗、显影不自动挖(玩家动作仍走既有输入面) | B1/D1 | -| 5 | icon 键契约:item_id 直作图标键(一键一专属纹样、全局恒定禁运行时换图——art-bible §4.6 惯例);叠加层标记三族视觉语言归 art-bible 样张批 | art-bible / D1 | -| 6 | 音频挂钩(D4,Alpha):使用确认音/无效反馈音/显影扩散音(可选);挂点事件 = consume 回执,A5 零音频依赖 | D4 | - -> 📌 **UX Flag — A5 扫雷辅助道具**:本系统有 UI 贡献(库存条/使用交互/叠加层呈现)。Phase 4 前置 `/ux-design` 产出使用交互 spec(design/ux/aux-items.md),stories 引用 ux spec 而非本 GDD。 -> 📌 **Asset Spec**:视觉需求已定义(icon 六键 + 标记三族)。art-bible 样张批后运行 `/asset-spec system:a5-minesweeper-aux-items` 产出逐资产规格与生成提示词。 - -## P0 最小闭环 - -1. B4 roll_board 在 install 期预分配格奖励身份(含 aux 行)。 -2. 挖掘期开出资格格 → B1 授予段 grant 返回 category=aux_item → 路由 A5.add_item 入关卡域库存。 -3. 玩家在 Active 相位选中道具与目标发起使用。 -4. B1 编排:相位 gate → validate_use 目标校验(读 A2 只读面)。 -5. 逐 kind 应用效果(叠加层写入 / A3.grant_ap)。 -6. consume 标记 Used、回执快照投影 + 来源。 -7. D1 重查 query_inventory / query_overlays 刷新呈现——玩家看见情报并继续挖掘决策。 -8. 换图或关卡末 B1 编排 retire_overlays / clear_inventory——状态回收,循环在下一张图重启。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | B5/D4 道具使用反馈(动效/音频挂点) | 后置里程碑——D4 音频 Alpha | -| P1 | D5 教学"买情报"闭环 + 真视≠保护口径 | D5 里程碑 Alpha,非 blocking(义务 D5×① 候选) | -| P1 | aux 信息价值入 B1 条款①对照表 | 间接效应定量当量——调参期扩列(义务 B1×④ 注记,MVP 不入) | -| P2 | 岩浆/冰冻变异反制道具行 | 随变异建行批(义务 A4×③ 框架契约) | -| P2 | 自动寻路终态裁决(预读道具是否 MVP 终态) | 随 playtest——OQ6 | - -## 调参表 - -| 字段 | 域 | 默认 | owner | 调过高 | 调过低 | -|---|---|---|---|---|---| -| RewardTable.weight(六行,B4 侧 knob) | int >0 | 5/5/4/4/1/1(provisional 归 C3) | C3 | 渗透率↑ → 道具依赖症(预警①)、战斗奖励稀释 | 窗口长空转、五维度覆盖可能破缺(F2 断言拦截) | -| RewardTable.tier(六行) | tier 枚举 | 常规 t2 / 稀有 t3(provisional 归 C3) | C3 | 稀有件入雾池门槛失真(T_fog_min 联动) | 稀有件与常规档不可辨 | -| AuxItemTable.magnitude(ap_grant 行) | int [1,999](ap_grant 行加载校验 ≥1) | 工兵令 2 / 爆破包 4(provisional 归 C3) | C3 | +AP 过量 → 停手转存 RAP 泄漏(EC12)、清图节奏失真 | 行动维度名存实亡 | -| target(结构冻结非 knob) | enum 四值 | 见 MVP 行集 | 本 GDD 修订流程 | 修改 = 改规则(真视窄域护栏),走本 GDD 修订流程 | —— | -| use_phase(结构冻结) | enum {active_dig} 单值 | active_dig | 本 GDD 修订流程 | 扩枚举 = 修订(非调参) | —— | - -- knob 交互:aux 权重 × B4 战斗池权重(W_total 重算联动——B4×④;禁止两侧独立调参不看渗透率);magnitude × A3 ap_per_round(+4 = 半轮预算的锚定关系——ap_per_round 调参时联动复核);稀有 tier × T_fog_min(雾池准入联动)。 -- 非 knob(结构冻结):四值效果枚举与时效派生 · 真视窄域护栏(target 交集校验)· 无效目标不消耗 · 零 AP 使用成本 · 库存关卡域 · Used 不可逆 · 零随机。 -- 调参所有权:全部内容值 provisional 归 C3;锚验收权 = B4/B1(当量对账调参期扩列——B1×④)。 - -### 失衡预警(playtest 预注册,归 C3) - -| 编号 | 指标 | 阈值/读法 | -|---|---|---| -| ① | 道具依赖度:每轮使用率(用了道具的轮次 ÷ 总轮次) | >50% 即警——P1 观测面(扫雷决策外包给道具) | -| ② | plan 预读覆盖率:预读格 ÷ 开格前决策数 | 过低 = 道具浪费;过高 = 预读替代推理(与①联读) | -| ③ | AP 道具节奏:+AP 与停手率/RAP 转存量联动(A3 OQ3 阈值联读) | 转存率异常上行即警——+AP 沦为 RAP 农场 | -| ④ | 稀有感知:全图卷/爆破包单关出现件数分布 | 恒 0 = 稀有定位失效;恒 ≥2 = 渗透过高(F1 联动重跑) | - -## 验收标准 - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree、autoload 显式实例化)——A5 是 Core 层状态容器 + 定义表,零场景依附;容器/schema 经 class_name 直引实例化(B3/B4 先例,AC 扫描豁免同款) | -| 被测面 | B1 编排未接线(垂直切片实现期)——冒烟以构造序扮演编排方(B4 先例);A2 只读面以桩投影构造(真集成 deferral 登记缺口预检 1);A3.grant_ap 桩断言调用序(真 A3 deferral 同批) | -| 零随机口径 | A5 全 API 零 RNG——行为级硬证据 = 同输入序列重放逐位相同(AC-9) | -| 期望值推导纪律 | 六行 weight/magnitude/tier 全 provisional(调参表)——THEN 按表读值推导不写死;结构定值断言合法:维度五值封闭、效果四值封闭、target 四值封闭、use_phase 单值、护栏谓词(mine_reveal 支持域) | -| 跨表断言生效前提 | AC-12(六行回填)与 AC-13(悬空校验激活)以义务 B4×①…⑤/D2×①② 兑现为前提——生效前登记 deferral(对侧义务登记即生效条件,A4 测试口径先例) | -| 诊断卫生 | 每用例先 reset_diagnostics()(D2 冒烟协议) | - -### API 面(provisional,封闭枚举——实现期 ADR 定名) - -| 接口 | 签名 | 语义与守卫 | -|---|---|---| -| add_item | `add_item(item_id, source) -> bool` | B1 授予路由调用;Cleared/未知 item_id → false + 诊断;逐件实例入关卡域库存 | -| query_inventory | `query_inventory() -> Array` | 逐件实例枚举(item_id/source/快照/状态/usable),枚举序 = 受理序;Used 保留只读;usable = 板级零信息判据现算投影 | -| validate_use | `validate_use(handle, target_cell?) -> Dictionary\|false` | 效果投影 {effect_kinds, magnitude, resolved_target};目标校验按使用目标校验谓词表(越板/点击级零信息 → false + 诊断零消耗;边缘窗口 → resolved_target = 窗口 ∩ 板内格);Used/Cleared/板级零信息 → false + 诊断;只读不消耗 | -| apply_overlay | `apply_overlay(kind, resolved_target, magnitude) -> bool` | 叠加层写入(单 kind 单次,B1 逐 kind 调用);域内输入恒受理 | -| consume | `consume(handle) -> Dictionary\|false` | Used 不可逆;回执 = {item_id, source, 快照投影};Used/Cleared → false + 诊断 | -| query_overlays | `query_overlays() -> Dictionary` | D1 只读投影 {digit_reveal, mine_reveal, reward_preview} 三格集;纯读零副作用 | -| retire_overlays | `retire_overlays() -> bool` | 板级叠加层清空(B1 编排——与 B4 retire_mapping 同点) | -| clear_inventory | `clear_inventory() -> bool` | 关卡末全清;重复 → false + 诊断(幂等守卫) | - -- 封闭枚举即负空间验收形态:无自动使用入口(真视不自动标旗、显影不自动挖)· 无重掷/升级 API · 无事件订阅 · 无 RNG 直连 · 无 A2/B4 状态写入口(apply_overlay 只写 A5 自持叠加层);新增任何入口 = 接口漂移(本 GDD 修订非调参)。 - -### 夹具与致命 manifest - -| 夹具根 | 内容 | 服务 | -|---|---|---| -| 默认根 | AuxItemTable 六行 + D2 全表(B4 修订批落地后)——结构断言与 F1/F2 验算 | AC-1/AC-11/AC-12 | -| a5_dup_key | 重复 item_id | 致命 | -| a5_dim_oob | dimension_tags 含 "luck"(枚举外) | 致命 | -| a5_target_violation | mine_reveal 行 target=board_wide(真视窄域护栏违例——承重校验的测试落点) | 致命 | -| a5_phase_oob | use_phase="settlement"(枚举外) | 致命 | -| a5_dangling_counter | VariationTable.fog.counter_item_ids=["ghost_item"](AuxItemTable 无此行) | 致命(A4×② 兑现载体) | -| b4_dangling_aux | RewardTable aux 行 effect_id="ghost_item" | 致命(B4×② 兑现载体) | - -| manifest 行 | 触发条件 | 断言 | -|---|---|---| -| a5_dup / a5_dim / a5_target / a5_phase / a5_dcounter / b4_daux | 各致命根独立进程游戏通道加载 | 非 0 退出且错误清单含对应类别 | - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | 干净检出(默认根) | 冒烟加载 AuxItemTable | 加载成功、恰含六行(probe_dust/sapper_order/loot_compass/nest_pendulum/catacomb_scroll/blast_kit——内容事实断言);非 knob 字段(dimension_tags/effect_kinds/target/use_phase)与 MVP 行集逐一相符 | 规则 1/2 · 枚举节 | -| AC-2 | schema 类直引实例 | validate() 作用于越域代表值:dimension_tags 含枚举外值、effect_kinds 含重复、mine_reveal 行 target=board_wide、ap_grant 行 magnitude=0、use_phase 越域;域内代表值全组 | 越域各含对应域错误类别(零静默);域内零诊断——特别地 blast_kit(ap_grant+mine_reveal→area_3x3)与 catacomb_scroll(fog_reveal+reward_preview→board_wide)组合行合法通过 | 校验类别表 · 规则 3 | -| AC-3 | 全新容器 | add_item ×N(N=64)→ query_inventory | 恰 64 件、每件 {item_id, source{cell, round}, 快照}、全 InStock 零拒绝(数量无上限);枚举序 = 受理序 | 规则 5 | -| AC-4 | 库存含 probe_dust、桩面含雾区 R(2 未开雾格) | validate_use(handle, R 内雾格) | true + 投影 {effect_kinds=[fog_reveal], resolved_target=R}(只读——库存/叠加层零变化) | 规则 7② | -| AC-5 | 同 AC-4、库存计数 c | validate_use(handle, 已开非雾格) | false + 诊断(EC1);随后库存计数仍 = c(零消耗——照常消耗拍板不适用于 A5 的行为面) | 规则 8 · EC1 | -| AC-6 | 同 AC-4 | 编排序扮演:validate → apply_overlay(fog_reveal, R) → consume | apply 后 query_overlays.digit_reveal ⊇ R 两格;consume true + 回执含 source;实例 → Used | 规则 7 · EC4 | -| AC-7 | Used 句柄 | 再次 validate_use / consume | 均 false + 诊断(Used 不可逆) | EC10 | -| AC-8 | 库存含 sapper_order(magnitude=2)、A3 桩接线 | 编排序扮演 ap_grant 分支:validate → grant_ap 桩 → consume | 桩收 grant_ap(2) 恰一次且在 consume 前(序断言);consume true | 规则 7③ · B1×① | -| AC-9 | 固定输入序列(add_item ×3 → validate ×2 → 编排使用 ×2 → query 全读面) | 同序列重放两遍(全新容器) | 两遍的库存投影/叠加层投影/回执逐位相同(零随机的行为级硬证据——A5 全 API 无 RNG) | 规则 10 | -| AC-10 | 叠加层 Active(含条目) | retire_overlays → query_overlays | 返回三集全空;再次 retire → false + 诊断(幂等;重注入后可复用——板级生命周期) | 状态表 · EC3/EC7 | -| AC-11 | clear_inventory 后 | validate_use / consume / add_item / query_inventory | 均 false 或空 + 诊断(Cleared 逻辑失效态——B4 E7 同款) | EC9 | -| AC-12 | 默认根(生效前提 = B4×④/D2×② 兑现) | 读 RewardTable 六 aux 行 + F2 覆盖推导 | 六行存在且 weight>0、effect_id 精确指向 AuxItemTable 行;F1 渗透率 ≈1.7 件/板按表读值复算成立;五维度 coverage 全真(维度覆盖断言——"每维度都有对应道具"的机器可查形态) | F1/F2 · B4×④ | -| AC-13 | a5_dangling_counter / b4_daux 夹具根 | 独立进程游戏通道加载 | 各非 0 退出且错误清单含对应类别(悬空校验激活——A5-1/B4×② 兑现载体);对照腿:默认根干净通过 | EC13/EC14 · A4×② | -| AC-14 | A5 文件集(schema/容器/冒烟脚本) | 按 D2 AC-9 模式静态扫描 | randomize()/RandomNumberGenerator 零命中(零随机);extends Control / .tscn preload 零命中(Core 层零 UI 债);A2/A3/B4 写入类 API 符号零引用(只读面除外——A2 current_board/reveal_record 读接口白名单登记;B1 编排反向亦然) | 规则 10 | -| AC-15 | 库存含 nest_pendulum、桩面 3×3 窗(含 1 雷格)+ 板角中心格腿 + 零雷窗口腿 | 编排序扮演:validate → apply_overlay(mine_reveal, resolved_target) → consume | 常规腿:query_overlays.mine_reveal ⊇ 9 格(含雷格)、consume true;边缘腿:中心格 = 板角 → resolved_target = 4 格(窗口 ∩ 板内格)恒受理;零雷腿:恒受理(零雷 = 信息) | 规则 2/8 · EC17 · 谓词表 | -| AC-16 | 库存含 loot_compass(area_3x3)与 catacomb_scroll(board_wide)、桩面含未开资格格窗 R 与全开窗 E | 编排序两腿:validate → apply_overlay(reward_preview, resolved_target) → consume;零信息腿:validate_use(loot_compass, E 内格);板级腿:桩面全开 → query_inventory usable 投影 | 预读腿:query_overlays.reward_preview ⊇ R 中未开资格格、consume true;全图卷腿:digit_reveal ⊇ 全板未开雾格 ∧ reward_preview ⊇ 全板未开资格格;零信息腿:false + 诊断、库存计数不变(点击级零消耗);板级腿:usable=false(图标灰数据面)+ validate_use false | 规则 8 · EC1/EC18 · 谓词表 | - -### 缺口预检 - -| 编号 | 缺口与处置 | owner | 时机 | -|---|---|---|---| -| 1 | A2 真集成 deferral:目标校验/显影数据源以桩投影构造——真 A2 接线后 AC-4/AC-6/AC-15/AC-16 换真面重跑;雾区身份解析(fog_region target → 所属雾区)与零信息判据(已开态 + reward_eligible 资格标记——可用性门数据源)依赖 A2 板面变异快照读取(A4 生成期快照既有;A2 读接口白名单同批扩列) | A2 集成批 | 垂直切片实现期 | -| 2 | B1 编排 deferral:相位 gate/规范序/生命周期编排以构造序扮演——B1×①②③ 登记为生效条件(缺项即 blocking) | B1 修订批 | B1 GDD 修订 | -| 3 | B4/D2 修订批 deferral:六行回填 + 双悬空校验激活——AC-12/AC-13 生效前提 | B4/D2 修订批 | 义务清单兑现时 | -| 4 | A3 grant_ap 修订批:AC-8 桩换真面 + EC12 转存补腿(A3 侧 AC 扩一条) | A3 修订批 | A3 GDD 修订 | -| 5 | 扫描域成员清单:A5 GDScript 产物入 D2 AC-9 项目级 CI 扫描域(B3/B4 先例) | Technical Setup | 实现期 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1.0-lean | 2026-09-14 | 初稿定稿(solo 模式一次会话——专员/总监代理全部跳过,出稿待人工复核):五维度框架 + 真视窄域护栏 + MVP 六行(四常规单维 + 两稀有多维)+ AuxItemTable schema(D2 回填 owner)+ 获取路由(B4 aux_item 激活)+ 使用编排契约(B1 义务 ×4)+ 板级叠加层(零特判延伸)+ A3 grant_ap 接口漂移预授权 + 跨 GDD 义务清单 21 项 + F1–F3 + 14 AC;A4 EC6/OQ2 与 B4 OQ2 收口 | -| v1.1-lean | 2026-09-14 | 首轮 /design-review(solo 快速审核)3 blocking + 5 recommended 同日核销——用户拍板两项边缘规则:① area_3x3 边缘窗口照常受理、resolved_target = 窗口 ∩ 板内格;② 零信息目标不可用不消耗(板级判据图标灰/入口禁用、点击级拒绝,组合行判据取 OR,真视零雷恒有效)。F3 方向自相矛盾改写(P(雷) 对 ι 递增——收益在盲赌暴露下降非单赌命中率)· 使用目标校验谓词表新增(Core Rule 8 展开)· EC17/EC18 新增 · AC-15/AC-16 补齐(真视/预读运行时路径)· B4×④ 扩登记常数重制 · 义务编号源前缀注记 · aux 行 pool_tag 注记 · 应用顺序钉死(空间先、ap_grant 后)· query_inventory 投影增 usable 字段 · D1×② 可用性门呈现扩列;正文 Core Rules 表同批口语化重写(语义零变更);同日用户拍板免独立 re-review 直接放行【B2/B1/D1 先例】 | -| v2 | 2026-09-14 | 两件套迁移(格式迁移,语义零变更):按模板 v2 重写为 design 件(只装结论——设计目的/系统范围/核心循环/领域章节×5/依赖与输出/P0/P1·P2/调参表/验收标准),公式推导、数值锚定论证、候选取舍、体验锚点论证、已裁决争议、覆盖矩阵与全部 OQ 迁往 `design/gdd/analysis/a5-minesweeper-aux-items.md`;规则改编号人话句,AC/EC/F/义务/OQ 编号全部保留 | diff --git a/design/archive/gdd-2026-09-14/analysis/a1-board-generation.md b/design/archive/gdd-2026-09-14/analysis/a1-board-generation.md deleted file mode 100644 index 8c120bbe..00000000 --- a/design/archive/gdd-2026-09-14/analysis/a1-board-generation.md +++ /dev/null @@ -1,310 +0,0 @@ -# A1 扫雷棋盘生成 设计推演 - -> 状态:concluded(除文末开放问题) · 本文只装"为什么"——`design/gdd/a1-board-generation.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 来源:本文吸收原 lean 版(v1.1-lean)全部推导、论证、裁决记录与验收设施详表;公式结论与表达式在 design 件,推导与论证在此。 - -## 问题:可推理率该怎么度量(F1 的口径是怎么钉死的)? - -### 广度分析 - -- 候选 A:字面窄读"确定性推导格数"(仅数字推导入分子)——收益是口径最严;代价是任意好图都远低于常规门槛,度量与立法本意脱节,被裁掉。 -- 候选 B:免赌确定揭示格数(初始展开 ∪ 连锁揭示 ∪ 推导开据三通道全计入分子,初始展开格同时计入分母)——与 P1 承诺语句"从初始安全区出发,逻辑可推导的挖掘占比不低于门槛"对齐,定为现行口径。 -- 候选 C:单判据 inferability——被"雾区无雷"常识单独撑线的度量空心风险否掉;裁定加第二判据 inferability_core(分子分母都剔除雾格),与 F2 雾占比绝对上限 0.25 合围该风险。 - -### 深度分析 - -雾格入分子有两条通道:链可达雾格经算子①(0 格级联)入分子;与 R∞ 邻接的链不可达雾格经信息源(b)雾元知识入分子;恒无 R 邻格的雾格计入终局残余。雾格挖掘是零雷险行为(玩家可见知识),故计入"免赌"口径;其 AP 全价代价不在此度量、由 F3 单独承载——这是"风险轴与成本轴必须分开"的直接理由:雾板可推理率高而预算负担仍在,恰为两轴不可互相折算的例证。雾格入分子通道与挖掘相邻性(A3 限 8 向相邻)口径对齐,公式本身不变。 - -求解器初始可见态取 0 格 flood 闭包内芯而非保守可达域全体——"外扩 1 格"环非自动展开的必然产物,计入会高估玩家信息。由此派生度量保真对偶义务:既有"A2 实际展开域 ⊆ A1 排除域"之外,新增"A1 求解器初始态 ⊆ A2 实际初始展开域"(登记 A2 GDD);若 A2 定稿展开更小,A1 回退口径 = 出生 3×3 最小态。 - -次序无关性是度量不变式:两算子对 R 单调 ⇒ 最小不动点唯一、与开据次序无关——实现可任意定序而度量不变,兼防一类实现方差 bug;最小不动点可经单调 worklist 传播实现,不强制全板重扫描。每图指标输出携带 metric_version(当前 1)防推理器实现漂移静默改定义(联动 F4 基线);未来改 R∞/信息源域则 version=2 + 向量重制,仅增判据与指标集不动 R∞ 定义时 version 不跳变。 - -clearable 与 inferability 分两闸的理由:inferability 门槛不蕴含可清图——终局对赌残余(拉低可推理率)与矿壳包围的不可达安全格(使 cleared 永不可达)是正交缺陷(1 个不可达格在 126 安全格的板上仅拉低 0.008、0.95 门槛照过,而该板功能性残废);故清图可达性是合法性谓词(违规 = 该次尝试判废重试,非"接受最优"候选),与质量度量分属两闸(验收算子见 F5)。 - -### 综合判断 - -现行口径 = 免赌占比双判据 + 合法性闸分立 + 信息源穷尽枚举冻结 + metric_version 防漂移。改 R∞ 定义、信息源域或规则域 = GDD 修订,非调参。 - -### F1 完整验算例(design 件只留摘要) - -12×12 图(144 格),mine_density=0.15 → N = round(0.15×135) = 20(设环内移除 0,\|M\|=20)、S=124;雾 2 区共 9 格。R₀=21,全图 0 级联闭包 58(含 5 个链可达雾格);数字推导开据 51 + 雾元知识开据 4(链不可达雾格)+ 推导触发级联 8 = 63 → R∞=121;残余 3 格 = 一处终局非确定对 + 1 孤立残余格。inferability = 121/124 ≈ 0.976 ≥ target 0.95;inferability_core = (121−9)/(124−9) = 112/115 ≈ 0.974 ≥ 0.95 → 两项判据达标,attempts_used=1。 - -## 问题:参数域与可行性谓词怎么定(F2/F2b/F2c 的边界从哪来)? - -### 广度分析 - -- 雾占比上界候选:纯 f≤8d 推导界(必要上界,边计数)——不足:堵不住"极雾行以雾元知识撑满可推理率"的度量空心;故叠加 0.25 绝对上限(MVP 量级护栏,非推导界)。 -- 成本闸候选:运行期墙钟时间逃生——被否:耗时依赖输出即破同种子同图(文本级契约),确定性死线必须加载期可判定,故取 attempts×W×H ≤ C 的静态谓词形式,C = 16384 为 provisional 量级护栏,正式值归 OQ2 ADR。 -- 联合校验候选:给 inferability_target × 雾/密度参数加第三条静态跨字段校验——被裁决拒绝(见下裁决表)。 - -### 深度分析 - -必要上界推导(边计数):每雾格 ≥1 条到非雾雷的邻接边 ⇒ 邻接边数 ≥ \|F\|;每雷 ≤ 8 邻 ⇒ \|F\| ≤ 8\|M\| ⇒ f ≤ 8d。必要 ≠ 充分:连通性缺口(雷膨胀皮肤碎裂,A4 EC2)不由本式判定,由静默降级 + F4 兜底。极端行为:d=0.5 时 8d=4,f<1 成为绑定约束;d→0 时几乎任何正 f 均被拒(小雾量在稀雷图结构性不可布,属正确拒绝);f > 0.25 恒拒(与 d 无关);attempts×W×H > 16384 恒拒。 - -F2b sound 性论证:N = round(d×(W×H−9)) 先定数、先布后删只减不增 ⇒ \|M\| ≤ N ⇒ \|S\| = W×H − \|M\| ≥ W×H − round(d×(W×H−9))——round 取整钉死后恒成立(其他取整为非法实现);计数可行 ≠ 连通可行——clearable 生成期闸不可互替。F2b 为 Schema 校验行 delta:min_safe_count 原仅产物侧不变式(Rule 8),参数侧联合不可行域(小图×高密×高下限)经 F2b 于加载期拦截。 - -布雷数下限 round(d×(W×H−9)) ≥ 1 的动机:零雷板 = 初始展开即 cleared 的 A3 EC5 钓鱼活体 + 标中旗经济恒空 + F4 全断言隐形穿越。 - -与 Schema 校验的关系:F2 是 Tuning Knobs 跨字段谓词的规范化合取形,二者等价——Schema 校验行采本规范形消除分歧;(count=0, f>0) 角点已入 AC-2 违例集。 - -### 综合判断 - -三谓词加载期可判定、违规即致命;0.25 / 16384 / 布雷数下限与 F4 严格零阈值同属结构冻结(调整走 GDD 修订非调参)。 - -### 联合可行域裁决(不加第三条跨字段校验——裁决记录) - -| # | 裁决要点 | -|---|---| -| 1 | 无可判定静态界——inferability 由 0 格拓扑、雾形、出生位置主导,聚合参数不决定它,任何 sound 加载期联合谓词要么空洞要么误杀 | -| 2 | 架构既定——暴露机制就是"运行期接受最优不死锁 + 强告警埋点 + 调参期批量断言",第三闸重复且更弱 | -| 3 | 补偿保证(与 F4 绑定生效)——F4 红线 + 降级率埋点使联合不可行域在首次批量生成时必然现形 | -| 4 | 裁决边界——拒绝的是 inferability 可行性静态联合谓词(无可判定静态界);雾占比绝对上限 0.25(度量语义护栏)与 F2c 成本谓词(确定性成本死线)均有可判定形式且不声称预测 inferability,不在该裁决覆盖内 | -| 5 | 回写义务(advisory 非校验)——target、fog_target_ratio、mine_density 同向调高时降级率结构性上行,属参数域边界而非实现缺陷 | - -### F2/F2b/F2c 验算表 - -| 输入 | 判定 | 依据 | -|---|---|---| -| (d=0.15, f*=0.12, count=2) | ✓ 放行 | 域内 | -| (d=0.06, f*=0.50) | ✗ 致命 | 0.50 > 8d = 0.48 | -| (count=3, f*=0) | ✗ 致命 | 一致性腿(count ≥ 1 ⇒ f > 0) | -| (count=0, f*=0) | ✓ | level 1 无雾行标准形 | -| (count=0, f*=0.05) | ✗ 致命 | count=0 ⇒ f=0 腿(角点) | -| (d=0.15, f*=0.85, count=32) | ✗ 致命 | 0.85 > 0.25 雾占比绝对上限——极雾行加载期判死 | -| F2b:10×10、d=0.10、min_safe=50 | ✓ | 100 − round(0.10×91) = 91 ≥ 50 | -| F2c:10×10×16 = 1600;12×12×16 = 2304 | ✓ | ≤ 16384 | -| F2c:64×64×32 = 131072 | ✗ 致命 | 该组合换图相位同步卡顿秒级至百秒级 | - -## 问题:雾的成本怎么记(F3 的口径为什么是这样)? - -### 广度分析 - -- 分母候选 A:雾内部分母 \|U\|/\|F\|——被裁:不单列输出,可由指标集(实际雾占比 + Chain₀/U 重算)按需还原,不作对账输入。 -- 分母候选 B:付费格分母 \|U\| ÷ max(1, \|S ∖ Chain₀\|)——定为 B1 条款 5 对账精确口径(雾在最小清图 AP 负担中的权重)。 - -### 深度分析 - -分母 = \|S ∖ Chain₀\| = 最小清图付费挖掘格数(初始展开与连锁免费、其余每格 dig_ap_cost——A3 价目只读引用),分母下限 1 防全连锁退化板除零。链可达性取决于未开 0 格隐藏拓扑,玩家决策时点不可求值——本式是生成期事后度量;A4"玩家侧按全价做预算"的保守启发式不与本式冲突,两口径服务不同主体。聚合义务(A4 ⑤ 公式化):逐板计算入指标集;调参期按行批量聚合出核算报告供 C3 修正行参数;无运行期强制——A1 只拥有量的计算与输出,不拥有"够不够"的判(归 A1/A3 契约与 C3)。 - -边界形态的观测意义:U=F(雾区全部链不可达)→ 雾板退化为纯 AP 税——A4 反向护栏与 B4 定价约束的观测对象;U=∅(雾全链免开)→ 雾零成本——B4"糖果区"病理在此指标上直接现形。验算例:F1 例板 F=9、链可达雾 5 → U=4;dig_ap_cost=1 → Δbudget_fog = 4 AP;付费格 = 124 − 58 = 66 → fog_burden_ratio ≈ 0.061。 - -### 综合判断 - -Δbudget_fog 与 fog_burden_ratio 随图输出、生成期算账、调参期批量核对;运行期不强制,账对不上改的是难度参数行。 - -## 问题:调参期红线怎么守(F4 的阈值与样本量怎么定的)? - -### 广度分析 - -- 红线阈值候选:小容差(如允许 1% 失败)——被否:A1 反向护栏已定"跌破门槛 = 阻塞缺陷",任何一例失败即触发参数修正会话,迫使决策显式化;裁定严格零(用户定稿)。 -- 雾出现下限候选:1.0——被否:EC2 连通性降级是合法运气事件;裁定 0.95(收紧为达成区占比后,同时容纳完全降级与部分达成两类合法运气事件)。 - -### 深度分析 - -阈值裁定理由(五条): - -| # | 理由 | -|---|---| -| ① | 红线严格零(用户定稿):任何一例失败即触发参数修正会话,迫使决策显式化;运行期"接受最优/最不坏"是安全网,批量红线是调参期纪律 | -| ② | N=256:95% 下限的稳定通过要求真实出现率 ≥ 0.98(3σ 余量 ≈ 99.97%) | -| ③ | 雾出现下限 0.95 而非 1.0:5% 容差容纳自然方差;系统性病理(level 2 小图低密关雾成片失败)呈现 ~0% 出现率,与 0.95 相距悬殊,检出无歧义 | -| ④ | 断言 B′ 零成本反向杠杆:门控 bug(如 level 1 出雾)一例即现形 | -| ⑤ | 成本:行数 × 256 板 × ≤32 attempts 的生成+求解模拟,离线分钟级(成立域 = worklist 级求解实现 ∧ 大面积行稀少;naive 全板扫描实现 + 数行 48×64 板即小时级——分片续跑义务见 OQ2) | - -σ 基址打包论证:σ(L,D) = 10^9 + 2^20·L + 2^12·D——位打包使行区间 [σ, σ+255] 两两不交、远离运行期取号域;朴素 1000·L+D 打包在 D≥1000 时精确碰撞〔(1,1001) ≡ (2,1)〕且同 L 相邻深度行批量区间 255/256 种子重叠。登记种子按失效协议全部重搜——夹具 σ 为登记时值。derive_at 纯函数、不推运行期计数器;σ 基址清单入版本库,批量跨迭代可复现。target行 期望由表值推导,不写死。 - -### 综合判断 - -断言 A/A″/A′/B/B′/E + 报告 C + 诊断 D 现行口径冻结;严格零阈值与 0.85/0.25/16384 同属结构冻结。验算行:行 (2,0)(fog unlock 关)N=256 → 两项判据达标 256/256 → A 通过;达成区数 = count 的板 251/256 = 0.980 ≥ 0.95 → B 通过;重试率 3.1% → 诊断记录。行 (3,2):达成区数 = count 的板 220/256 = 0.859 < 0.95 → B 失败 → 修正行参数(区域数/尺寸/密度侧保证,禁放宽 A4 Rule 3)。极端行为:target 1.0 的行在断言 A 下大概率开火(合法、预期信号);断言 B′ 失败即实现缺陷而非参数问题。 - -## 问题:生成-验证循环与验收算子怎么取舍(F5 为什么是三分支)? - -### 广度分析 - -- 候选 A:一次性生成不重试——被否:雾布完才测可推理率,单次失败即废图过于浪费,且没有参数问题的暴露通道。 -- 候选 B:全局 argmax(跑满 attempts 取最高分)——被否:达标即出(最早达标尝试 k*)是重试语义的自然形式化,argmax 徒增耗时无品质收益。 -- 候选 C:attempts 用尽直接报错/卡死——被否:玩家永不卡死是硬承诺;裁定降级链 = 接受最优(k**,tie 取最早、零额外取数)+ 强告警 → 零合法时接受最不坏(k***,确定性劣度字典序)+ 最高级告警 + 非法产物标记(均为用户定稿)。 - -### 深度分析 - -合法性闸(clearable/min_safe)在质量评分之前的理由:不可清图产物若进入"接受最优"候选,质量分会掩盖功能残废——1 个不可达安全格只拉低 inferability 0.008,板却已功能性残废。三分支共用同一 board_gen 流实例(Rule 3/6),k*/k**/k*** 与 B_out 同为流取数的确定函数——回放语义闭合;scope 事件边界操作定义 = 生成函数完整返回(重试不产生新取号),D3 快照切点天然落在边界外(D2"消费侧遵守"条款的 A1 具体化)。生成期表值单次读取(行参数在生成开始时快照,生成期内不重读——防热重载撕裂 attempt 语义,A4 EC8 同族)。"接受最不坏"分支的确定性劣度 = (不可达安全格数, min_safe 缺口, 序号) 字典序——零额外取数、可重放。B1 编排不得把 attempt 边界当 scope 事件(登记 B1 接线注记)。 - -EC5 玩家侧语义登记:非法产物标记属遥测域、玩家不可见——零合法板在玩家侧表现为"看似可玩"的功能残废(不可清图板挖光可达域后 cleared 永不触发、清图奖励永不可得、无任何提示),GDD 如实登记该体验债;玩家侧诚实呈现(提示/补偿/回退)登记为 B1/D1 域承接项;运行期熔断候选(同 (L,D) 连续降级/非法 ≥ 阈值 → 确定性回退该行已知好种子重生成)不破"玩家永不卡死"与回放契约,方案裁决归实现期 ADR(OQ2 关联)。 - -### 综合判断 - -三分支 + 合法性闸前置 + 强告警分级是现行契约;降级率是参数问题的暴露通道,批量红线由 F4 断言 A′ 守。 - -## 问题:体验锚点为什么这样定(P1/P4/P3 的生成侧承诺)? - -### 广度分析 - -- P1 生成端对偶:D2 保"同种子同结果"的可复现,A1 保"同参数同品质"的可推理——可推理率生成参数 = 出题人义务;玩家输给的是自己选的赌(雾区/终局盲猜),不是不可解的局。 -- P4 难度物质:雷密、尺寸、雾占比随 (level_index, node_depth) 爬升——难度由 BoardGenTable 行参数直接雕刻,非文案。 -- P3 空间面:生成期布置约束兑现"雾区无雷、雾贴雷簇"(A4 Rule 3 结构推论)——洞口前的权衡是真实的信息权衡而非装饰。 - -### 深度分析 - -情绪目标:"这局能算"的底气——A1 不制造情绪,它制造情绪的前提条件(玩家永不看见生成器,但每轮都在体验它的产物)。参考感受:扫雷原版"每局必有解"的玩家信念(原版实际不保证——本作把这份信念变成生成端契约);Into the Breach 每张谜题可解的设计诚实。反向护栏(裁剪判据):"纯猜局"是 P1 的死亡体验——生成端若让玩家频繁坠入不可推理局面,结算端再华丽也救不回掌控感;红线 = 生成参数使可推理率跌破门槛即为阻塞缺陷(验收红线,非调参建议)。 - -### 综合判断 - -三条支柱承诺全部以生成端可判定契约承载(双判据、行参数雕刻、布置约束),无一依赖文案或呈现。 - -## 问题:核心结构决策的取舍记录(布雷、取整、密度形态、推理域)? - -### 广度分析 - -- 布雷语义候选:落选重投(落进环内就重取位置)vs 先布后删(落完再删、只减不增、不重投、无迭代)——裁定先布后删:确定性终止、无迭代、漂移量可观测(|M| ≤ N 入指标集)。 -- 雷数取整候选:round 钉死(其他取整为非法实现——F2b sound 性论证依赖此钉死)。 -- 雷量参数形态候选:定数 vs 密度浮点——裁定密度浮点(尺寸解耦;f≤8d 分母对齐),用户拍板四结构决策之一。 -- 推理域候选:开放信息源 vs 封闭枚举 single_subset——裁定冻结(用户拍板);改域 = 改可推理率定义 = GDD 修订非调参。 - -### 深度分析 - -四结构决策(生成-验证循环 / 接受最优 + 零合法接受最不坏 / 推理域 single_subset 冻结 / 密度浮点)与 F4 严格零红线为用户拍板——全部经 2026-09-09 full /design-review 8 条 blocking 修订后放行(日志:design/gdd/reviews/a1-board-generation-review-log.md)。雾边双向净效应建模(A4④):可推理率测量在布雾完成后进行,雾边寂静减项与雾锚增项(雾元知识开据格)同时内生于测量,禁单向补偿;AC-8 板ⅲ 为此的度量侧证据。 - -### 综合判断 - -结构决策全部冻结;任何一项的改动都走 GDD 修订。 - -## 问题:措辞与口径防漂移登记(为什么是 registry 级)? - -### 广度分析 - -inferability 与 P(安全) 是两个系统的两个量,混用即口径漂移。 - -### 深度分析 - -inferability 是盘面级免赌占比(生成侧);P(安全) 是单格认知概率(决策侧、经济口径)——免赌集内 P(安全) 恒 = 1(含雾格),风险讨论收缩到残余集(其安全格占比 ≤ 1 − inferability)。inferability 是 P(安全) 的生成端结构性上界代理之占比形式,不是 P(安全) 本身。B1 条款 3 对账输入 = actuals 分布 p10(F4 报告 C)而非 target 参数——防"拿参数当事实"。 - -### 综合判断 - -措辞登记为 registry 级事实(board_gen_table.inferability_vs_p_safe),B1 消费回执已登记。 - -## 问题:验收设施怎么设计(测试口径各条款的理由)? - -### 广度分析 - -- 冒烟载体:A1 是生成函数系统,`godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree、autoload 显式实例化)。 -- 度量独立入口(qa-lead 裁决、分解面声明):推理器(R∞/inferability/metric_version)、F3 度量(Chain₀/U/Δbudget_fog/fog_burden_ratio)、合法性谓词(legality/clearable)以独立纯函数入口暴露——生成函数内嵌调用与独立入口同一实现,独立入口不引入新逻辑、仅暴露 F1/F3/F5 已定义的函数;独立入口的行为断言即内嵌调用的行为(次序无关性、防作弊等白盒性质测试以此为载体);若实现期 ADR 裁决推理器不可独立调用,AC-7/8/9/12 的单元腿须降级重议——登记缺口 G1,门禁评审列为 A1 实现契约条款。 -- 测试种子取号:经 `derive_at("board_gen", σ)` 纯函数(D2 R2 预览语义的测试侧合法用途,不推运行期计数器);测试脚本以该种子构造流实例属测试通道合法动作(AC-18 扫描豁免域);运行期 replay 语义(open_stream 全真路径)另测(AC-5)。 - -### 深度分析 - -夹具策略:默认根 = MVP 参考行 L1·D0 / L2·D0(干净检出)——参考行是 GDD 定稿的 schema 自洽性证明行,期望全部由表读值推导、对 C3 调参免疫;行为变体经 `--data-root` 夹具根注入(禁拷入 data/tables/);黄金图板与病态板经 Board class_name 直引程序构造(不经生成器、不经 load()/preload()——A4 AC-5 先例)。登记种子(σ 值)依赖管线确定性:一经验证恒成立,实现或定义变更致失效 → 按失效协议重搜并登记(与黄金向量失效协议同源)。 - -黄金图回归向量协议:五类手工核验小板,每板 = 显式坐标规格(尺寸/雷集/雾区格集/出生 3×3,程序构造不经生成器)+ 登记常数((\|R∞\|,\|S\|) 整数对、含雾板另登记 (\|R∞∖F\|, \|S∖F\|) core 整数对——由既有坐标规格派生、向量不重制、关键格 R∞ 成员表、clearable、Chain₀/U 格集、Δbudget_fog、fog_burden_ratio 比对形 = 整数对 (\|U\|, max(1,\|S∖Chain₀\|))、metric_version=1——整数对比对,禁浮点容差)+ 逐格手工推导记录(每格声明信息源 ∈ {数字约束(a)、雾元知识(b)、0 格级联①},入版本库随向量文件——手工常数的登记依据);比对内容 = 度量独立入口 + 合法性谓词输出与登记常数逐位相等;失效处置协议 = 失配先按冻结定义复核手工推导,推导无误即实现缺陷(修实现);solver_rules/合法信息源域/metric_version 变更 = 换 solver_rules 即失效,走 GDD 修订 + 向量重制(推理域冻结的非调参性质的行为侧兑现)。 - -期望值推导纪律:行为类 AC 期望 = ConfigDB/表读值推导(inferability_target/min_safe_count/max_gen_attempts/fog_region_count/unlock_level/dig_ap_cost/σ 公式全读值),不写死玩法数值;唯一例外 = 黄金图向量手工常数(依据 = 手工推导记录);参考行 GDD 自注期望(\|S\|≈91 等)为说明非断言,任何 AC 不采用。致命类独立进程协议:承 D2 AC-2b / A4 AC-4b——runner manifest 逐条登记"夹具根 → 期望退出码"(AC-3 三行,均 ≠0);单进程内只做测试通道收集断言;每用例先 `reset_diagnostics()`(承 D2 冒烟协议;warning/error 断言一律经诊断收集器)。 - -MVP 参考行自洽性验证:F2/F2b/F2c 全过(10×10×16 = 1600、12×12×16 = 2304 ≤ 16384);期望 \|S\| ≈ 91、R₀ ≈ 12–20 → inferability 期望 ≥ 0.95(L1 无雾 ⇒ core ≡ inferability;L2 雾 ~14/144 格、core 判据轻度收窄仍期望 ≥ 0.92——两项判据同时达标;attempts_used ≈ 1,F4 全绿理论位形)。参考行明细:L1·D0(10×10 / d=0.10 / target=0.95 / single_subset / min_safe=50 / attempts=16 / fog 0·0——level 1 候选池空标准形 / biome={"dungeon"} 占位);L2·D0(12×12 / d=0.12 / target=0.92 / 同冻结 / min_safe=60 / attempts=16 / fog 1 区·0.10〔≤8×0.12 ✓——F4 断言 B 首个真实考验行〕 / biome 同占位)。全部 provisional——仅 schema 自洽性证明,曲线数值归 C3 调参所有权。 - -### 综合判断 - -测试口径全部条款现行有效;缺口 G1/G2/G4 如实登记(见开放问题区)。 - -## 附录 A:夹具规格(qa-lead 交付,逐根原样保留) - -| 夹具根 | 内容(F2/F2b 均过,除违例根外) | 用途 | -|---|---|---| -| `a1_fog_domain` | f>8d 违例行 | AC-2/3(致命) | -| `a1_min_safe` | 10×10/d=0.10/min_safe=92(F2b 违例:100−round(0.10×91)=91<92) | AC-2/3(致命) | -| `a1_biome_empty` | board_biome=∅ 行(A4⑮) | AC-2/3(致命) | -| `a1_pool_empty` | VariationTable 测试行(biome_tag=[ice]、unlock_level=1,承 A4 variation_biome_tag 同型)+ BoardGenTable 两行:(1,0) board_biome={dungeon}(pool=∅)/ (1,1) board_biome={dungeon,ice}(pool 非空) | AC-13 | -| `a1_high_target@k` | 12×12/d=0.12/target=1.0/fog=1 区 0.05/min_safe=60/attempts=k∈{1,2} | AC-5/11 | -| `a1_ec5@k` | 10×10/d=0.45/min_safe=1/target=0.85(域内合法档)/fog=0/attempts=k∈{1,2,8,16};σ* 登记(@1 零合法验证种子) | AC-12 | -| `a1_two_regions` | 10×10/d=0.15/count=2/f=0.12/target=0.85/attempts=16;σ 登记 | AC-14 | -| `a1_ec2_press` | f := 8×d 计算值恰界行(程序内动态赋值);σ*′ 登记(shortfall>0 搜索种子) | AC-15 | - -黄金板设计要求:ⅰ 纯数字推理板(无雾;须含仅 single_subset 规则可开的推导格)· ⅱ 链密集板(0 格级联闭包主导)· ⅲ 含雾板(须同时含:链可达雾、链不可达雾、邻接出生 3×3 的雾区、寂静减项证据格、雾锚增项证据格【雾元知识开据格】)· ⅳ 终局对赌残余板(inferability 严格 ∈ (0,1) 的非确定残余)· ⅴ 不可达安全格板(clearable 违例形态)。 - -只读观测量清单:产物格状态(雷布/数字/0 格/雾区标记/出生区)+ 八项指标(实际 inferability【含 metric_version】/ inferability_core / 实际雾占比【= \|F\| ÷ (W×H)】/ 实际雷数与实际 \|S\| / fog_burden_ratio / Δbudget_fog / attempts_used / 降级标记【含非法产物标记与 shortfall】)。 - -## 附录 B:out-of-scope deferral 表(以对侧登记为生效条件) - -| 编号 | deferral 内容 | 对侧 / 生效条件 | -|---|---|---| -| O1 | B1 接线——attempt 边界非 scope 事件的编排侧断言、指标对账消费(actuals p10 非 target)归 B1 GDD AC(A1 侧生成半边已由 AC-5 计数器断言覆盖) | B1 GDD 登记 | -| O2 | F4 全量——N=256/行 × 全行的断言 A 严格零/B 0.95/报告 C/诊断 D = 调参期离线批量工具域(工具本体为 A1 交付物,登记 OQ;σ 基址清单入版本库),冒烟仅载缩样(AC-10) | 批量工具交付登记 | -| O3 | A2 集成——双包含回验(A2 实际展开域 ⊆ A1 排除域;A1 求解器初始态 ⊆ A2 实际初始展开域)登记 A2 GDD(A1 半边由 AC-6(a) 测试 BFS 对照承载) | A2 GDD 登记 | -| O4 | fault-injection 缺载体——EC7 生成中热重载(同步单调用无重入点,构造性成立且注入不可)、EC10 内部异常 fatal、EC4 tie-取最早(需精确同分尝试)deferral 至实现期注入设施或可选种子搜索会话 | 实现期登记 | -| O5 | 性能预算——生成耗时/换图相位无定稿预算值(Tuning Knobs OQ),perf-profile 期承载 | perf-profile 期 | -| O6 | 呈现域——EC6 雾区视觉合并归 D1、biome 色板换皮归 D1/art-bible | D1/art-bible 登记 | -| O7 | C3 全行审计——曲线导出工具全行矩阵 diff 为 C3 期交付物(D2 OQ5 既有排期) | C3 期 | - -## 附录 C:Knob 调参方向表(调过高/调过低的后果记录) - -| Knob | 参考(L1/L2) | 调过高 | 调过低 | -|---|---|---|---| -| board_width/height [8,64] | 10×10 / 12×12 | 决策带宽膨胀、清图时长拉长 | 逼近 min_safe 联合域(F2b 拦截线) | -| mine_density (0,0.5] | 0.10 / 0.12 | 推理窗收窄、可推理率难达标(F4 断言 A 开火);f≤8d 分母水涨船高 | 图面空旷、奖励密度稀 | -| inferability_target [0.85,1] | 0.95 / 0.92 | 重试率升、深行联合不可行(F2 裁决:无静态闸,F4 必然现形) | 域下限 0.85 = P1 绝对锚(加载期拒绝 + F4 断言 A″ 兜底)——"纯猜局混入"红线自此有可判定载体;0.85 本身的调整走 GDD 修订非调参 | -| min_safe_count | 50 / 60 | 小图联合无解(F2b 加载期拦截) | 退化板钓鱼复现(A3 EC5 对冲失效) | -| max_gen_attempts [1,32] | 16 | 生成耗时随 attempts×面积×传播深度超线性涨(对边长最高三次方量级;F2c 成本闸拦病理组合,OQ2) | 降级率上行、质量下行 | -| fog_region_count | 0 / 1 | 信息剥夺过重(P1 落差);F4 断言 B 压力 | 低于雾出现率下限 → A4"解锁新变异"推进感哑火(A4⑭ 义务) | -| fog_target_ratio [0,1) | 0 / 0.10 | 逼近 8d 上界 → 布置降级率升(连通性,EC12 两闸注记);> 0.25 加载期拒绝(F2 雾占比绝对上限腿) | 雾存在感弱、P4 推进感哑火 | -| board_biome | {"dungeon"} | ——(词表 owner 未定稿,暂只校验非空) | —— | - -## 附录 D:覆盖矩阵(qa-lead 交付,验收评审用) - -| 类别 | 映射 | -|---|---| -| Core Rules | 1→AC-4/5/6(c)/16(布雷语义)· 2→AC-8/9/10(a)/16(两项判据)· 3→AC-10/11/12 · 4→AC-6(a)(b)/7(芯/环口径)· 5→AC-6(c)(d)(e)/13/14/15 · 6→AC-4/5/14/18 · 7→AC-16 · 8→AC-2/3/6(f) · 9→AC-1/2/3/13 · 10→AC-6(g)/17/18/19 | -| Formulas | F1→AC-8/9/7/16 · F2/F2b/F2c→AC-2/3(角点/上限/布雷数下限/成本上限)· F3→AC-16 · F4→AC-10(全量 O2;断言 A″/E 属 O2)· F5→AC-10(e)/11/12/7 | -| EC | EC1→13 · EC2→15 · EC3→7/8 · EC4→11(tie O4)· EC5→12(玩家侧语义登记 B1/D1 域)· EC6→14(合并 O6)· EC7→O4 · EC8→10(c) · EC9→2/11 · EC10→O4 · EC11(F2b)→2/3 · EC12→2/15 · EC13→2 · EC14→5 | -| A4 义务 | ①→13 · ②→6(c) · ③→6(a)(b) · ④→8/16(core 常数补强)· ⑤→16 · ⑥→13 · ⑦→15 · ⑧→4/14 · ⑨→7/8 · ⑩→2/3 · ⑪→14(间接承载——共置+确定性,无取号耦合差分)· ⑫→6(d)(e)/2 · ⑬→15(部分覆盖:面积判据实现同样通过 a1_ec2_press——取号耦合差分夹具登记待核销)· ⑭→10/O2(断言 B 收紧达成区占比)· ⑮→2/3 | -| 规模 | 19 条 AC + A4×15 全落位 + 黄金五板;⑪ 差分承载与 ⑬ 差分夹具登记待核销(间接承载已注明),5 处标注问题的修正明细见评审日志 | - -## 开放问题 - -| # | 悬案 | owner | 时机 | -|---|---|---|---| -| OQ1 | F4 全量批量工具的 owner 排期:调参期红线工具(断言 A/A′/B/B′ + 报告 C + 诊断 D,N=256/行)——与 D2 OQ5 曲线导出工具同批登记排期(排期倒挂:A1 定稿→首行数值回填→即需抽查;临时载体 = 冒烟缩样 AC-6/10,统计意义有限,如实登记) | A1 交付物 / C3 消费 | C3 调参期前 | -| OQ2 | 生成性能预算与异步化选项:① 预算数值定稿——F2c 谓词形式已冻结(max_gen_attempts × W×H ≤ C),C = 16384 为 provisional 占位,ADR 裁定正式 C 与 headless debug 基准(如"64×64 单次求解 ≤ X ms");② 解空间圈定——死路二:attempts 并行化(毁 board_gen 流序即毁回放)、分帧/协程化(跨帧在飞 open_stream 实例与 D2 快照切点契约冲突,需 D3 扩容修订);活路四:同步 + 加载幕(B1 换图相位)、主线程分帧 + D3 快照扩容修订、WorkerThread + D2 EC13 单线程假设接口漂移修订(join 先于任何快照切出)、B1 预测性预生成(线性图结构的死时间生成——scope 计数器推进时点须入回放语义);③ 实现姿态约束——最小不动点可经单调 worklist 传播实现(次序无关性不强制全板重扫描——F1 注记⑤),禁全对全子集比较(ADR 验收底线);④ F4 全量工具须支持分片续跑("分钟级"成立域 = worklist 实现 ∧ 大面积行稀少,见 F4 阈值⑤) | 实现期 ADR / perf-profile | Technical Setup | -| OQ3 | 度量独立入口分解面确认:推理器/F3 度量/合法性谓词三入口暴露(AC-7/8/9/12 单元腿前提——缺口 G1);若 ADR 裁决不暴露,四条 AC 单元腿降级重议 | 实现期 ADR | 实现期 | -| OQ4 | biome 词表 owner 定稿:board_biome 值域现只校验非空(EC13);词表定稿后补域校验 + 参考行占位值替换(接口漂移) | B4/C1 域 + AD 门禁 | 垂直切片前 | -| OQ5 | 黄金向量手工推导第二人复核:五板逐格推导记录入版本库后安排复核(qa-lead 缺口登记——推导错误即假失配) | A1 定稿评审 | A1 /design-review | -| OQ6 | 精英/Boss 第三轴落点重审:节点形态定稿后强制重审——① Dmax 行约定是否覆盖全部 Boss 场景 ② 精英节点是否需第三键维 / elite_、boss_ 字段激活(分支地图同深度并存精英与普通节点时);激活即走 D2 Rule 4 改键通道 + 本表 schema 修订(接口漂移迁移,退路已登记) | C1/C3 GDD | C1 定稿时 | - -待拍板(格式迁移中发现的原文与 registry 落差,不自行裁决): - -| # | 事项 | 来源 | -|---|---|---| -| T1 | registry `a2_initial_expansion.degenerate_gap` 与 systems-index 登记了一条 A1 修订义务(反例 B / N=1 行 100% 退化):F5 legality 增 `R₀ ≠ S`(违例 = 尝试作废重试)+ F4 断言 A′ 族严格零覆盖 + Rule 4 排除域基准措辞钉死"以最终产物板计"。该义务未落入原 A1 GDD 任何版本(F5 legality 现形 = clearable ∧ \|S\| ≥ min_safe ∧ 结构不变式,R₀=S 的退化板 clearable 照过)。本次为格式迁移、禁止加规则,原样保留现形并在此登记——待用户/修订流程裁决是否按既有登记走接口漂移修订 | design/registry/entities.yaml + systems-index 门禁记录 | - -缺口登记(原测试口径/AC 内的 G 编号,保留): - -| # | 缺口 | 处置 | -|---|---|---| -| G1 | 度量独立入口分解面未确认(AC-7/8/9/12 单元腿前提) | 归 OQ3,实现期 ADR 裁决;不暴露则四条 AC 单元腿降级重议 | -| G2 | AC-9 输入表示序不变量不覆盖完全开据定序自由度的穷尽验证 | out-of-scope,如实登记 | -| G4 | a1_ec2_press 的 shortfall>0 搜索种子 σ*′ 若搜索无解,后备语义未定 | 登记待核销,协议同 AC-12 种子搜索 | - -## 去向映射(零丢失审计证据) - -| 原章节 | 落点 | -|---|---| -| 头部(状态/版本/支柱/层级/一句话/复核注记) | design 头部(状态/版本/一句话/推演件指针);承载支柱与层级定位并入 design 设计目的定位段;复核注记(CD/AD 未经咨询、生产前人工复核)→ 本文件开放问题区关联 OQ5 + 版本历史沿革 | -| 速览表 | 定位/拥有/不拥有 → design 系统范围;上游输入/下游输出 → design 依赖与输出;硬约束 → design 生成管线与随机流纪律规则 3 + schema 节;缺位后果 → design 设计目的 | -| 体验锚点(P1/P4/P3 表、情绪目标、参考感受、反向护栏) | 结论(五条体验承诺)→ design 设计目的;全部论证 → 本文件「体验锚点」问题节 | -| 全局流程(五阶段字符画 + 出口分发表) | design 核心循环(原样保留) | -| 核心规则 1–10(人话 + 举证) | 人话 → design 各领域章节编号规则(规则 1/6 → 生成管线与随机流纪律;规则 4 → 出生区与可达域;规则 5/9 → 变异布置与雾形边界;规则 2/3 → 可推理率度量与验收算子;规则 7 → 清图预算增量;规则 8/10 → 参数表节);举证中的计算指向保留为 F 编号引用 | -| 枚举(八项指标集 / solver_rules) | solver_rules → design 可推理率节规则 5 + schema 表;八项指标集 → design 依赖与输出产物行 + AC-16(逐字段枚举保留);指标逐项语义 → 本附录 A 只读观测量清单 + design 各 F 节 | -| F1 结论 + 推导 + 口径注记 + Variables + 验算 | 结论与公式本体 + 口径钉死表 + 变量表 + 值域边界 → design F1 小节;推导论证(两通道、初始态、次序无关、clearable 两闸理由、完整验算例)→ 本文件「可推理率」问题节 | -| F2/F2b/F2c 结论 + 推导 + 联合可行域裁决 + 验算 | 结论与判定式 → design 加载期校验表;边计数推导、sound 性论证、禁墙钟论证、裁决表、验算表、极端行为 → 本文件「参数域」问题节 | -| F3 结论 + 推导 + 口径注记 + Variables + 验算 | 结论与公式 + 口径表 + 变量表 → design 清图预算增量节;分母取舍、两主体口径、边界形态观测意义、验算例 → 本文件「雾的成本」问题节 | -| F4 结论 + 推导 + 阈值理由 + Variables + 验算 | 结论与断言表 → design F4 小节;阈值裁定理由五条、σ 打包论证、成本论证、验算行 → 本文件「调参期红线」问题节 | -| F5 结论 + 推导 + 注记 | 结论与公式 + 注记表 + EC4/EC5 出口表 → design F5 小节;三分支取舍、合法性闸前置理由、EC5 玩家侧语义论证 → 本文件「验收算子」问题节 | -| 显式排除声明(归属表) | design 系统范围不负责清单(括注归属)+ 依赖与输出 | -| 措辞登记 | design 依赖与输出节前注记;论证 → 本文件「措辞」问题节 | -| MVP 参考行 | design 调参表默认列(provisional 标注);参考行明细与自洽性验证 → 本文件「验收设施」问题节 | -| 状态(五阶段失败语义 + 不变式) | design 生成管线节失败语义表 + 不变式行 | -| 边界情况 EC1–EC14 | EC1/EC2/EC3/EC6/EC12/EC13 → design 变异布置节与出生区节编号规则;EC4/EC5/EC8/EC9 → design F5 小节出口表;EC7/EC10/EC14 → design 生成管线节规则;EC11 → design 加载期校验节规则;判据与依据编号全部保留 | -| 依赖(上游/下游/A4×15 落位表/跨系统对账登记/双向一致性核对) | design 依赖与输出(原样保留) | -| 呈现与 UI 契约(5 行数据面义务) | design 依赖与输出末表(原样保留) | -| Tuning Knobs(schema + 加载期校验 + 第三轴登记 + Knob 表 + 非 knob + 工具参数 + Knob 交互) | schema + 校验 + 第三轴 → design 参数表节;调参表(字段|域|默认|owner)→ design 调参表;调过高/调过低后果 → 本文件附录 C;非 knob 结构冻结清单与 Knob 交互 → design 调参表脚注 | -| 验收标准(测试口径 8 行 / 夹具规格 / out-of-scope deferral / AC-1–19 / 覆盖矩阵) | AC 19 条 GWT(编号不动、判定口径保留)→ design 验收标准;测试口径详表 + 夹具规格 + deferral 表 + 覆盖矩阵 → 本文件「验收设施」问题节 + 附录 A/B/D | -| 开放悬案 OQ1–6 | 本文件开放问题区(原编号保留) | -| 版本历史(3 行) | design 版本历史(原 3 行保留 + 追加 v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/a2-minesweeper-rules.md b/design/archive/gdd-2026-09-14/analysis/a2-minesweeper-rules.md deleted file mode 100644 index 8986ac30..00000000 --- a/design/archive/gdd-2026-09-14/analysis/a2-minesweeper-rules.md +++ /dev/null @@ -1,302 +0,0 @@ -# A2 排雷玩法规则 设计推演 - -> 状态:concluded · 本文只装"为什么"——`design/gdd/a2-minesweeper-rules.md`(design 件)只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。OQ 编号与 design 件共用同一套。 - -## 问题:为什么数字与事实流必须恒真、拒绝必须可辨? - -### 广度分析 - -- 候选 A:信息诚实(数字恒真透传、拒绝携带可辨原因)——收益:玩家推理可兑现,"我算对了"成立;代价:呈现层不能以"隐藏"修补规则缺陷,规则层工作量前置。 -- 候选 B:战争迷雾式数据隐藏(数据层也不给真值)——收益:实现宽松;代价:P1"每一步都算数"直接死亡,连锁与推理失去地基。 -- 候选 C:弹性/含混提示(拒绝不给结构原因)——收益:文案自由;代价:玩家无法分辨"须先拔旗"与"非相邻",拒绝体验含混 = P1 死亡体验。 - -### 深度分析 - -本作 P1 支柱的执行面是"系统回应的每一格都与玩家推演的一致"。数字提示是扫雷推理的唯一原料,雾格只是呈现层不显示——数据层若说谎,推理兑现即坍塌。反向护栏由此确立:任何"规则层说谎"的形态(数字失真、连锁静默变异分支、拒绝原因含混)默认砍掉;呈现层的隐藏必须以数据层恒真为前提。 - -### 综合判断 - -采用候选 A:digit 恒真透传(含雾格,仅 kind=safe 携带)、三源拒绝 + sub_reason 封闭枚举、事件发射规范序钉死。参考感受:Into the Breach 的信息诚实——拒绝你的规则从不含糊其辞。结论落 design 件:规则 1/2、三事件回边表、sub_reason 枚举、AC-19/20/22。 - -## 问题:为什么连锁算子必须与 A1 生成端度量同构,且零特判可行? - -### 广度分析 - -- 候选 A:A2 连锁算子与 A1 F1 算子①逐字同构——收益:连锁放大推理的兑现与生成端可推理率度量同源,"连锁传播与生成端度量同构"成立;代价:两系统算子修订必须联动(metric_version 跳变)。 -- 候选 B:A2 自写一套近似 flood fill——收益:实现自由;代价:玩家实际连锁规模与 A1 度量脱节,P1 兑现失真。 -- 候选 C:为雾格/变异写运行期分支——收益:局部直观;代价:违反零特判,变异系统任何扩展都要回改 A2。 - -### 深度分析 - -同构论证逐点成立:R↔X 换名后触发谓词同(成员资格 ∧ 真实数字 = 0——禁读显示值,雾格显示空 ≠ 0 格)、传播目标同(8 邻安全格——雷永不入链)、封闭域同(S)、单调最小不动点语义同(次序无关性两侧成立——worklist 任意定序、结果唯一)。同构主张范围 = 算子①本身:A2 无算子②推导项,不主张 O = R∞。增量合法性引理:Cl 单调幂等 ⇒ 逐动作增量求值 ≡ 一次全量闭包(与 A1 生成期同值)。 - -零特判合规两臂:雾格恒非 0 由 VariationTable 跨字段校验承重 ⇒ "可被链开"与"永不传播"两个方向都是定理不是分支;旗格不入链是集合减法(`∖ G`)不是分支——旗是 A2 一等规则对象、非变异属性。A2 运行期旗非空时传播集排除旗格(连锁不越旗);双包含回验不受影响——回验只在 install 时点发生,彼时 G = ∅(同构域 = G=∅ 域的依据:A1 生成期与 A2 install/初始展开时旗集恒空,`S ∖ G = S`)。 - -### 综合判断 - -采用候选 A + C 的反面:F2 与 A1 F1 算子①在 G=∅ 域逐字同构,A2 代码零变异分支。结论落 design 件:F2 结论与公式、实现期红线 1/3/4。 - -## 问题:为什么初始展开必须恰等 R₀——不能外扩一环,也不能只开 3×3? - -### 广度分析 - -- 候选 A:恰等 R₀(B3 ∪ flood 闭包)——收益:与 A1 求解器初始视野逐格相等,度量保真;代价:定义版权在 A1,A2 禁独立改动。 -- 候选 B:外加一圈"安全边距"(外扩 1 环)——收益:手感更松;代价:破双包含臂①(展开域 ⊆ 排除域),可能开出变异格。 -- 候选 C:只开出生 3×3——收益:保守;代价:破臂②(求解器初始态 ⊆ 展开域),A1 度量吃亏、回退口径触发。 - -### 深度分析 - -双包含回验两臂构造性成立:臂① R₀ ⊆ 排除域(以最终产物板计:出生 3×3 ∪ 闭包 ∪ 外扩 1 环)——给"不触变异"保证;臂② A1 求解器初始态 = R₀ ⊆ O₀ = R₀——恰等,给"A1 度量不吃亏"保证。两义务来源分开陈述:性质 1(恒不开雷 R₀ ∩ M = ∅)由 B3 无雷 + 闭包只收安全格独立可证,环内可有雷;"不触变异"则经排除域给出。恰等 ⇒ A1 回退口径(出生 3×3 最小态)不触发、度量保真零降级。 - -退化守卫(不变式④ R₀ ≠ S)的必要性由反例 B 证明(跨 GDD 阻断缺口):A1 现行布雷数下限 N ≥ 1 必要不充分——8×8 板 8 雷 placed、先布后删幸存 1 颗距离-2 雷 → 最终板全 0 格连通 → R₀ = S,且 A1 F4 断言 A(inferability=1.0)零拦截、N=1 参数行 100% 退化。登记义务 = A1 F5 legality 增 R₀ ≠ S(违例 = 该次尝试废弃重试,clearable 同款)+ F4 批量断言严格零 + Rule 4 排除域基准措辞按最终产物板计;A2 侧不变式④为纵深防御,双包含两臂不受影响。 - -### 综合判断 - -采用候选 A:O₀ = R₀ 恰等,显式不含外扩 1 环;不变式④ install 拒绝清图退化板(纵深防御,非 A1 clearable 闸复验——不可达安全格板 A2 照常运行)。结论落 design 件:规则 4、F3、实现期红线 2/5/6、跨 GDD 登记义务 A1-1/A1-2。 - -## 问题:为什么批次按语义序(清图挖 > 停手 > 其余)而非到达序仲裁? - -### 广度分析 - -- 候选 A:朴素到达序——收益:直觉;代价:见下反例,直接违反 A3 Rule 3 优先级。 -- 候选 B:固定语义序 C_dig ≺ C_stop ≺ C_other——收益:四组合与 A3 Rule 3 逐项一致;代价:玩家提交顺序不再决定结算顺序,须以"批次 = 单帧整批"心智理解。 -- 候选 C:玩家指定优先级——收益:表达力;代价:UI 与规则复杂度爆炸,MVP 不需要。 - -### 深度分析 - -反例检验(语义序的存在性证明):朴素到达序下真值表 #4([dig耗, stop])产出 (ap_exhausted, RAP+0)——违反 stopped > ap_exhausted;#2([stop, dig清])吞掉清图高光——违反 cleared > stopped(EC10 同族缺陷)。语义序将两者校正为 (stopped, RAP+remaining) 与 (cleared, new_board)。 - -分类时点二态论证:排序用批次初态、胜者路径用结算时点真值;C_dig 成员最先执行 ⇒ 其二态恒重合;C_other dig 的二态可因前序 C_other dig 执行而分歧(其批内前缀不可能含 C_dig/stop——二者任一执行即收轮、C_other 全体 voided),分歧时按结算时点真值定胜者;该前缀无 stop ⇒ 与 A3 Rule 3(cleared > stopped)不可能冲突。 - -到达序无关性的收窄(定稿裁决):(path_tag, continuation_hint, AP/RAP 终值) 对任意到达序不变(全批域);执行/voided 划分的无关性仅对异类竞争成立(四组合真值表);同类多成员批内,执行成员、棋盘终态(旗位/小人位)与划分由类内稳定序(到达序)决定——不同到达序 = 不同输入,均为合法确定行为非缺陷(例:ap=1 下 [move, dig耗] 两意图均执行、[dig耗, move] 的 move voided 且小人位不同;[flag_place, dig耗] 旗入板、[dig耗, flag_place] 旗 voided);cell_revealed/旗事件流同理以到达序为规范序。类内序必须钉死的理由:未钉死会使事件流与奖励格归属漂移——规范性义务。 - -联合清图让位条款(显式设计后果):批内个体非清的 dig 联合可清图时,stop 仍先执行并胜出(C_stop ≺ C_other)——联合清图高光被停手让位。生产面在单意图帧提交下不可构造(D1 强制项⑥),F4 语义保留为防御性兜底,AC-10 义务不豁免。 - -### 综合判断 - -采用候选 B:语义序仲裁 + 类内稳定序 + 结算时点真值键控出口;voided(零棋盘效果/零扣费/零事件)与非法拒绝严格区分。结论落 design 件:规则 9、F4、四组合真值表、EC6/EC13/EC15。 - -## 问题:为什么挖开雷格不是死亡,而是可通行的"走过的伤疤"? - -### 广度分析 - -- 候选 A:挖雷 = 轮次结束/死亡——收益:经典扫雷直觉;代价:一次失误抹掉整轮规划,与 P4"地牢下探"氛围冲突,且降级板上无兜底通路。 -- 候选 B:挖雷 = 事实上报 + 格可通行——收益:雷成为"走过的伤疤",探索不被单点终结;代价:必须配套敌方优势计价,否则雷失去威慑。 -- 候选 C:挖雷后封锁该格——收益:保留惩罚感;代价:制造不可达死区,与连通性保障冲突。 - -### 深度分析 - -采用候选 B 的计价论证:雷格通行是有价捷径——挖已知雷 = 花 1 AP + 给敌方送优势,经风险收益管线计价;是玩家主动抄近路的权衡,也是降级板上的兜底通路,不是免费通道。"被迫挖雷过路"的构图被生成期拦截——A1 clearable 闸按"安全格 8 邻接图"连通计,挖雷通路不计入,故不存在结构性强制过路费板。 - -### 综合判断 - -采用候选 B(GD-2 裁决,登记为工程债):kind=mine 事件、轮次不结束、格可通行、不计清图、同轮多雷各自独立事实。结论落 design 件:规则 11、EC10、AC-15。 - -## 问题:为什么剥夺经典扫雷的 chord 双击快开? - -### 广度分析 - -- 候选 A:保留 chord——收益:肌肉记忆友好;代价:零 AP 快开稀释"每个决策都值得花一 AP"的预算意义。 -- 候选 B:剥夺 chord,已开数字格 = 移动——收益:预算意义完整,点击语义单一;代价:怀旧玩家首遇预期违背,须教学提示补偿。 -- 候选 C:chord 以道具/后期解锁形式后置——收益:两全;代价:引入新系统复杂度,MVP 不承载。 - -### 深度分析 - -本作保留经典扫雷连锁展开的"哗啦一片"的免费与瞬时(连锁本身仍免费),但剥夺 chord 双击——每个决策都值得花一 AP,快开是对预算意义的稀释。chord 缺席的兑付节拍补偿(标中旗即时兑现候选)归 B1/B4 高光兑现节点条目化(创意风险 #3)。这个"没有"是可验收的负空间:对外 API 封闭枚举里根本没有快开入口,将来谁想加就是接口漂移修订。 - -### 综合判断 - -采用候选 B(定稿):无 chord,点击已开格唯一含义 = 移动;chord 肌肉记忆首遇提示登记 D1 强制项③(非模态、每 run 一次,A4 先例)。结论落 design 件:规则 12、AC-4、覆盖矩阵"API 封闭枚举"行。 - -## 问题:为什么旗判定轮末统一批、且诚实重复上报? - -### 广度分析 - -- 候选 A:插旗即判——收益:即时反馈;代价:旗位在轮内可变(拔/挪),即时判定会产出与终局旗位脱节的事实流。 -- 候选 B:轮末统一判定批,基线 = 事务开始旗位——收益:判定与事件序契约(先旗后结束)统一,基线与到达序无关;代价:反馈延迟到收轮,须呈现层补偿。 -- 候选 C:A2 侧去重(每雷只报一次判中)——收益:下游简单;代价:A2 越权裁决结算语义,"每雷实例至多兑一次"的资格键在结算侧。 - -### 深度分析 - -判定基线取"轮次结束事务开始时的旗位":被拔的旗不判、被 voided 的旗动作不留痕(无幽灵旗);语义序使基线与到达序无关(EC13)。行主序枚举保证确定性。旗留在雷上每轮诚实重复报判中——A2 只报事实,去重是结算侧的事(资格以雷格实例为键,A3 Rule 8/OQ5;B1 强制项③)。雾内旗恒判空是零特判的自然结果(雾区无雷),不是特判分支。 - -### 综合判断 - -采用候选 B:轮末统一判定批 + 诚实重复上报,去重归 B1/B4。结论落 design 件:规则 8、三事件回边 flag_judged 行、EC13、AC-12。 - -## 问题:为什么拒绝要分三源并携带 sub_reason 封闭枚举? - -### 广度分析 - -- 候选 A:单一 reject 布尔——收益:实现最简;代价:玩家无法分辨"须先拔旗"与"非相邻",文案无从下手。 -- 候选 B:三源 reject_reason + board_face 内 sub_reason 封闭枚举——收益:玩家语义数据可分,呈现层直接映射;代价:枚举即接口契约,批后修改 = 接口漂移。 -- 候选 C:自由字符串原因——收益:灵活;代价:不可判定、不可本地化、不可测试。 - -### 深度分析 - -UX-1 裁决(批前免费窗口):"须先拔旗"与"非相邻"玩家语义截然不同的情形必须数据可分,故 board_face 携带 sub_reason 封闭枚举七值;目录外输入(越界坐标等)单列 out_of_catalog——debug 级诊断,不与玩家语义混桶、禁静默吞。三源(board_face/resource_face/phase)互异可判定,phase 源含装板违例 board_invalid 并列第四值。 - -### 综合判断 - -采用候选 B:reject_reason 四值 + sub_reason 七值封闭枚举;玩家面文案归 D1(映射源 = 枚举)。结论落 design 件:三源拒绝表、sub_reason 表、AC-21。 - -## 问题:为什么装板要四条不变式 fail-fast、且抗表重载靠生成期快照? - -### 广度分析 - -- 候选 A:装板信任输入、不做校验——收益:代码薄;代价:违例板带病运行,错误在挖掘期以诡异形态爆发。 -- 候选 B:装板当场验四条结构不变式、违例 fail-fast——收益:信任边界清晰,诊断恰一类别可测试;代价:产物构造方须守 schema。 -- 候选 C:持数据表活引用、运行时随表——收益:热重载即时生效;代价:战斗中改表改变进行中的板行为,回放与确定性破裂。 - -### 深度分析 - -不变式④与其余三条性质不同:①–③是产物良构性,④是 A2 状态机良构性守卫(防"初始展开即整图"使轮次棋盘路径出口结构性不可达);生产面由 A1 legality 闸保证,④为纵深防御、非 A1 clearable 闸复验。产物只能经程序构造或 A1 产生,运行期不存在该输入源——故违例 = 程序构造错误,fail-fast + error 诊断是正确姿态(进程致命保留给数据通道)。 - -快照 vs 活引用:板持生成期变异快照,热重载改表行为零变化;A2 零表读取使抗重载为构造性(不是运行时防护,而是架构上没有读取路径);行为级代理验收 = 换根重放事件流逐位相同(AC-18)。 - -### 综合判断 - -采用候选 B + 快照:四条不变式 fail-fast(诊断封闭枚举)、生成期快照抗重载。结论落 design 件:规则 3、install 不变式表、EC2/EC8、AC-1b/AC-2/AC-18。 - -## 数值锚定与验算记录 - -### F1 变量域与验算 - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| σ | 棋盘状态 | —— | (B, O, G) 三元组;B 由 A1 产物给定 | -| O(σ) | 格集 | R₀ ⊆ O ⊆ U | 已开集(含初始格、连锁格、已引爆雷格) | -| S(B) | 格集 | U ∖ M | 安全格全集(含雾格、含 R₀ 格、含不可达格) | -| rem(σ) | int | [0, \|S\|] | rem₀ = \|S ∖ R₀\|;rem=0 即 cleared 路径 | - -- Output Range:cleared ∈ bool。Example:10×10 板、|S|=88、R₀=20 → rem₀=68;挖开末 1 安全格(chain_size=3 连锁)→ O ∩ S = S → cleared,A2 经 `last_round_end` 外发 (cleared, new_board)。 -- 求值点注:"批次 = 单一结算事务"指批次作为原子性单位,不改逐 dig 粒度,与 A3 `request_dig` 按次调用上报的契约一致。 - -### F2 变量域与验算 - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| c | 格 | U ∖ O | 挖掘目标(棋盘面合法性先行,规则 5) | -| O / O′ | 格集 | 见 F1 | 挖前/挖后已开集 | -| num(x) | int {0..8} | x ∈ S | 真实数字(非显示值——漂移风险见 design 实现期红线①) | -| chain_size | int | [0, \|S\|−1] | A3 request_dig 第一参数 | -| clears_map | bool | —— | 第二参数;≡ F1 cleared | - -- Output Range:chain_size=0 ⟺ c 非 0 格或其安全邻已全开。Example:b_chain 板挖 (3,6)(0 格)→ 级联 13 格一次开尽墙下封闭区(雷墙与板底之间的口袋形安全区,下称"封闭区"),chain_size=13、clears_map 视余量而定;全程 ap 只扣首格 1。 -- 同构主张范围 = 算子①本身(A2 无算子②推导项,不主张 O = R∞);同构域 = G=∅ 域(A1 生成期与 A2 install/初始展开时旗集恒空,`S ∖ G = S`);双包含回验不受影响——回验只在 install 时点发生,彼时 G = ∅。 - -### F3 变量域与验算 - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| B3 | 格集 \|B3\|=9 | ⊆ U | 出生 3×3(产物携带);小人出生 = B3 中心格 | -| R₀ = O₀ | 格集 | B3 ⊆ R₀ ⊆ S | 初始展开域;下界 9(无 0 格传播时) | - -- Output Range:|R₀| ∈ [9, |S|−1](上端点被不变式④排除)。域非空前提:非空 ⟺ |S| ≥ 10——|S| = 9 的板必有 S = B3 ⇒ R₀ = S,由不变式④在 install 拒绝(EC1 同族),不产生运行态 R₀;现行 A1 参数域(W,H ≥ 8)下 |S| ≤ 9 仅程序构造板可达。 -- Example:b_spawn 板(7×7、竖墙雷 6 枚):R₀ = x≥2 全安全格 35 格,臂① R₀ ⊆ 排除域(35 + 域外安全 8 + 环内雷)✓、臂② 测试侧朴素 BFS 重算逐格恰等 ✓。 -- 义务来源分开陈述:臂①给"不触变异"保证(经排除域);"不触雷"由性质 1 独立给出(环内可有雷)。 - -### F4 变量域与验算 - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| ⟨I₁,…,Iₙ⟩ | 意图序列 | n ≥ 1 | 到达序;∈ {dig, flag_place, flag_pull, move, stop} | -| class(I) | enum 三类 | —— | 排序类别(批次初态求值) | -| ω | 意图 ∪ {∅} | —— | 胜者;∅ = 轮次继续 | - -- Output Range:(path_tag ∪ {无}, continuation_hint ∪ {无}, RAP 增量, 每意图 ∈ {执行, voided, 拒绝})。Example:ap=3、rem=1、批次 [stop, dig(末格)]:C_dig 先结算 → try_spend true、ap 3→2、事务内 cleared 胜出 → 外发 (cleared, new_board)、RAP+0;stop voided。到达序翻转结果逐项相同(真值表 #1/#2)。 -- 胜者出口映射键控细节:dig 胜 ∧ 结算时点 clears_map=true → (cleared, new_board)、RAP += 0(剩余 AP 清零,A3 Rule 5)——C_dig 胜者恒满足;非清 C_other dig 可因前序 C_other dig 执行变清图,按结算时点真值入此行。C_stop 胜 → 先发 flag_judged ×N(基线 = 事务开始旗位,停手不改旗)→ 委托 A3.request_stop() → (stopped, same_board)、RAP += remaining_ap(1:1)。耗尽 AP 的 C_other → (ap_exhausted, same_board)、RAP += 0(不变式 remaining=0)。 - -### 夹具登记常数记录 - -- spawn 坐标为新增登记项——b_chain/b_fog = (3,2);按默认"板中心"读法该两板 B3 = {2..4}² 会含 y=4 雷墙雷、违反不变式①、板不可安装(已修正,复核义务见 OQ3)。 - -## 已裁决设计争议(速查) - -| 争议 | 裁决 | 要点 | -|---|---|---| -| GD-1 连锁是否越旗 | 不越旗 | 传播集 `∖ G` 是集合减法非分支;旗 = 1 AP 链阻断器(经典 flood 惯例);G=∅ 域与 A1 算子①同构不变 | -| GD-2 挖雷后果 | 事实上报 + 可通行(有价捷径) | 1 AP + 敌方优势计价;A1 clearable 闸拦截"被迫挖雷"板;工程债登记 | -| UX-1 拒绝原因形态 | sub_reason 封闭枚举 | 批前免费窗口定稿;registry a2_event_surface.api_surface 已同步 | -| 到达序无关性范围 | 收窄 | (path_tag, hint, AP/RAP) 全批域不变;划分序无关仅异类四组合;同类批内由稳定序决定 | -| 联合清图 vs 停手 | 停手让位清图高光 | C_stop ≺ C_other 的显式设计后果;单意图帧下生产面不可构造,AC-10 义务不豁免 | -| round_end 发射者 | 双发射源 | 棋盘路径 A2 发、stopped 路径 A3 直发、payload 同构;A2 禁双发 | -| 事件序 | flag_judged ×N 先于 round_end | 全收轮路径统一;停手不改旗位故基线等价 | -| 已引爆雷格 | 可通行 | 工程债(systems-index 门禁修正记录),AC-15 承载 | -| D1 义务范围 | ×1 → ×6 扩容 | stop 经 settle_batch / 格态可辨 / 悬停预承诺+chord 提示 / 雷格可读 / 路径呈现 / 单意图帧+voided+拒绝可感知 | -| 移动语义 | 瞬移 | 规则层一次事务落位;逐格动画归呈现层;路径序固定 8 邻行主序 | - -## 开放问题 - -| # | 悬案 | owner | 时机 | -|---|---|---|---| -| 1 | 标错惩罚(偏离登记——实测义务保留,不阻塞设计):候选 = 敌方伏击 +1(标错旗在轮末判定 hit=false 时为敌方追加 1 层伏击;量纲随 B2 ambush 定稿联动);兼任双重职责(A3 OQ2):误标税 + 停手轮/死 RAP 态下旗滥用的唯一价格;一致性推论(上线时生效,无特判):雾内旗恒受罚(A4 EC5)、判定载体 = design 件 `flag_judged.hit=false` 事实流(B1/B4 消费,A2 零改动);惩罚重复性裁决项(实测会话前钉死):hit=true 兑付有去重(每雷实例一次,B1 强制项③),hit=false 惩罚**无去重声明**——按现行轮末判定载体,忘拔的错旗默认每轮 +1 伏击(5 轮 = +5),与一次性收益严重不对称;候选 = 随旗实例去重 / 显式接受每轮累计("流血"设计),须在原型实测会话前落定,防实测数据混淆"一次性过重"与"累积过重";落地动作:原型 v3 补丁实测(可与 v3 终验合并会话)→ 实测支持则修订 design 件(判定批扩展)+ registry,否决则关闭 OQ 并在 A3 OQ2 另定价旗滥用;A2 /design-review 须核对本 OQ 在位,缺位即 blocking | 用户 + 原型小补丁会话 | 垂直切片前置 playtest 合并会话前 | -| 2 | 事件外发载体与捕获 API(实现期 ADR 确认项):signal vs 回调注册、事件捕获断言面的落地形态——依赖事件捕获列表的 THEN(AC-1/3/4/5/6/7–10/12/13/15–20 的事件序列断言)为纸面契约,ADR 未确认前该子集不视为可执行(A1 缺口 G1"度量独立入口"同型);返回值/诊断/静态扫描类断言(AC-1b/2/11/14/16/21/22 及各 AC 的 reject 分支)不在此限、现在即可执行 | 实现期 ADR | Technical Setup | -| 3 | 夹具登记常数第二人复核:各板(spawn 坐标、R₀ 成员集/级联集/digit)手工推导记录入版本库后安排复核——推导错误即假失配/假通过(A1 OQ5 同型);spawn 坐标为新增登记项(b_chain/b_fog=(3,2)——默认中心读法产出不变式①违例板) | A2 /design-review | A2 评审 | -| 4 | A5 探测道具接口预留:显影(未开雾格数字显影)对 A2 查询面的需求形态——接口归 A5 GDD 定稿,design 件不预写(见 design 件依赖 A5 行) | A5 | 第 11 位 | -| 5 | D1 输入接线确认:stop 意图经 `settle_batch` 提交的接线义务(D1 强制项①)与单帧多意图的真实构造性——单意图帧输入收集已升格为 D1 强制项⑥登记约束(stop 点击终结当帧收集或等效;若 D1 保证单意图帧,四组合仲裁退化为结构不可构造——义务仍由 AC-10 冒烟承载、不豁免) | D1 | 第 10 位 | -| 6 | 拔旗价目与旗滥用观测联动:`flag_pull_ap_cost` 复核与"停手轮旗动作占比"指标的 A2 侧观测量(旗动作批占比)——A2 零改动,遥测口径随 A3 复核会话对齐 | A3 OQ2/OQ3 | 低优先 | - -## 附录 A:义务台账与审计记录(历史审计,活契约见 design 件依赖与输出节) - -### 门禁义务落位表(门禁评审逐项核对用映射,缺项即 blocking;义务本体在 design 件) - -| 编号 | 义务 | 来源 | 承载位置 | -|---|---|---|---| -| 1 | A2×4 ① EC4 连锁开雾格(无数字+级联停止+计入清图+奖励入库) | A4 | 规则 6 + EC4 → AC-6 | -| 2 | A2×4 ② EC5 雾内旗恒不中(含标错惩罚一致性推论) | A4 | 规则 8 + EC5 → AC-12 | -| 3 | A2×4 ③ 开格上报携带变体标记 | A4 | 规则 2 + F2 注 → AC-6/18/20 | -| 4 | A2×4 ④ EC8 生成期变异快照抗表重载 | A4 | 规则 3 + EC8 → AC-18 | -| 5 | 双包含臂① A2 展开域 ⊆ A1 排除域 | A1 | 规则 4 + F3 → AC-3 | -| 6 | 双包含臂② A1 求解器初始态 ⊆ A2 展开域(恰等,回退口径不触发) | A1 | 规则 4 + F3 → AC-3 | -| 7 | 初始展开定义落点(免费/计入清图/无奖励) | A3 EC5 委派 | 规则 4 → AC-1 | -| 8 | round_end 棋盘路径外发 + payload 同构 | A3 Rule 9 | 规则 2/10 → AC-7/8/9 | -| 9 | EC4 批次四组合仲裁 + RAP 随胜者 | A3 EC4 deferral | 规则 9 + F4 + EC6 → AC-10 | -| 10 | 已引爆雷格可通行(工程债) | systems-index 门禁修正记录 | 规则 11 + EC10 → AC-15 | -| 11 | 标错惩罚以 OQ 登记(实测义务保留,不阻塞设计) | systems-index 偏离登记 | OQ1(/design-review 核对在位) | - -### 双向一致性核对(定稿时点审计) - -A2 ← A1, A3, A4 ✅(索引依赖分层)· B4 ← A2,B3,D2 ✅ · D1 ← A2,A3,B1 ✅ · D4 ← A2,B1 ✅ · D5 ← A2,A3,B1 ✅ · A5 ← A2,A4,B4 ✅ · D2 表"A2 无直接依赖" ✅——无单向遗漏。 - -### 定稿复核注记 - -lean 门禁下 systems-designer 起草 Formulas(F1–F4 + 反例 B 阻断缺口)、qa-lead 起草/验证 AC(23 条 + 覆盖矩阵 + 夹具坐标规格);creative-director 的体验锚点情绪定位与 art-director 的呈现一致性未经咨询——生产前人工复核(art-bible §1–4 须在 D1 GDD 前创建)。 - -## 附录 B:去向映射(零丢失可审计证据) - -| 原文节/表 | 落点 | -|---|---| -| 头部块(状态/版本/承载支柱/层级/一句话) | design 头部块 | -| 头部复核注记(起草分工 + CD/art-director 未咨询) | 本文附录 A「定稿复核注记」 | -| 速览表·定位行 | design 设计目的 + 依赖与输出引言(TD-SYSTEM-BOUNDARY 回边/瓶颈系统) | -| 速览表·拥有/不拥有行 | design 系统范围(负责/不负责) | -| 速览表·上游输入/下游输出行 | design 依赖与输出双向表 | -| 速览表·硬约束行 | design 规则 1(四零禁令 + headless 可驱动) | -| 术语表(8 条) | design 事件面与枚举·术语表 | -| 体验锚点表 + 反向护栏 | design 设计目的(4 条承诺 + 护栏);论证与参考感受 → 本文问题 1/问题 6 | -| 全局流程·装板与挖掘期字符画 | design 核心循环 | -| 全局流程·批次结算字符画 | design 批次结算与收轮 | -| 全局流程·出口分发表 | design 核心循环·出口分发表 | -| 规则 1/2(含三事件回边表) | design 事件面与枚举(规则 1/2 + 三事件回边表) | -| 规则 3/4 | design 棋盘状态·装板与初始展开(规则 3/4) | -| 规则 5/6/7/8/11/12(含旗价目表) | design 动作规则(规则 5/6/7/8/11/12 + 旗价目表) | -| 规则 9/10(含批次类别表 + 四组合真值表) | design 批次结算与收轮 | -| 枚举节 5 表(字段值/三源拒绝/sub_reason/装板违例诊断/API 面) | design 事件面与枚举 | -| F1–F4 结论/公式/Variables/Output Range/Example | design 行为契约节(Example 验算数据 design 与本文数值锚定节双录) | -| F1–F4 推导论证(同构论证/增量引理/双包含证明/反例检验/无关性收窄/让位条款论证/域非空推导) | 本文问题 2/3/4 + 数值锚定与验算记录 | -| 显式排除声明(归属表) | design 行为契约·显式排除声明 | -| 实现期红线 ×6 | design 行为契约·实现期红线 | -| 状态节(板态/矩阵/四不变式/补充不变式) | design 棋盘状态·装板与初始展开 | -| 边界情况 EC1–EC17 | design 边界情况表;EC1 反例 B 详述 → 本文问题 3 | -| 依赖节·上游/下游表 | design 依赖与输出双向表 | -| B1 强制项 ×3 / D1 强制项 ×6 | design 依赖与输出(同名两表) | -| 门禁义务落位表 ×11 / 双向一致性核对 | 本文附录 A(审计映射;义务本体散见 design 各节) | -| 跨 GDD 新登记义务汇总(A1-1/A1-2/B1×3/D1×6/B1/B4×2) | design 依赖与输出·跨 GDD 新登记义务汇总 | -| 呈现与 UI 契约 ×14 | design 依赖与输出·呈现与数据供给契约 | -| Tuning Knobs | design 调参表 | -| 验收标准·测试口径/夹具板清单/AC×23/覆盖矩阵 | design 验收标准(编号不动) | -| 验收标准·out-of-scope deferral | design P1 / P2 后置表 | -| 开放悬案 OQ1–OQ6 | 本文开放问题(编号不动) | -| 版本历史 ×3 行 | design 版本历史(原样保留 + 追加 v2.0 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/a3-action-economy.md b/design/archive/gdd-2026-09-14/analysis/a3-action-economy.md deleted file mode 100644 index d7a065fa..00000000 --- a/design/archive/gdd-2026-09-14/analysis/a3-action-economy.md +++ /dev/null @@ -1,191 +0,0 @@ -# A3 行动经济 设计推演 - -> 状态:concluded · 本文只装"为什么"——design.md 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 源件:本文由 `design/gdd/legacy-2026-09-14-v1/a3-action-economy.md`(v1.0-lean 全文,2026-09-13)按两件套 v2 标准迁移——公式推导过程、数值锚定论证、候选方案取舍、体验锚点论证、已裁决的设计争议全部收编于此;design 件只收结论。 - -## 问题:收益为什么以战斗效果直兑,而不是折算成抽象资源点? - -### 广度分析 - -- 候选 A:抽象资源点 + 折算乘数(迁移前旧案)——停手剩余 AP ×2 折算战斗收入(stop_multiplier)、清图剩余 AP ×1 折算(clear_multiplier)、F1 持有折算公式,另有 F2 挖/停/清激励不等式。收益:扫雷产出与战斗数值可直接对话,结算侧自由度大。代价:多一层抽象当量与折算率要维护,扫雷收益与战斗效果两层皮,对账链路长。 -- 候选 B:战斗效果直兑(现行)——安全格→主角 buff、标中旗→怪物 debuff、踩雷→敌方增益、清图发奖励,直接进轮次结算明细;无抽象点数、无乘数,折算公式根本不存在。收益:账本语义单一(A3 只记账 AP/RAP)、收益来源在明细里逐项可见。代价:收益"当量"的统一标尺必须由对账契约兜底——即 F1 五条款 + B1 效果档位对照表。 -- 候选 C:旗带口袋/背包实物双态(旧案)——旗作为可携带资源储蓄。收益:旗可攒、可转移。代价:与"标中旗当轮结算"冲突,滋生囤积与重插套利,稀缺性语义模糊。 - -### 深度分析 - -- 旧折算案被 2026-09-07 三轮评审整体击穿:F2(挖/停/清激励不等式)被发现两条数学缺陷——博弈树错误、缺风险项——裁决是"不再修复而是移除病灶",原 F1 折算公式与 F2 整体作废,改写为五条款并钉死 B1 闭合 owner。 -- 同日用户拍板的配套结构:停手改 1:1 转存 RAP(×2 与 stop_multiplier 删除)、清图剩余 AP 作废(×1 与 clear_multiplier 删除)、旗子单态(口袋旗双态删除,数量无上限,稀缺性由 AP 机会成本承载)、标中旗兑付资格以雷格实例为键(拔旗重插同一雷格不恢复已消费资格——堵死每轮 2 AP 的重插农场)。 -- 直兑案的对账代价可控:效果侧只需一张效果档位对照表(条款 1)与两条锚(条款 2/3/5),全部登记为 B1 GDD 验收项/强制检查点(systems-index 门禁 ①–⑤);playtest 复核归 OQ3,当量归一归 OQ1。 -- round_end 消息因此可以做到零折算数值:进结算明细的收益全部是具体战斗效果,来源归因标注由 B1 承担(P2"规划的延迟兑现"依赖这份逐项可见性)。 - -### 综合判断 - -定论:全部扫雷收益以战斗效果直兑,无抽象点数、无折算乘数——折算公式不存在;旗为棋盘单态标记、兑付资格认雷不认旗;对账由 F1 五条款约束效果侧(B1 闭合)。design 件「配置纪律与效果直兑」「旗与账本入口」「经济契约与数值」三节只保留该结论。 - -## 问题:四根支柱怎样落到机制承诺上?(体验锚点论证) - -### 广度分析 - -- P1 "我算对了"的节拍器,关键词"推理免费,兑现花 AP":候选落点 A——把推理本身计费;候选落点 B——推理免费、只对兑现收 AP(现行)。B 使取舍落点在构成选择(确定动作供给 >8 时先兑现哪些)与轮末尾巴(赌不确定格 vs 停手攒 RAP);供给 ≤8 时确定动作可近乎无代价延后(棋盘跨轮存续)。 -- P2 "规划的延迟兑现",关键词"收手换退出权":每个安全格的 buff 当场入库、结算明细可见(B1 归因标注);停手改产风险退出权——面对纯盲猜,攒 RAP 换一张新图是"我不赌"的体面出口。 -- P3 "风险与收益同源",关键词"承诺有重量":三向效果映射使同源原则具象——标中旗削弱敌人、踩雷强化敌人、挖安全格强化自己;旗无数量上限,稀缺性由 AP 机会成本承载;挖已插旗格须先拔旗(EC11)。 -- P4 "地牢氛围",关键词"边缘探索免费":小人移动免费、挖/旗限 8 向相邻——服务"边缘探索"的地牢感而非经济杠杆,移动成本不是调参对象;点击摩擦护栏归 A2/D1 观测(每消耗 1 AP ≤ 2 次点击)。 - -### 深度分析 - -- A3 是玩家 agency 的计量器:AP 不减少总点击量,而是把点击摊销进多个轮次并插入结算节拍;真正的决策压缩器是连锁展开(1 次点击兑现一片区域)与停手(放弃剩余格子换风险退出权)。执行归 A2、兑付归 B1、显示归 D1——A3 只做统一成本语言。 -- 8 向相邻限制约束的是当轮几何而非总量——跨轮小人可走遍全图;连锁富集区插旗成本放大、死 RAP 态碎片区趋零,条件性对冲归 OQ2(标错惩罚双重职责:误标税 + 停手轮/死 RAP 态下旗滥用的唯一价格)。 -- 预算把节奏从"点完为止"改为"每轮取舍";无 chord(双击快开)是有意偏离经典扫雷——保护"每格兑现都花 AP"的预算意义;正确标雷缺一键兑现节拍已登记 CD 创意风险 #3(与 #2 高光缺失合并归 B1/B4)。 -- 终局碎片区的零风险收尾可能跨轮完成,是节奏阀的有意代价;决策密度由 A1 供给兜底、监测归 OQ3。 - -### 综合判断 - -五条体验承诺(P1–P4 各落一句)进入 design 件「设计目的」;锚点到机制的映射以承诺句承载,论证与条件性对冲全部留在本节,不再进正文。 - -## 问题:价目为什么均匀 1 AP、移动与连锁免费、无 chord? - -### 广度分析 - -- 候选 A:差异化价目(按地形/动作分档)——收益:经济层次丰富;代价:MVP 阶段无实测支撑,调参面爆炸,规则无法一句话讲清。 -- 候选 B:均匀 1 AP(现行)——挖/插/拔同价,规则可一句话讲清;异质性钩子(地形成本修饰)为 A4 预留。 -- 移动收费 vs 免费:免费(冻结 0)服务 P4 边缘探索氛围;收费会把探索变成经济决策,与支柱定位矛盾。 -- 连锁收费 vs 免费:免费(冻结 0)——连锁是推理放大器,一次正确推断免费兑现成一整片区域,连锁开的格计入清图进度。 - -### 深度分析 - -- 数值全部有原型锚:AP=8 来自原型 v2 实测(12 点方案被否决);连锁免费为原型 v2 定稿;统一行动经济(挖/插/拔均限相邻、拔旗 1 AP 条文读法确认)为原型 v3 定稿;三向效果与清图奖励结构同批落位(game-concept 定稿)。 -- 无 chord 的取舍:经典扫雷双击快开会让"正确标雷"一键兑现整片,绕开逐格 AP 预算——预算的决策意义被架空;执行归 A2,A3 只负责"每格兑现都必须花 AP"的定价口径。 -- 拔旗 1 AP 的边界推论:挪旗 = 插+拔合计 2 AP,相对"直接改插他格"多耗的 1 AP 即"防免费重排"的有意代价(EC3/EC7);挖已插旗格须先拔旗(EC11)——旗是"别挖这里"的承诺标记,挖旗格合法化会催生零风险滥用。 - -### 综合判断 - -价目冻结为现行五行的结构性结论:三个 1 AP(knob)、两个 0(结构冻结);无 chord、限 8 向相邻;均匀价目为有意 MVP 简化。design 件「预算与价目」只留结论,原型实测史与本节取舍理由不再进正文。 - -## 问题:停手与刷新——RAP 为什么是"风险退出权"而不是收入,退化环健康吗? - -### 广度分析 - -- 候选 A:停手 ×2 折算战斗收入(旧案,已删除)——收益:停手直接变现成战力;代价:停手成为最优收入策略,鼓励早停,抽掉挖掘与清图动机。 -- 候选 B:1:1 转存 RAP、只许换新图(现行)——停手改产风险退出权:RAP 不折算、不兑付任何战斗收益,唯一花法是刷新雷图;停手因此是纯风险管理工具而非收入流。 -- 刷新时点候选:a) 结算编排期 Waiting 相位代理调用(D4 修订前);b) 挖掘期 Active 相位当场换图(现行,D4 修订)。b 使"发现图烂→立刻止损"的决策链最短,且刷新不终结轮次、无结算段。 - -### 深度分析 - -- RAP 基线节拍:rap_refresh_cost 默认 8 = ap_per_round——"满 AP 一轮停手 = 恰好一刷"是有意设计的基线节拍;每轮上限 2 次(refresh_cap_per_round 结构位)防连刷;旧板旗随旧板作废(零兑付、旗 AP 不返还)防"刷新前插满旗套利"。 -- EC6 诚实声明(形态限定版):① 纯停手零挖掘环(停→刷→停)零战斗进账,唯一代价是敌方每轮照常结算(时间税自惩)——该退化形态结构自惩成立;② 但理性玩家的真实风险环是"挖完全部确定格 → 不确定即停 → 攒满刷新":该环有真实战斗进账、零踩雷风险,刹车只有三个——清图奖励弃失(下界由 F1 条款 5 守住)、8 RAP 成本、时间税。本条不声称该环"病灶不存在",其健康性由 F1 条款 5(支配性不等式)+ OQ3 弃图率/完成度指标守门。 -- D4 修订的代价登记:挖掘期当场刷新无结算发生——原"敌方时间税自惩"半句失效,OQ3 弃图率/刷新率预警阈值联动复核。 -- 经济注记:刷新价格实际 = rap_refresh_cost + 每轮 2 次上限;挖掘期当场刷新无结算发生——敌方每轮照常结算的时间税不构成刷新本身的隐性成本。 - -### 综合判断 - -停手是纯风险管理工具、不是战斗收入流;RAP 战斗域生命周期(跨轮跨图保留、battle_over 清零、MVP 无上限);刷新决策前移挖掘期 + 每轮上限 2 次。design 件「RAP 池」节与 EC6 只留结论与指针,退化环诚实声明全文以本节为准。 - -## 问题:F1 推导论证与数值锚定——五条款与两条不等式如何得出? - -### 广度分析 - -- 条款 1 单一当量对照:候选 A 各收益源各自定档——对账自由度高,但分源改率即契约失效,跨来源无法比较;候选 B 单一换算表(现行)——B1 出效果档位对照表,1 最低档安全格 buff = ? 当量,debuff/清图奖励/敌方增益均对照归一。 -- 条款 2 标中旗锚:锚"严格大于最低档安全格 buff 当量"——否则插旗在最优情形下也只是打平,P3 旗循环经济空心。 -- 条款 3 挖掘风险不等式:P(安全) × V_safe_lb > P(雷) × V_mine_ub——两端分别锚定 A1 可推理率生成参数(P1 下限)与 B2 惩罚上限表值。 -- 条款 4 清图奖励 > 0;条款 5 清图 vs 弃图刷新支配性(C ≥ 弃图所节省的期望雷险当量 + Δ轮数 × 敌方结算强度当量)。 - -### 深度分析 - -- 条款 2 的对照基准须为连锁放大的边际挖掘收益(单 AP 平均挖掘当量,含连锁期望放大)——只对最低档比较会使旗理性萎缩到碎片区;每战标中旗总吞吐(N 旗 = N debuff)无单档上限可依恃,由 B1 按条款 1 对照表对账;插旗挤占清图进度的边际轮成本由 B4 定档时核算,或在其 GDD 声明 MVP 忽略并给理由。 -- 条款 3 是"可推理率"的经济侧验收形态(可判定谓词):P1 支柱要求 A1 可推理率使玩家能推高 P(安全)——本条款把这一体验要求转写成可验收的数学条件;B1 为单一闭合对账 owner(A1/B2 供给锚值,B1 签字验收)。 -- 条款 5 推导:若"推到底清图"期望当量 < "确定格挖完即弃图刷新",每图最优解退化为"捞完确定格就弃"——清图高光节拍、B4 差异化插槽、game-concept"图完成"循环全部空心。该环强度与 A1 可推理率反向耦合——可推理率越低(迷雾/终局 50/50 越多),弃图越优,玩家对 P1 失败的理性回应会反过来饿死清图内容;故本条款是 P1 失败模式的经济对冲,与条款 3 共同登记 B1 强制检查点。 -- 变量锚定来源:P(安全)/P(雷) ← A1 可推理率生成参数(P1 下限决定玩家可达上界);V_safe_lb ← B1 条款 1 效果档位对照表;V_mine_ub ← B2 惩罚上限表值(登记为 B2 GDD 验收项);C ← B4(条款 4 差异化插槽);Δ轮数 ← A1 雷密度/可推理率 × B1 结算强度。 -- 数值锚定(provisional,随下游表值刷新):条款 2 对照基准下限 1:1(单 AP 平均挖掘当量,含连锁期望放大),B4/B1 定稿校准;条款 3 目标带 = 原型临时值(伏击 +3 / 敌 18HP/4ATK)代默认表给出首版示例,随 B2 表回填刷新;条款 4 清图奖励 +10 临时锚(B4 插槽的 provisional 参考),量级归 B4;条款 5 +10 锚对默认 8 AP 图形况粗验通过,正式锚随 B4/B2/B1 表值定稿。 -- 域上界注记:dig/flag 上限 8、refresh 上限 64 为 MVP 量级护栏(非推导界),随调参需要修订。 - -### 综合判断 - -五条款、两条不等式、Variables 锚定表与 provisional 验算值全部保留在 design 件「经济契约与数值」节(公式本体不省);本节只装推导逻辑与锚定论证——为什么锚这些来源、不锚会坏在哪。 - -## 问题:调参影响与交互——knob 怎么动、怎么联动、哪里会软锁? - -### 广度分析 - -- 活 knob 五个:ap_per_round / dig_ap_cost / flag_place_ap_cost / flag_pull_ap_cost / rap_refresh_cost;结构冻结两个:move_ap_cost / chain_ap_cost = 0;结构位一个:refresh_cap_per_round(默认 2,provisional)。 -- 调参语义候选:单 knob 独立调(会破坏跨字段节拍与预警联动)vs 以比值/联动为单位调(现行纪律)。 - -### 深度分析 - -- knob 方向效应(原文 Tuning Knobs 调高/调低表全文迁移): - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| ap_per_round | 8 | 决策带宽膨胀、节奏拖长(原型 v1 的 12 已实测否决);双重身份:满停 RAP 转存随之增大(8→12 使满停一刷后的富余 +4) | "想清楚的事做不完",违反 P1 | -| dig_ap_cost | 1 | ——(>1 使"连锁免费"的相对收益畸变,未实测) | 0 = 无预算系统失效(schema 域 [1,8] 拒绝) | -| flag_place_ap_cost | 1 | 插旗迟疑,P3 标雷策略萎缩 | 插旗无成本,旗标记泛滥(棋盘噪音) | -| flag_pull_ap_cost | 1 | 挪旗昂贵,误标惩罚过重 | 挪旗近免费,承诺无重量(OQ2 复核落点) | -| rap_refresh_cost | 8 | 刷新太贵,风险退出权萎缩、盲猜局被迫赌(违反 P1 兜底) | 刷新近免费,图来回刷节奏拖沓;敌方时间税仍自惩但体验烦躁 | - -- Knob 交互:`rap_refresh_cost : ap_per_round` 比值 = "停几轮换一刷"(默认 1:1 = 满停即一刷;该节拍与 OQ3 纯停手预警同源,联动评估);`ap_per_round × 插旗占比` 与 A1 布雷密度共同决定标雷全周期可行性(A1 定稿后强制复核);效果侧健康(F1 五条款)无单一系统 knob 可控——对照表/闭合对账归 B1、惩罚上限归 B2、奖励分支归 B4(对账归 OQ1);刷新率应急阈值(OQ3)的评估须与 B2 结算强度联动,勿独立调参。 -- 软锁论证(跨字段校验的依据):dig=8 × ap=1 双双落在各自域内,会使挖掘永久不可用、cleared/ap_exhausted 双不可达(软锁循环)——属结构失效而非节奏差异,与"dig 域下限 1 = 零预算系统失效"同族;故跨字段校验(任一动作成本 ≤ ap_per_round)设为 ActionEconomyTable schema `validate()` 加载期致命(D2 Rule 6 fail-fast,无需新增 D2 校验通道),违规夹具登记为 D2 校验双通道条件性夹具(同悬空引用待遇)。 -- 已冻结项:AP 8 来自原型 v2 实测(12 点被否);移动/连锁 0 成本为结构冻结;RAP 1:1 转存与战斗域生命周期为结构(非 knob,修订走 GDD 流程;跨战斗携带 = OQ7 预留开关);旗数量无上限为结构。 - -### 综合判断 - -design 件「调参表」只留字段/域/默认/owner 与校验规则;方向效应、比值节拍、跨系统联动与软锁论证收敛于本节,任何 knob 修订前必读本节。 - -## 开放问题(原文编号保留,OQ1–OQ7) - -| # | 悬案 | owner | 要点 | -|---|---|---|---| -| 1 | 效果档位对照表与闭合对账 | B1(第 9 位) | 安全格 buff / 标中旗 debuff / 清图奖励 / 敌方增益的统一当量对照与换算由 B1 GDD 定稿,须满足 F1 五条款;B1 兼任条款 3(挖掘风险不等式)与条款 5(弃图支配性)的单一闭合对账 owner(A1/B2/B4 供给锚值,B1 签字验收),两项均登记 B1 GDD 强制检查点;每战标中旗总吞吐对账归本条;注意与 OQ6 清图奖励插槽区分 | -| 2 | 拔旗耗 AP 复核 + 标错惩罚双重职责 | A2 前原型小补丁(与标错惩罚实测合并会话) | 本 GDD 按"拔旗 1 AP、移除标记"定稿;复核改动现已有 knob 落点(`flag_pull_ap_cost`),若实测推翻则调 knob 并回写 registry。标错惩罚现承担双重职责:误标税 + 停手轮/死 RAP 态下旗滥用的唯一价格——RAP 无上限 + 满溢态使碎片区插旗机会成本趋零,"可疑格全插旗、永不拔"的滑向由本惩罚定价;OQ3"停手轮旗动作占比"指标联动观测 | -| 3 | playtest 预注册指标 | 垂直切片前置 playtest | 指标:弃图率 = refresh/(clear+refresh)(>30% 观察、>50% 干预——provisional 预注册);刷新时已开格完成度直方图(完成度 <60% 的刷新占比 >50% 即信号);停手轮旗动作占比(>50% 即信号——投机旗/死 RAP 态检测,联动 OQ2);确定动作供给 >8 的轮占比(P1 决策密度兜底监测,与 A1 密度联合验收);刷新率/战斗(>3 次即观察信号,阈值评估与 B2 结算强度联动,勿独立调参);纯停手轮占比(>20–30% 即观察信号);停手时机分布、每轮犹豫时长、终局碎片区(清图完成度 >80%)轮次数。失明声明:刷新率/纯停手占比/碎片区轮次三项对"挖完全部确定格→停→刷"环结构性失明——该环停手轮先挖后停(非纯停手)、温和变体刷新率低、开到 >80% 即弃使碎片区读数反而变低(病态呈现为健康);故增弃图率/完成度直方图/停手轮旗占比前三项直测该环。应急方案(触发后启动):`rap_refresh_cost` 调参 / 刷新冷却(连续刷新须间隔 N 轮)/ 刷新新图保留已开格结构(重议级) | -| 4 | AP 耗尽的软提示 | D5(低优先) | 本 GDD 定"AP=0 即收轮";教学若发现新手困惑,加提示不改规则;可扩展覆盖"RAP 达标刷新引导"与"RAP 战斗末清零提示"(D1 清零反馈的对应教学条目) | -| 5 | 标中旗兑付语义细化 | B4/B1(A3 硬约束已定稿) | 标中旗 = 怪物 debuff(三向效果定稿);硬约束:兑付一次性、当轮结算、兑付资格以雷格实例为键(每雷本次战斗至多兑付一次,资格随首次兑付消费;放置实例仅为当轮结算载体)、拔旗重插同一雷格不恢复已消费资格(堵重插农场)、禁止逐轮重复兑付;换图后新雷为新实例;档位锚见 F1 条款 2(严格 > 最低档 + 连锁放大边际基准 + 总吞吐对账);标错惩罚归 game-concept 待定问题(OQ2 合并会话,双重职责见 OQ2) | -| 6 | 清图奖励差异化插槽 | B4(结构位预留 + A1 上下文) | 清图奖励未来按图类型(biome/tag)分支——B4 奖励表 schema 须预留图类型维度的结构位;A3 只上报 `cleared`,图上下文经 B1 传递、不经 A3;约束:图类型上下文在战斗域内恒定(biome 挂关卡层、不逐图重掷)——否则 `request_refresh` 退化为 biome 重掷钓鱼口;该约束登记 A1/B4 共同验收 | -| 7 | RAP 跨战斗生命周期开关 | 垂直切片 knob 复核 | MVP 每场战斗清零;若实测支持跨战斗存蓄(Boss 图连刷策略),须修订 RAP 池规则/EC12 + 登记 D3 持久化归属与 C2 冒险域语义 | - -## 附录 A:对账义务台账已履行行(历史审计) - -原文对账义务登记表中已完成的 #1–3 行移此存档;活契约 #4–9 在 design 件「依赖与输出」节。 - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| 1 | ActionEconomyTable 首轮回填——值侧四项 + registry 登记 | D2 | 已完成 | -| 2 | schema 全字段交付(十字段,含 move/chain 冻结字段) | D2 | 已完成 | -| 3 | RAP 结构 delta——四字段删除(flags_per_round / flag_unit_cost / stop_multiplier / clear_multiplier)+ `rap_refresh_cost` 新增;D2 Core Rules 表行/Status 行、AC-7 示例值、registry 同步回写 | D2 | 已完成 | - -## 附录 B:去向映射(零丢失审计) - -原文 = `design/gdd/legacy-2026-09-14-v1/a3-action-economy.md`(v1.0-lean 全文)。逐节/逐表落点如下: - -| 原文节 / 表 | 落点 | -|---|---| -| 头部(状态/版本/支柱/层级/一句话) | design 头部(结论);数值继承史 → 版本历史 v1 行 | -| 速览表(定位/拥有/不拥有/上游/下游/硬约束) | design 设计目的 + 系统范围 + 依赖与输出 + 各规则(事实并表承载);agency 计量器定位段 → 本文「体验锚点论证」深度分析 | -| 体验锚点表(P1–P4)+ 参考感受行 | design 设计目的承诺 1–5(结论);论证全文 + CD 创意风险 #3 → 本文「体验锚点论证」 | -| 全局流程·轮次生命周期字符画 | design 核心循环(原样保留) | -| 出口分发表 | design 核心循环·出口分发(原样保留) | -| 规则 1(AP 重置)+ 举证 | design 核心规则·预算与价目 规则 1 | -| 规则 2(价目)+ 举证 + 统一价目表 | design 预算与价目 规则 2 + 价目表;原型 v2/v3 实测史与 chord 取舍 → 本文「价目为什么均匀」 | -| 规则 3(仲裁)+ 同时成立仲裁表 | design 轮次结束与仲裁 规则 1 + 仲裁表(原样) | -| 规则 4(停手)+ 举证 | design 轮次结束与仲裁 规则 2 + RAP 池·停手与挖掘期刷新对照表;退化环分析 → 本文「停手与刷新」 | -| 规则 5(清图)+ 举证 | design 轮次结束与仲裁 规则 3 | -| 规则 6(round_end 消息)+ 消息与权威回发表 | design 轮次结束与仲裁 规则 4 + 枚举表 same_board/new_board 行 + 状态机 Waiting 行(原表三行事实全数并表承载) | -| 规则 7(配置纪律)+ 举证 | design 配置纪律与效果直兑 规则 1 + 调参表 | -| 规则 8(旗)+ 兑付硬约束表 | design 旗与账本入口 规则 1 + 标中旗兑付硬约束表(原样);定稿依据 → OQ5(本文开放问题) | -| 规则 9(账本入口)+ 发射源表 | design 旗与账本入口 规则 2 + round_end 合法发射源表(原样) | -| 规则 10(效果直兑)+ 举证 | design 配置纪律与效果直兑 规则 2 + 经济契约与数值节 | -| 规则 11(RAP 池)+ RAP 池规则表 + 停手刷新对照表 | design RAP 池 规则 1 + RAP 池细则表 + 对照表(原样);经济注记论证 → 本文「停手与刷新」 | -| 枚举表(path_tag/信号/动作/相位) | design 枚举与对外 API(原样) | -| 对外 API 面表 | design 枚举与对外 API(原样) | -| 数值结论与推导:F1 结论 + 五条款表 | design 经济契约与数值(结论 + 五条款表,条款 2/3/5 论证尾句 → 本文「F1 推导论证与数值锚定」) | -| 公式代码块(条款 3/5)+ Variables 表 + 验算项表 | design 公式与验算(原样保留) | -| 状态机表 + 不变式 + 输入×相位矩阵 | design 状态机(原样) | -| 边界情况表 EC1–EC15 | design 边界情况(编号与行为保留;依据列由 v1 全局规则号改指 v2 章节名;EC6 诚实声明全文 → 本文「停手与刷新」深度分析) | -| 依赖上游表 + 下游表 | design 依赖与输出(双向并表) | -| 对账义务登记表 #1–3(已完成) | 本文附录 A | -| 对账义务登记表 #4–9(活契约) | design 依赖与输出(原样) | -| 呈现与 UI 契约表(8 条) | design 呈现与 UI 契约(原样) | -| Tuning Knobs schema 表 + 跨字段校验 + 域上界注记 | design 调参表(原样;软锁论证 → 本文「调参影响与交互」) | -| knob 调高/调低表 + knob 交互 + 已冻结项 | 本文「调参影响与交互」(深度分析全文迁移) | -| 验收标准·测试口径表 + AC 全表(22 条) | design 验收标准(编号不变;AC-6/AC-15 与矩阵内 v1 "Rule N" 字样改指现行章节名) | -| 开放悬案表 OQ1–OQ7 | 本文开放问题(编号与全文保留) | -| 版本历史(4 行) | design 版本历史(全行保留 + v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/a4-terrain-variation.md b/design/archive/gdd-2026-09-14/analysis/a4-terrain-variation.md deleted file mode 100644 index 87f13f2d..00000000 --- a/design/archive/gdd-2026-09-14/analysis/a4-terrain-variation.md +++ /dev/null @@ -1,160 +0,0 @@ -# A4 地形变异 设计推演 - -> 状态:concluded · 本文只装"为什么"——design 件只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 来源注记:本文由 a4-terrain-variation.md v1.0-lean(2026-09-13 定稿)按两件套 v2 标准迁移生成——原文的公式推导论证、数值锚定论证、候选方案取舍、体验锚点论证与已裁决争议集中于此;规则(Rule)/边界(EC)/验收(AC)/义务/开放问题(OQ)编号与原文一致,零规则变更。 - -## 问题 1:变异为什么是"配置表一行声明 + 零专属代码",而不是每种变异一套专属逻辑? - -### 广度分析 - -- 候选 A:每种变异一个硬编码类/分支——实现直观;但每加一个变异都要改连锁/清图/结算代码,行为组合指数膨胀,"如果是雾格就……"分支必然渗入 A2 热路径。 -- 候选 B:数据驱动框架——变异是 VariationTable 一行四声明(身份/信息规则/布置约束/作用域),行为改变发生在"信息规则 × 既有系统行为"交集里,框架自身零运行时逻辑;加变异 = 加数据行。 -- 候选 C:变异做成地形类型 / 地形成本修饰——与 A3 价目钩子耦合,启用须回 A3 重议 per-cell 成本接口;MVP 明确搁置(A3"地形成本修饰"钩子挂起)。 - -### 深度分析 - -零特判(Rule 4)能成立的先决条件是构造性的:布置约束(Rule 3)保证雾里没雷、没 0 格,于是连锁不传播、数字恒真、旗恒不中——既有系统的"无视"不需要任何补丁,雾格能被"无视"靠的正是这条布置约束。框架的自洽性还要防未来行击穿:跨字段校验 hide_numbers⇒safe_nonzero 的存在理由是"级联止于雾格"是 safe_nonzero 的寄生结论而非 hide_numbers 的本性——若无此校验,未来 hide_numbers + any 行会静默击穿 EC4(连锁不再止于雾格)。 - -### 综合判断 - -采纳候选 B(Rule 1/8)。扩展纪律两条:需要新规则字段时走 D2 接口漂移规则同步回写本 GDD 与 D2,禁止表外私加字段(Rule 9);scope=global 只保证枚举位存在、不预写语义(归 C3)——语义未定稿前 global 行只触发 warning 不致命(枚举域内合法数据、运行期无消费者故无行为),C3 定稿语义并落地前不得移除该 warning。 - -## 问题 2:迷雾的切面为什么是"信息剥夺 + 结构补偿 + 零特判"?清图判定为什么必须含雾格? - -### 广度分析 - -- 候选 A:清图判定豁免雾格(雾当可绕过的支线)——经裁决否决(rev1 blocking ②):违反零特判承重规则,且会把"绕开走"变成虚假自由。 -- 候选 B:雾 = 清图必经段 + 剥夺数字 + 无补偿——纯负体验税(纯 AP 税),触发反向护栏(被骗感)。 -- 候选 C:雾 = 清图必经段 + 剥夺数字 + 结构补偿(雾形携带雷簇位置)+ "绕开走"的真实形态 = A3 停手/弃图风险退出——现行。 - -### 深度分析 - -藏的账目只有一样:未开雾格的数字(Rule 5)。补偿不是发放的奖励而是结构送的:每个雾格必邻区外雷、k 格雾区外环必含 ≥⌈k/8⌉ 雷、雾边雷候选域收缩——"雾边 = 推理锚"。rev1 blocking ① 曾发现可推理率对账公理自相矛盾 + Rule 5 被单向建模(只算寂静减项),改判双向净效应、禁单向补偿,义务形式为 BoardGenTable 域内可判定谓词、落 A1 生成端。玩家幻想同步改诚实版(原"三选项"失实):雾是清图必经段、绕开 = A3 风险退出、买情报标注 A5 期;P3 从"雷险载体"降格为"信息切面"——雷险维度由岩浆/冰冻承接(垂直切片起)。 - -### 综合判断 - -采纳候选 C。"跨雾推理"措辞降调为"常规推理在雾边的延伸、非独立机制"(rev1 顺带修订)——防止被读成第二套推理系统,其体验内核是"隔着雾也算出来了":被雾边已知约束放大的常规推理;进雾每一步是承诺而非计算,与情绪锚点(问题 6)一致。信息剥夺边界(藏数字 / 不藏边界 / 不藏已开格信息 / 不藏奖励入库)是玩家信任的账面:多藏一样就违反 P1 诚实边界,少藏一样就失去变异意义。 - -## 问题 3:承重数学怎么推导?厚度度量为什么钉死"3×3 窗口谓词"?F1 为什么是集合谓词? - -### 广度分析 - -- 厚度度量候选:"直线连续行程 ≤2"(直觉读法)vs"任意 3×3 窗口非全雾"(可判定谓词)——反例:宽 3 对角雾带无任何全雾 3×3 窗、完全合法,按行程读法会误拒合法构型,故钉死窗口谓词。 -- 面积上界候选:全局拍一个占比上限 vs 从布置约束推导必要上界 f ≤ 8×雷密度——后者给出与雷密度联动、可判定的参数域硬边界。 -- 外环雷候选:不论证(雾只是盲区)vs 证明 ⌈k/8⌉ 下界——后者是"雾边 = 推理锚"与"禁单向建模"的数学根据。 - -### 深度分析 - -推导三步(公式本体保留于 design 承重数学节):非 0 安全格 ⇔ 8 邻域含 ≥1 雷且雷不可能为雾格 ⇒ 每个雾格 x 存在非雾雷邻居 m ∈ N₈(x)。由此:① 3×3 全雾窗口的中心格 8 邻全雾 ⇒ 8 邻无雷 ⇒ 中心为 0 格,与约束矛盾 ⇒ 任意 3×3 窗口非全雾 ⟺ 厚度 ≤2(雾区恒为雷集切比雪夫 1-膨胀出的边界带);② 每雾格 ≥1 雷邻居、每雷至多作 8 个雾邻格的见证 ⇒ f ≤ 8×|M|;③ k 格雾区外环承载全部见证、外环每格至多邻 8 个雾格 ⇒ |外环雷| ≥ ⌈k/8⌉。F1 取集合谓词形式:unlock_level 直接整数比较——它是定义表列、非进度表行键,无 D2 R1 floor 解析;biome_tag 空集 = 通配;空池合法是设计态(level 1 静默普通图),不是错误态。 - -### 综合判断 - -窗口谓词为唯一判定口径(登记 A1 验收⑫);f ≤ 8d 为参数域必要上界、EC10 参数域拒绝与之联动;⌈k/8⌉ 支撑 Rule 5 增益侧与验收④"禁单向建模"。预算侧同理只做可判定谓词:雾占比上限 × 可推理率下限联动不等式(EC10)。 - -## 问题 4:雾格成本为什么是两态?预算为什么是"增量构成"?条款 5 对账为什么是三腿入账而非"消解"? - -### 广度分析 - -- 成本候选 A:雾格全部全价——半假(rev1 blocking ③):链可达雾格经邻接 0 格连锁免费开出(EC4),全价口径系统性高估雾成本;但高估方向是预算安全侧(level-designer 评审发现),故作为玩家侧保守启发式保留教学价值(见问题 6)。 -- 成本候选 B:两态口径(链可达免费 / 链不可达全价 dig_ap_cost)——现行。 -- 预算候选:早期版本用"≤ 轮数上限 × ap_per_round"不等式——"轮数上限"在 A3 契约无定义、恒真空转,废弃;改增量构成:雾致预算增量 = 链不可达雾格数 × dig_ap_cost(量纲闭合:格 × AP/格),设计期聚合核算、违例动作 = 修正参数(非逐板运行期强制)。 - -### 深度分析 - -A3 F1 条款 5(清图 vs 弃图支配性)对账:雷险腿消解(雾区无雷、不产生 50/50 赌雷——"消解"声称仅对此腿成立);信息腿双向(雾边寂静减少推理原料推高弃图 × 雾边推理锚增益方向相反——净效应实测、非定理:"50/50 减少可能反向利好清图"成立,"必然推高弃图"不采纳);AP 腿推高弃图(链不可达全价无连锁折扣,敌方结算时间税随之上行)。三腿入账 = 构成变化而非消解。护栏构造:若雾板下界抬升不设防,逐板奖励差分 × 最低雾出现率 × 8 RAP 刷新恰好构造 A3 OQ6 明令防的"弃图刷雾板"刷新钓鱼环——故 B1 闭合须雾板/无雾板两态分别验算支配性不等式(A3 provisional 验算只做过无雾图形况)+ 雾板净当量优势带上界 + 防钓鱼两条方向性护栏,playtest 弃图率/完成度指标雾板分层(回执 A3 OQ3——聚合指标会被雾板污染或反向掩盖)。 - -### 综合判断 - -两态 + 增量构成为唯一口径(registry fog_ap_note 同步登记);该增量对条款 5 仅是可行性输入、不提供雾成本显著性保证——局限如实登记。B4 三条定价硬约束是"里面有价值"契约的兜底(两条防税下界 + 一条防福利上界):level 2 首发关小图低密、链免开占比结构性最高,"链免开 + 锚上浮"双白拿的福利板化与"雾 = 免费奖励"先验(后者会在后期雾变厚、全价残段出现时恰触发被骗感护栏)必须同时防;①是反淹没下界、不保证 per-AP 平价(per-AP 检查归 B1/B4 对账);②上浮口径 = 链不可达雾格数 × dig_ap_cost、与定价成本同分母(防原"雾面积"分母脱钩),上浮形态须为关卡层常量或受防钓鱼不等式约束。 - -## 问题 5:出生区排除为什么取保守上界?雾区邻接出生区为什么合法? - -### 广度分析 - -- 候选 A:按 A2 运行期展开定义精确排除——原稿曾预设 A2 未定义的 flood-fill 传播行为(rev1 blocking ⑤),越权定义他系统行为,被否。 -- 候选 B:生成期确定性计算保守上界:出生 3×3 经 0 格连锁 flood 闭包再外扩 1 格——任意 A2 展开定义的超集,只大不小——现行。 -- 候选 C:只排出生 3×3 本体——"开局预开雾格"与"开局即瞎"风险残留。 - -### 深度分析 - -保守上界把 Rule 7 与 A2 的展开定义解耦:初始展开是否 flood-fill 传播归 A2 定稿、A4 不预设——无论 A2 最终如何定义展开,开局都不可能预开雾格(EC3 邻接合法的"无害化"论证:约束谓词 = 出生 3×3 格集及其生成期可计算的初始展开可达域内无变异格,邻接本身不构成违反)。代价是至多多排除一圈格,布置侧可忽略。A2 侧保留回验义务:挖掘侧实际展开域 ⊆ 生成侧排除域——"构造上不可能"仅在超集关系下成立。叠加"初始展开无奖励"(定稿口径,优先于连锁入库语义)构成双保险。 - -### 综合判断 - -采纳候选 B。防御目标两个(开局即瞎 / 开局预开雾格),用超集排除 + 无奖励双保险一次覆盖,且不欠 A2 任何行为定义债——正确性收益是构造性的,灵活性成本为零。 - -## 问题 6:情绪锚点为什么是"权衡感"?呈现与教学为什么这样分工? - -### 广度分析 - -- 情绪候选:惊喜/惊吓(开雾出怪、随机惩罚)vs 权衡感(看得见边界的承诺)——后者唯一同时满足 P1 诚实(不骗)与 P2 规划(可预期)。 -- 教学落点候选:D5 教学系统承 ALL vs D1 界面承 MVP 静态传达——D5 里程碑在 Alpha,雾在 MVP level 2 即首遇;对比 A1×15/A2×4,"雾区无雷"知识此前零验收落点 → D1 是 MVP 唯一活载体(D1 MVP 验收两条 + 必含要点枚举由此而来)。 -- 视觉候选:仅色相区分(原型紫)vs 形状+颜色双通道 + biome 调色板交换——前者色弱不可辨、新 biome 要新增雾资产。 - -### 深度分析 - -情绪目标:站在洞口前的权衡感——迷雾不制造惊喜或惊吓,它制造一个看得见边界的承诺:"里面有价值,进去的代价是 AP 溢价与放弃雾格数字这份推理原料"(玩家每轮都在看见并应对变异——直接感知)。参考感受:Into the Breach 的信息诚实(游戏从不用隐藏信息骗你——本作反其道而行,把"信息缺失本身"诚实标注);杀戮尖塔地图的路径承诺(看得见的未知,选定的风险)。 - -教学反直觉点:雾格成本两态不照实教——链可达性取决于未开 0 格的隐藏拓扑,玩家决策时点不可求值,明教两态反生免费期待、恰触发反向护栏的被骗感;故教玩家侧保守启发式:"雾格按全价做预算,连锁白开当惊喜"(与问题 4 全价假设的安全侧高估同源)。首遇提示触发谓词取"首个实际含雾格的板进入可操作状态(挖掘阶段开始)"——生成期一次查询即判定,免疫 EC2 降级板误触发与 EC3 贴脸雾 t=0 歧义(rev2 blocking ⑥:原谓词"雾格首次与已开区相邻"有缺陷——贴脸雾 t=0 即真、远雾图滞后);"一次性"作用域 = 每 run 一次(MVP 无持久化设施,存档级"一生一次"归 Alpha D3/C4 后重议)。 - -已开雾格 tint 与视觉锚 3"不留雾残留遮蔽"的冲突口径:遮蔽禁的是遮挡数字/实体的雾残留,tint 是底色层标记不犯此条;tint 与完成信号转正与否归 OQ8(完成信号粒度 = 视觉合并域、禁实例级双响——EC11 合并呈现约束;0 格携带"八邻无雷"推理信息,与已开雾格的视觉混淆会污染推理,tint 为当前唯一区分手段)。AC-9 操作化三口径(防形容词验收):①形状通道 = 色板无关线稿资产 + 对全部底色的明度对比数值下限(阈值 art-bible 定、须存在);②新 biome 色板强制重跑样张清单;③样张须含最坏用例——宽度 1 雾带(每格即全边界,Rule 3 结构推论下的正常形态)、"旗 × 雾纹理 × 边界"三重叠加格、宽度 1 雾带两侧毗邻数字格(视觉锚"纹理不干扰数字辨识"的真实威胁面在邻格——雾格自身无数字)。 - -### 综合判断 - -视觉三硬锚(形状+颜色双通道 / 绘制优先级 数字>小人>旗>变异纹理>底色 / 调色板交换优先——新 biome 不新增雾资产只换色板)+ 边界可读硬指标("明处的选择"幻想的视觉前提,与"数字可读性 × 暗色氛围"样张测试同批验证;原型 v3 紫色迷雾格已验证基线可读性,art-bible 缺位期作临时明度基线、就位后强制复测)。结算与 HUD 取负空间:结算界面无 A4 附加项(雾格奖励 = 普通安全格奖励,无独立归因类别——P2 标注归 B1)、无 HUD 常显字段(变异是棋盘属性非资源,与 A3 的 AP/RAP 不同)。动效音频后置("雾散"过渡归 B5/D1 可选、雾开出音效归 D4 Alpha)。 - -## 开放问题(原编号保留) - -| # | 问题 | owner | 时机 | -|---|---|---|---| -| 1 | 雾面积/数量参数回填与 P1 验证:BoardGenTable 雾区域数/尺寸/占比默认值——须在厚度 ≤2(≡ 任意 3×3 窗口非全雾)/ f ≤ 8d 硬边界内定义,含最低雾出现率与降级率埋点口径;可推理率参数按雾边双向净效应建模;雾占比与可推理率的联动曲线(A1 的 P1 生成端保障核心 + 本 GDD 15 项验收的数值侧);占比参数双重身份:难度旋钮 × 情报旋钮——雾形携带雷簇位置信息(Rule 5 推理锚),占比/数量调参同时改变"雾 = 雷簇探测器"强度与首遇显著度(总占比/最大区域尺寸下限口径随 BoardGenTable 一并定,防首关雾低于注意阈值致 P4 解锁拍哑火) | A1 | 第 5 位 | -| 2 | 探测显影的时效与定价:EC6 留白——临时/永久显影、道具成本、counter_item_ids 首个回填 + 悬空引用校验补全(D2 条件性夹具义务兑现) | A5 | 第 11 位 | -| 3 | 创意风险 #1 的 B4 侧兑现:奖励预知的呈现方案(A4 侧切面已定——雾不额外隐藏内容);雾区奖励在效果当量对照表的落位——受三条定价硬约束(B4-①②③),成本口径按链不可达雾格计;①的 per-AP 平价与②③的定量谓词归 B4/B1 对账闭合 | B4 | 第 8 位 | -| 4 | scope=global 语义:精英/Boss 图全局变异的构成、施加时机、与零特判原则及 cell_constraint 覆盖的相容性重审(C3-1) | C3 | 第 12 位 | -| 5 | 岩浆/冰冻规则设计:变异框架的下一批居民、P3 雷险维度的承接者;需新字段时走接口漂移规则回写本 GDD 与 D2 | 垂直切片期 | 随关卡解锁建行 | -| 6 | 变异解锁曲线复核:"每关至少引入一个新元素"的推进节奏随 C3 难度曲线定稿复核;D5 教学动态适配表值(EC9),不写死解锁关号 | C3 + D5 | 低优先 | -| 7 | 标错惩罚与雾内旗:若惩罚上线,雾内旗恒受罚的一致性推论纳入实测观察项(EC5);EC5 推论在 A2 原型会话前置确认(防 D5 教学返工) | A2 前原型小补丁 | 联动 A3 OQ2 | -| 8 | 已开雾格 tint / 雾区全开完成信号的裁决:现处"验收候选"悬空态(本 OQ 登记终结悬空);裁决须同时覆盖——与 0 格的可判定区分(0 格 = "八邻无雷"推理信息,视觉混淆污染推理——tint 为当前唯一区分手段)与 EC11 合并呈现下的完成信号粒度(视觉合并域 = 信号单元,禁实例级双响) | D1 + CD | D1 GDD 前 | - -### 迁移对账注记(外部状态观察——registry / systems-index 所载,非本文裁决) - -- counter_item_ids:design 件行集表保留原值 [](A5 期回填预留);registry `variation_table.mvp_content` 已登记 [probe_dust](A5 GDD 定稿回填,D2 表值与悬空校验激活随 D2/A5 修订批同批落地、回填前为 ∅)——design 件是否随该批同步,待 owner 拍板。 -- OQ2:registry `a5_aux_items.closures` 与 systems-index 记录其已随 A5 GDD(2026-09-14)收口——fog_reveal = 恢复推理原料非排雷、时效 = 本图持续、首引回填与悬空校验闭环;本文按原文保留开放状态,待 A4 下次修订批核销。 -- OQ8:systems-index 记录其已于 design/ux/battle.md 裁决(2026-09-12 采纳 tint + 视觉合并域信号单元,D1 义务③"验收候选"转正)——本文按原文保留悬空状态,待 A4 下次修订批核销。 -- OQ1 数值侧补充:registry A1 条目另载雾占比绝对上限(fog_target_ratio ≤ min(8d, 0.25))与两项达标判据(inferability / inferability_core)——A1 侧后续修订,BoardGenTable 雾参数回填时须一并满足。 - -## 附录:历史审计元数据(迁移自原文头部注记) - -- 复核注记:art-director 未经咨询(Lean 模式)——生产前人工复核视觉规格与 art-bible 一致性(creative-director 已在两轮独立评审中终裁幻想节处置)。 -- lean 门禁(v1 定稿时):systems-designer 审查 Formulas · qa-lead 审查 Acceptance Criteria;作者 = user + agents。 -- 评审日志:`design/gdd/reviews/a4-terrain-variation-review-log.md`(rev1 八项 + rev2 六项 blocking→修复对照表;明细均见该日志)。 -- registry 条目:`variation_table` / `variant_pool_gate`(owner = 本系统 GDD;已锁数值以 registry 为准,正文只引用不复述)。 - -## 去向映射(零丢失对账) - -| 原文(v1.0-lean)章节/表 | 落点 | -|---|---| -| 头部(状态/版本/承载支柱/层级/一句话/作者与门禁) | design 头部 + 附录·历史审计元数据(本文件) | -| 头部·复核注记(art-director 未经咨询) | 本文件附录·历史审计元数据 | -| 速览表(定位/拥有/不拥有/上游输入/下游输出/硬约束) | design 系统范围 + 依赖与输出 + 领域章节规则(硬约束逐条入变异定义框架/布置约束/承重数学) | -| 速览两段散文(定义层定位与玩家遭遇 / 没有A4失去什么) | design 设计目的(定位段 + 承诺 1–5 + 设计意图行) | -| 体验锚点(情绪目标 / 支柱表 4 行 / 反向护栏 / 参考感受) | design 设计目的(承诺 1–4)+ design 迷雾·反向护栏规则;论证 → 本文件问题 2/6;B4 兜底 → design 义务清单 B4-①②③ | -| 全局流程·地形布置流程 / 雾揭示流程 / 出口分发 | design 核心循环(字符画 ×2 + 出口分发表) | -| 核心规则 1–9(人话 + 举证) | design 变异定义框架(Rule 1/8/9)/ 迷雾(Rule 2/4/5)/ 布置约束与生成期门控(Rule 3/6/7)编号规则;举证指向承重数学节与本文件 | -| 规则 3 的实现参照表(生成期布置约束 7 行) | design 布置约束·生成期布置约束(几何硬边界) | -| 规则 4 的实现参照——零特判六面 | design 迷雾·零特判六面 | -| 规则 3/5 的实现参照——雾元知识信息源(6 行) | design 迷雾·雾元知识信息源 | -| 枚举·VariationTable 行集 / schema 校验类别 | design 变异定义框架(两表原样) | -| 枚举·板形参数(7 行) | design 布置约束·板形参数 | -| 数值结论与推导·口径总纲 / F1 / 结构推论 / 雾致预算增量 | design 承重数学(结论 + 表达式 + Variables + 验算表全保留);推导与论证 → 本文件问题 3/4 | -| 数值结论与推导·对 A3 F1 条款 5 的对账 | design 承重数学·三腿表 + 对账契约要点 1–4;论证 → 本文件问题 4 | -| 状态(4 阶段表 + 不变式) | design 布置约束·状态(定义→布置→生效→消亡) | -| 边界情况 EC1–EC11 | design 边界情况(条件|行为两列表,编号不变) | -| 依赖(上游 D2/A3 + 下游 7 行 + 双向一致性核对) | design 依赖与输出(双向一张表 + 核对行) | -| 跨 GDD 义务清单(A1×15 / A2×4 / B4×3 / B1×1 / D1×4 / C3×1 / A5×1 / D5×1) | design 依赖与输出·跨 GDD 义务清单(活契约全保留,编号不变) | -| 呈现与 UI 契约(8 行) | design 呈现与 UI 契约(表原样);论证 → 本文件问题 6 | -| Tuning Knobs(schema 定稿 / knob 效应 / 非 knob 冻结 / 真 owner / 跨 GDD 引用) | design 调参表 | -| 验收标准(测试口径 8 行 / 夹具清单 5 行 / AC-1…AC-10) | design 验收标准(三表原样,AC 编号不变) | -| 开放问题 OQ1–8 | 本文件·开放问题(原编号保留 + 迁移对账注记) | -| 版本历史(v1 / rev1 / rev2 / v1.0-lean 共 4 行) | design 版本历史(全保留 + v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/a5-minesweeper-aux-items.md b/design/archive/gdd-2026-09-14/analysis/a5-minesweeper-aux-items.md deleted file mode 100644 index ae33b4c1..00000000 --- a/design/archive/gdd-2026-09-14/analysis/a5-minesweeper-aux-items.md +++ /dev/null @@ -1,239 +0,0 @@ -# A5 扫雷辅助道具 设计推演 - -> 状态:concluded · 本文只装"为什么"——`design/gdd/a5-minesweeper-aux-items.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 - -## 问题:为什么"看雷"必须窄域(≤3×3)而"看数字/看奖励"可以全图? - -### 广度分析 - -- 全图级真视常态化:扫雷退化为路径优化——P1"我算对了"塌方,推理玩法自废(反向对照 = 全图透视挂件)。 -- 全面禁止真视:雷险(risk)维度无道具承载,五维度覆盖破缺,"买情报"承诺对雷险困境无货可卖。 -- 窄域真视(≤3×3):代答锁在救急档——玩家买的是一次局部确定性,不是整图答案。 - -### 深度分析 - -信息效果分两级:恢复推理原料(雾格数字、奖励身份)放大玩家自己的推理,越大越好;替代推理(直接雷位)直接给答案,必须小而贵。全图看数字后玩家仍要自己推雷(推理面最大化而非代答),全图看雷则推理整段消失——两者的体验后果不对称。 - -护栏若只是设计倡议会被后续内容侵蚀,所以落成 schema 校验:target 必须 ∈ 各空间 kind 支持域交集,mine_reveal 行 target=board_wide 直接加载致命(夹具 a5_target_violation 为承重校验的测试落点)。 - -### 综合判断 - -真视上限 area_3x3、board_wide 仅对 fog_reveal/reward_preview 开放——恢复推理可全图、替代推理必窄域。design 的规则 3、目标域开放表、校验类别表只承载此结论。 - -## 问题:无效/零信息目标为什么不可用不消耗(可用性门)? - -### 广度分析 - -- 照常消耗(B4 E10 道具段拍板同款):防结算管线反抖动,但挖掘期玩家手滑点错白耗道具 = "烧包"挫败源(反向对照 = 无目标校验的"点了就没了")。 -- 一律点击级拒绝:板级零信息时(全图无雾)玩家可反复尝试同一件道具,每次弹拒绝 = 噪音,且把"这张图用不了"的发现成本转嫁给玩家。 -- 两级门:板级零信息 → 图标灰、入口禁用(B4 usable_now 先例前置呈现);点击级零信息/越板 → 该次拒绝零消耗 + 可辨提示。 - -### 深度分析 - -与 B4 E10 照常消耗是**故意的不同**,区分理由有三:挖掘期非结算管线(无反抖动压力)、可用性守卫在 A5 本地可判(读 A2 只读面即可,不依赖跨系统协调)、误操作代价不对称(消耗品稀缺,F1 供给有界)。A5 零事件订阅,板级判据随挖掘进展翻转,usable 按 query 时点现算——派生信息层零缓存义务。 - -两个附属拍板:① area_3x3 边缘窗口照常受理(resolved_target = 窗口 ∩ 板内格,角 4 格/边 6 格)——拒绝案被否决,因贴边拒绝会把烧包感反噬回护栏初衷,且护栏只缩不扩(≤3×3 不因裁剪放大);② 真视零雷恒有效——"这 9 格没雷"本身就是信息非空,不构成零信息拒绝;组合行各 kind 判据取 OR(爆破包因 ap_grant 恒可用;全图卷 = 有未开雾格 ∨ 有未开资格格)。 - -### 综合判断 - -零信息/无效目标不可用不消耗,板级判据走库存投影 usable=false 前置置灰、点击级判据拒绝零消耗。design 的规则 8、谓词表、EC17/EC18 承载此结论。 - -## 问题:辅助道具的供给渗透如何锚定?(F1 推导) - -### 广度分析 - -- 高渗透(道具管够):道具依赖症——每轮必用、扫雷决策外包给道具,P1 观测面恶化。 -- 零供给/纯战斗池:五维度承诺落空,A4"买情报"出口缺席。 -- 低渗透有界供给:消耗品 + 稀有档分层,供给面天然限流,道具是救急而非常态。 - -### 深度分析 - -推导与验算: - -``` -E[N_aux/板] = |U| × (Σw_aux / W_total) -E[N_rare/板] = |U| × (w_scroll + w_blast) / W_total -默认根:Σw_aux = 5+5+4+4+1+1 = 20;W_total = 100(B4 原池)+ 20 = 120 -|U| = 10(B4 direction_precheck 保守板口径) -``` - -| 情形 | 读数 | 验算 | -|---|---|---| -| 默认根 | E[N_aux] ≈ 10 × 20/120 ≈ 1.7 件/板 | 渗透率 ≈16.7%(战斗类 83.3%,约 17%——P3"买情报的代价是放弃一件战利品"的量化形态) | -| 稀有件 | E[N_rare] ≈ 10 × 2/120 ≈ 0.17 件/板 | ≈每 6 板一件稀有——"稀有"定位可感 | -| 输入缺口 | \|U\| 分布待 A1 actuals p10/p50 | 落地后重跑(B4 预检 11 同批) | - -\|U\| 取 10 是保守板口径(B4 direction_precheck 同款),并非实测分布——A1 actuals 落地后须重跑;aux 行入池后 W_total 由 100 变 120,B4 侧 F1 有联动重算义务(B4×④),禁止两侧独立调参不看渗透率。 - -### 综合判断 - -期望 ≈1.7 件/板、稀有 ≈0.17 件/板——渗透率有界是 P1 护栏的供给面(道具不主导挖掘决策)。六行权重 5/5/4/4/1/1 全 provisional 归 C3;稀有可感度由失衡预警④与 OQ5 在 playtest 验证。 - -## 问题:信息道具的价值方向如何判定?(F3 推导与修正史) - -### 广度分析 - -- 把显影价值读作"单次盲赌更安全":方向性错误——显影后残余池雷浓度反而升高。 -- 把显影价值读作"少赌":盲赌次数(暴露)下降 → 期望踩雷下降,方向正确且与 P1 支柱对齐。 -- 真视价值当量精确换算:涉及伏击暴露与 weaken 收益两期望差,MVP 不闭合、如实登记为间接效应。 - -### 深度分析 - -推导: - -``` -显影:fog_reveal k 格 → 板级 ι(免赌开据占比)上移 - → 残余盲猜安全格 n_s = (1−ι)×|S| 收缩 → 盲赌次数下降 → 期望踩雷 ↓ - 单次盲赌条件概率 P(雷) = |M| ÷ (|M| + n_s) 随 n_s 收缩而上行 - (池内雷浓度升高——安全格被挖走;与 B1 F4 同式, - B1 F4 另设 n_s < 1 适用域守卫 → 残余集空时主式不评估、信息端平凡腿接管) -真视:mine_reveal k 格 → 该 k 格移出"盲挖候选域" - 期望收益 = P(雷|盲) × (伏击暴露期望 − 标中 weaken 收益期望) 的差值锁定 - 精确当量归 B1 对照表(MVP 不闭合——间接效应如实登记) -``` - -| 情形 | 方向 | 说明 | -|---|---|---| -| 显影尘(一雾区) | n_s ↓ / 盲赌暴露 ↓ | 恢复推理原料——P1 正向;单赌 P(雷) 上行属正常(池雷浓度升高) | -| 全图卷(全雾显影) | n_s ↓↓ | 全图数字可读——推理面最大化而非代答(雾区无雷知识叠加) | -| 探巢摆钟(3×3 真视) | 决策域 −k 格 | 替代推理窄域化——稀有供给(F1)限流 | - -修正史:初稿曾把方向写成"P(雷)↓",与引用式 P(雷) = |M| ÷ (|M| + (1−ι)×|S|) 自相矛盾——该式对 ι **递增**;评审改为:显影挖走残余池中的安全格后池内雷浓度升高,单次盲赌命中率上行,收益在"少赌"而非"单赌更安全"(registry formulas 同批同步)。 - -### 综合判断 - -显影与真视均为正向信息增量;定量当量换算归 B1 条款①对照表扩列(义务 B1×④ 注记,MVP 不入对照表)。design 的 F3 节只承载结论与表达式。 - -## 问题:维度覆盖为什么做成加载断言而非内容建议?(F2) - -### 广度分析 - -- 口头建议"每维度都出道具":内容收窄时静默破缺,玩家某类困境无货可买时无人发现。 -- 加载后机器断言:coverage(d) 恒真是可执行的内容审计,破缺即加载期拦截。 - -### 深度分析 - -coverage(d) :⇔ ∃r ∈ AuxItemTable : d ∈ r.dimension_tags ∧ reward_row(r.item_id).weight > 0,断言 ∀d ∈ {info, risk, action, plan, counter}。注意"活行"双条件:定义表有行且 RewardTable 对应行 weight>0——光有定义没进池等于没有。维度本身是内容标尺非运行时逻辑,代码零维度分支;维度域外(空/枚举外值)为致命校验,因为那是 F2 的前提。 - -### 综合判断 - -五维度 coverage 恒真 = "每维度都有对应道具"的机器可查形态(AC-12);某维度零活行 = 内容收窄信号。design 的 F2 节与校验类别表承载结论。 - -## 问题:获取为什么挂 B4 奖励池、库存为什么与战斗背包正交? - -### 广度分析 - -- 独立掉落流(A5 自建 roll):违反 RNG 单点与预分配确定性脊柱,且奖励归因链断裂。 -- 入 B4 战斗库存混装:两域使用窗口/生命周期不同,混装会把挖掘期道具拖进结算窗口语义。 -- 挂 B4 奖励池 aux 行 + A5 自持关卡域库存:获取归因与供给定价归一处,使用与消亡归另一处。 - -### 深度分析 - -P3 风险收益同源的信息切面:aux 行挤占战斗奖励池权重(渗透率 ≈17%,F1),买情报的代价是放弃一件战利品——代价发生在获取时刻而非使用时刻(故使用零 AP 成本,规则 9)。P2 归因:来源 {cell, round} 逐件记录,"这瓶显影尘是我上一轮捡到的";经真视插旗兑付的 weaken 走既有 flag_hit 结算行,归因链不断。两库存正交但生命周期同构——都活到关卡结束、关卡末同点清空(与 B4 clear_inventory 同点编排)。 - -### 综合判断 - -获取 = B4 roll_board 身份预分配 + B1 授予路由 add_item;库存 = A5 关卡域容器,与 B4 库存互不混装。design 的规则 4/5 与依赖节承载结论。 - -## 问题:叠加层为什么随图消亡、已花道具不返还? - -### 广度分析 - -- 叠加层跨图保留:叠加层是板级派生信息层,格集离开棋盘事实即失效——跨图保留需要重映射,复杂度与误呈现风险双高。 -- 消亡但返还道具:信息已消费(玩家看见了),返还等于白看——沉没语义被破坏。 -- 随图消亡不返还:信息投资沉没,与既有先例一致。 - -### 深度分析 - -先例锚定:A3 旧板旗随旧板消亡同款——RAP 弃图刷新时玩家已理解"板上的投入随板走"。玩家侧含义直白:别在待弃板上花情报。叠加层零回写 A2/B4 状态、零事件订阅,消亡由 B1 在 board retire 点编排(与 B4 retire_mapping 同点),预读徽章因此绝不会指向已消亡映射(EC7)。 - -### 综合判断 - -叠加层随图消亡、不跨图、不返还(EC3/EC7)——design 的状态表与出口分发表承载结论。 - -## 体验锚点论证 - -| 支柱 | 关键词 | 机制承诺 | -|---|---|---| -| P1 我算对了 | "推不出的地方,我能买回线索" | 显影恢复雾格数字 = 推理原料回归(数字恒真透传,非新信息源);真视窄域护栏(≤3×3)把"代答"锁在救急档——恢复推理可全图、替代推理必窄域;道具零随机、不引入新赌点 | -| P2 扫雷的因战斗的果 | "这瓶显影尘是我上一轮捡到的" | 获取 = B4 奖励池 aux 行(来源 {cell, round} 逐件归因);使用 = 挖掘期自主时点、效果即时可见;经由真视插旗兑付的 weaken 走既有 flag_hit 结算行——归因链不断 | -| P3 风险收益同源(信息切面) | "买情报的代价是放弃一件战利品" | aux 行挤占战斗奖励池权重(渗透率 ≈17%,F1);叠加层随图消亡——弃图刷新时已花显影沉没(A3 旧板旗随旧板消亡同款先例);真视≠自动兑付(插旗仍花 1 AP) | -| P4 地牢探险氛围 | "地牢里前人留下的工具" | 主题命名(显影尘/探巢摆钟/地穴全图卷);icon 键入 art-bible §4.6 扩容(数据键 = item_id,形状+色相双通道);程序化占位先行(D1 既有裁决) | - -| 反向护栏 | 处置 | -|---|---| -| 全图级真视常态化 = P1 塌方(扫雷退化为路径优化) | 真视窄域承重护栏——board_wide 目标域仅对 fog_reveal/reward_preview 开放;mine_reveal 上限 area_3x3,schema 校验强制 | -| 道具使用变成"烧包"挫败源(无效目标白耗) | 可用性门:板级零信息 → 图标灰、入口禁用;点击级零信息/越板 → 拒绝零消耗——与 B4 E10 照常消耗拍板区分 | -| 道具依赖症(每轮必用、扫雷决策外包给道具) | 失衡预警①道具依赖度(playtest 预注册);真视/显影为消耗品 + 渗透率有界(F1),供给面天然限流 | - -参考感受:杀戮尖塔的消耗品(留着的牌永远是一份规划素材)+ Into the Breach 的信息工具(买的是确定性而非输出);反向对照 = 无目标校验的"点了就没了"(烧包挫败)与全图透视挂件(推理玩法自废)。 - -## 已裁决设计争议(速查) - -| 争议 | 裁决 | 理由 | -|---|---|---| -| area_3x3 边缘窗口拒绝还是受理 | 照常受理,resolved_target = 窗口 ∩ 板内格(角 4 格/边 6 格) | 用户拍板——拒绝案的烧包感反噬护栏初衷;护栏只缩不扩 | -| 零信息目标照常消耗还是不消耗 | 不可用不消耗(板级图标灰/入口禁用、点击级拒绝、组合行取 OR、真视零雷恒有效) | 用户拍板——挖掘期非结算管线、守卫 A5 本地可判、无反抖动压力 | -| F3 显影价值方向 | 收益在盲赌暴露下降,非单赌命中率(P(雷) 对 ι 递增) | 评审修正初稿自相矛盾;registry 同批同步 | -| A5 零消耗 vs B4 E10 照常消耗 | 两制并存、故意不同 | 结算管线反抖动压力 vs 挖掘期手滑代价不对称 | -| 生效前 aux 行入池 | 加载致命(B4 Rule 1 预留值拒绝 fail-fast),AC-12/13 登记 deferral | 对侧义务登记即生效条件(A4 测试口径先例) | - -## 开放问题(OQ) - -| 编号 | 问题 | owner | 时机 | -|---|---|---|---| -| 1 | 命名与 icon 终稿:六行 display_name 为机制名候选——地牢隐喻风味词复核 + art-bible §4.6 样张批定 icon(D1 程序化占位不阻塞) | art-bible/D1 | 样张批 | -| 2 | 预读呈现深度细则:徽章呈现信息量(仅身份 vs 身份+tier——query_identity 投影含 tier)与板面视觉密度(预读徽章 × 未开格 × 变异纹理叠加)——D1 裁决,与 B4 Rule 8 已开格呈现同族复用 | D1 | D1 修订批 | -| 3 | 真视与标错惩罚交互:A2 OQ1 惩罚上线后,真视价值重估(真视→必标中→零惩罚风险——价值上行)与护旗类道具(防惩罚)是否入池 | C3 | A2 OQ1 关闭后 | -| 4 | 未来变异反制扩展:岩浆/冰冻行建行时反制道具语义(A4×③ 框架契约——每个新变异建行批随批出反制行) | 垂直切片批 | 随变异建行 | -| 5 | 全图卷稀有度验证:F1 稀有读数 ≈0.17 件/板在 playtest 的"稀有可感"验证——过疏(恒不见)过密(常态全图)均触发权重复核 | C3 | 垂直切片 playtest | -| 6 | 自动寻路终态声明:预读道具为 MVP 终态(寻路始终玩家心智)还是中间态——B4×⑤ 已声明"自动寻路不做",升格为永久设计态与否随 playtest | C3/CD | playtest 后 | - -## 附录 A:验收覆盖矩阵(审计映射,自原 design 迁入) - -| 类别 | 映射 | -|---|---| -| Core Rules | 1→AC-1/AC-12(F2)· 2→AC-1/AC-2/AC-15/AC-16 · 3→AC-2(a5_target_violation 腿)· 4→AC-12(B4×①…⑤ 生效前提)· 5→AC-3/AC-11 · 6→AC-4(相位 deferral B1×①)· 7→AC-4/AC-6/AC-8/AC-15/AC-16 · 8→AC-5/AC-15/AC-16(可用性门谓词表)· 9→AC-8(零 try_spend = API 负空间)· 10→AC-9/AC-14 | -| Formulas | F1→AC-12 · F2→AC-12 · F3→方向预检(非 AC——定量归 B1×④调参期) | -| Edge Cases | EC1→AC-5 · EC2→AC-5(无雾桩面同构)· EC3/EC7→AC-10 · EC4→AC-6 注记 · EC5/EC6→规则语义(A2/A3 域 OOS——真集成 deferral)· EC9→AC-11 · EC10→AC-7 · EC11→规则 7 序证明(构造不可达——负空间)· EC12→OOS A3 既有 AC(grant_ap 后 request_stop 转存——A3 修订批补腿)· EC13/EC14→AC-13 · EC15→D2 既有门(OOS)· EC16→B4 F2 域(OOS)· EC17→AC-15(边缘腿)· EC18→AC-16(板级/点击级腿) | -| 上游承接 | A4 EC6(显影语义)→规则 2 fog_reveal 行 · A4 OQ2(时效/定价)→收口声明(依赖节)· B4 OQ2(呈现深度)→B4×⑤ · A5-1(counter 回填+悬空校验)→A4×①② / AC-13 · 创意风险 #1(预读)→规则 2 reward_preview / B4×⑤ | - -## 附录 B:双向一致性核对(历史审计,自原 design 迁入) - -systems-index 依赖分层表核对:索引分层 A5 ← A2, A4, B4 ✓(A2/A4/B4 三硬上游全落依赖表;B1 编排 = 层 4 Presentation 消费侧的既有编排唯一性原则——B4 先例:编排调用权不构成依赖分层边);D2 为全员 Foundation 数据边。A4/A5 关系 = counter_item_ids 消费(A4 声明字段、A5 回填 owner)——与索引"A5 ← A4"方向一致。 - -## 去向映射(零丢失审计) - -| 原文章节/表 | 落点 | -|---|---| -| 头部块(状态/版本/支柱/层级/一句话) | design 头部 | -| 速览表(定位/拥有/不拥有/上游/下游/硬约束) | design 设计目的 + 系统范围(含全局硬约束行)+ 依赖与输出 | -| 定位两段散文(信息与行动力市场/没有 A5) | design 设计目的 | -| 体验锚点支柱表 | design 设计目的(压缩为编号承诺)+ analysis 体验锚点论证(全文保留) | -| 反向护栏表 | analysis 体验锚点论证(护栏机制结论同时落 design 规则 3/8 与校验类别) | -| 参考感受行 | analysis 体验锚点论证 | -| 全局流程字符画 + 出口分发表 | design 核心循环 | -| 核心规则 1–10 | design 各领域章节编号人话句(规则编号保留;举证注记语义并入人话或各节表格) | -| 效果明细表 | design 使用效果与目标域 | -| 目标域允许范围表(规则 3 内) | design 使用效果与目标域·目标域开放表 | -| 使用编排分支表 | design 使用规则与校验 | -| 使用目标校验谓词表 + 可用性预判注记 | design 使用规则与校验 | -| 枚举·dimension_tags | design 道具定义 | -| AuxItemTable schema | design 道具定义 | -| MVP 内容行集 + 四条注记 | design 道具定义 | -| schema 校验类别表 | design 道具定义 | -| F1/F2/F3 结论 + 公式表达式 + 变量表 | design 数值结论 | -| F1/F2/F3 推导过程 + 情形/验算表 + F3 修正史 | analysis 问题三/四/五 | -| 状态表 + 不变式 | design 获取与库存·状态 | -| 边界情况 EC1–EC18 | design 使用规则与校验·边界情况(编号保留) | -| 依赖(上游/下游两表) | design 依赖与输出(合并为双向一张表) | -| 跨 GDD 义务清单 21 项 + 编号前缀注记 | design 依赖与输出·跨 GDD 义务清单(活契约,编号保留) | -| 双向一致性核对注记 | analysis 附录 B(历史审计) | -| 呈现与 UI 契约 6 行 + UX Flag + Asset Spec | design 依赖与输出·呈现数据面 | -| Tuning Knobs 表 + knob 交互/非 knob/调参所有权 | design 调参表 | -| 失衡预警 ①–④ | design 调参表·失衡预警 | -| 测试口径 / API 面 / 夹具与致命 manifest / AC 清单 AC-1–AC-16 / 缺口预检 1–5 | design 验收标准(编号保留) | -| 覆盖矩阵 | analysis 附录 A(审计映射) | -| 开放问题 OQ1–OQ6 | analysis 开放问题(编号保留) | -| 版本历史 v1.0-lean / v1.1-lean | design 版本历史(原行保留 + 追加 v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/b1-settlement.md b/design/archive/gdd-2026-09-14/analysis/b1-settlement.md deleted file mode 100644 index d3891e41..00000000 --- a/design/archive/gdd-2026-09-14/analysis/b1-settlement.md +++ /dev/null @@ -1,310 +0,0 @@ -# B1 战斗结算规则 设计推演 - -> 状态:concluded · 本文只装"为什么"——`design/gdd/b1-settlement.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 全部公式零随机(同输入恒同输出);期望值均为设计期统计量(对账输入 = A1 F4 报告 C 的 actuals,非 target 参数);数值默认 provisional(调参所有权归 C3)。 - -## 问题:结算系统如何兑现三根支柱的体验承诺? - -### 广度分析 - -| 支柱 | 关键词 | 机制承诺 | -|---|---|---| -| P2 因果归因 | "都是我算出来的" | 每行明细携带来源标注(伤害道具 / 安全格增益 / 标中旗削弱 / 清图奖励 / 雷→伏击);无来源行 = 断言失败(AC-42)——P2 呈现半边的最终兜底在 B1 流水协议 | -| P1 掌控感 | "挖下去值得" | 挖掘决策 EV 健康不等式(A3 条款③)由本系统闭合签字;条款⑤守"推到底"不在数学上吃亏 | -| P3 雷的两面 | "赌桌不是陷阱" | 敌方伏击行与标中旗削弱行同框、同呈现语言 | -| 高光节拍 | "完美被加倍兑现" | 完美排雷双份兑付 + 标中旗行高光(创意风险 #2/#3 机制本体) | - -- 候选 A(明细只记数值不记来源):实现最省,但 P2 归因链断——玩家无法验证"都是我算出来的",排除。 -- 候选 B(来源标注 + 封闭行型 + 无来源即断言):数据层把归因做成机器可判定的契约,呈现侧怎么优化都丢不了来源,采纳。 -- 候选 C(敌我增减益分开两套呈现语言):读屏成本更低,但 P3"雷的两面"需要同构对照,排除。 - -### 深度分析 - -P2 的呈现半边归 D1/B5,但呈现只能从数据里还原来源——来源若不在流水行里,任何呈现优化都救不回归因链。所以"无来源行 = 断言失败"必须是数据层硬断言,不能是呈现自觉。 - -P1 的两条不等式(条款③⑤)若只写进 A3 而没有闭合 owner,就是口号;B1 作为唯一同时握有板面事实流与战斗数值面的系统,是唯一能签字闭合的位置——判据函数角色定为"C3 调参约束生成器",使每次调参被迫重跑对账。 - -### 综合判断 - -反向护栏成文:明细绝不能有无来源的行(P2);判定绝不能不可归因(P1);敌我增减益同构呈现(P3)。任何"合并到看不出来源"的呈现优化,须先确认归因链在数据层仍可还原。design 的「设计目的」四条承诺与「明细流水协议」节只收本结论。 - -## 问题:weaken 锚的归一口径取"每结算瞬时当量"还是"每 AP 总暴露"?(F0 推导) - -### 广度分析 - -| 分支 | schema 可行性 | 后果 | 裁决 | -|---|---|---|---| -| 每结算瞬时当量 | 可行(m_w ∈ [51, 100] 域内) | F2 越域界随移(AP 界 8×m_w / 表界 16×m_w);地板交叉层数 = ⌈100/m_w⌉ = 2;B4 参照零漂移 | **采纳** | -| 每 AP 总暴露 | 不可行——需 m_w > 100,被 percent ∈ [−100, 100] schema 域禁止 | 现实解 = B4 重定最低档参照:safe_cell 活行集中无更弱 buff 行可指,需新增低档行或锚移道具档位——接口漂移 + A4 硬约束①连锁 + 条款①对照表全表重排 | 排除 | - -### 深度分析 - -- **同分母性**:瞬时口径下 weaken 与 defense_up 作用于同一伤害流,"严格大于"在百分点读法与 HP 点读法下等价,锚判定无量纲歧义;总暴露口径引入时长权重(2:1 不对称),把 duration knob 泄漏进锚判定。 -- **机制同构**:B3 本就按结算逐次兑付,瞬时口径是容器原生口径;总暴露需跨结算累计账本,与已锁的"单结算自然边界"(dur=1 每结算清零无存量)冲突。 -- **schema 禁止**:总暴露锚算术需 m_w > 100 越 percent 域,改域 = B3/B4/B1 三侧换算连锁,成本不成比例。 -- **值域依据(@D_ref=12;按现行三输入复核)**:腿一 m_w ≥ 51——65 > 50 严格大于 attack_up 当量 6.0(参照对象 registry 回迁口径,裕度 +30%;池内字面最低档 defense_up −30 当量 3.6 读法下裕度更宽 2.17×——两参照读法均通过,锚判据不受减伤墙批漂移影响);腿二 m_w/100 × D_ref ≥ E_dig → m_w ≥ 38(E_dig = 4.5 面值口径——C3 v3 曲线格子池加权重推;区间读法 4.3–5.1 → 36–43);可行交集下界 = 51(E_dig 口径修正后腿二放宽、腿一回绑);上界 85 = 超出仅在连锁贫瘠板增加裕度,而地板交叉层数恒为 2、边际层早已贬值;schema 顶 100 保留为绝对上界(对应腿二校准上界 ≈1.96:1);下界 60 维持(高于现行可行下界 51——F0 裁决值保守余量,值域修订走 B4/B1 共裁流程非重算批)。 -- **地板规则(B1 clamp 承载,F2 成文)**:每侧 percent 池 clamp ∈ [−100, +100] pp → 乘数域 [0, 2];交叉层数 = ⌈100/m_w⌉ = 2(值域全域恒 2)——第 3 层起边际瞬时当量 = 0;单结算 weaken 池 HP 当量上界 = min(L×m_w, 100)/100 × D_inst(该结算实际裸伤害敞口)。 -- **B3 红警"7 层即触地板"预读更正**:该预读按 −400% 合成带估读;本节地板钉在乘数零点(−100 pp)→ 精确层数 = ⌈100/m_w⌉ = 2——回执同步 B3 OQ1 与 registry `status_effect.anchor_warning`(对账清单 #1/#2);预读实质结论(上调 m_w 的连带成本 = 地板提前到达、边际层贬值)被本裁决吸收。 -- **修订效果量(锚两腿在默认 65 下的读数,provisional @ D_ref=12)**:腿一 7.8 vs 6.0 HP/结算(attack_up 当量——+30%,严格大于 ✓);腿二 7.8 vs E_dig 4.5 HP(+73% ✓);池内字面最低档读法(defense_up 3.6)裕度 2.17×——三读法均通过;历史 −25 值红警复算结论不变(25 vs 50 pp 不过锚 → 修订成立)。 -- **重算复核(B1 重算批)**:锚两腿按现行三输入(duration=1、m_d=−30、C3 v3 曲线 E_dig=4.5)复核通过——腿一 7.8 > 6.0(attack_up 当量,参照对象 registry 回迁口径;裕度 +30%)、腿二 7.8 ≥ 4.5(裕度 +73%);可行交集下界 = 51(腿一回绑),值域 [60,85]/默认 −65 维持(F0 裁决值,共裁修订流程非重算批回收)。 - -### 综合判断 - -采用"每结算瞬时当量"口径(每 AP 总暴露分支排除);m_w 值域 [60, 85]、默认 −65;地板交叉层数 = ⌈100/m_w⌉ = 2;B4 参照零漂移,B3 仅行值域修订(registry 回写)。design 的 F0 节只收此结论与连带界值。 - -| 连带后果项 | 内容 | -|---|---| -| B3 行值 | `StatusEffectTable.weaken.magnitude` −25 → 值域 [60, 85]/默认 −65(registry 回写);B3 AC-14 腿 3 非平凡性复查:16×65 = 1040 越出 percent 域——腿保持非平凡 ✓ | -| F2 越域界随移 | AP 界 = 8×65 = −520%;表界 = 16×65 = −1040%(合成值 B3 原样输出、B1 池 clamp 收口) | -| B4 侧 | 零漂移:defense_up 参照保持 | -| 时长不对称 | 显式接受:defense_up : weaken 全寿命 ≈2:1 不入锚判定——吸收通道 = m_w 上探值域段 + 高光 #3 即时节拍 + duration 为 knob(与 B3 OQ7 playtest 证伪项联动观测) | - -## 问题:四源效果档位如何放在同一把尺上对照?(F1 推导) - -### 广度分析 - -- 候选 A(分源换算率——buff/debuff/道具各一把尺):读数贴近直觉,但 A3 条款①契约要求单一线性换算,分源改率 = 条款①契约作废,排除。 -- 候选 B(单一线性换算全四源共用,E(·) 单位 = 主角 HP 点):一把尺量全部,锚判定无量纲歧义,采纳。 -- 候选 C(账面乘数表达完美翻倍——只记 ×2 不打第二份):账面好看但运行时无兑付载体,玩家实得与账面脱节,排除(见"完美翻倍"问题节)。 - -### 深度分析 - -- **统一当量定义**:E(·) ∈ 主角 HP 点(1 当量 = 1 点主角 HP 的期望净变化;与 B2 ambush 量纲、B4 F6 量纲建议同源)。flat/道具类 E = 值本身(ambush 按 k 个攻击拍线性展开);percent 类 E_inst = |L×m| ÷ 100 × D_exp;时长是显式乘子(E_life = E_inst × 兑付结算数)而非分源改率。 -- **D_ref 选取**:单行全局 knob,provisional 默认 12 = 单结算伏击结构上界 cap×m_amb(B2 F4 已登记值),兼 attack 拍带 [4,16] 与 heavy 带 [8,20] 的中位代表;变更触发全对照表 + 条款③⑤重跑(联动义务)。 -- **锚对照实物(条款②,B3 义务⑤)**:参照对象 = attack_up_basic 行(registry 回迁口径——B3 Rule 10 同款;RewardTable tier=2,effect_id=attack_up)→ 每结算瞬时当量 6.0 HP @ D_ref=12;weaken 修订后每旗 7.8 > 6.0(严格大于 ✓,裕度 +30%);腿二(连锁放大边际基准,provisional 1:1 零链下界):7.8 ≥ E_dig 4.5 ✓(面值口径,C3 v3 曲线重推)。池内字面最低 buff 当量 = defense_up_basic 3.6(−30 现行值)——"最低档"字面读法裕度更宽(2.17×),锚在两读法下均通过;2026-09-11 参照回迁后的预检重跑义务由本批兑现(registry anchor_warning 迁移注记关闭)。 -- **结构性边界注记**:腿二校准上探的可满足上界 = m_w=100 ↔ 相对每结算百分点档 ≈1.96:1——连锁期望放大超过此比值的板形上腿二结构性不可满足(percent 瞬时档被 schema 域封顶);处置 = C3 板形参数(密度/连锁富集)与 m_w 联动约束,非数值修订可解(对账清单 #3/#8——连锁规模分布无既定供给方)。 -- **Example**:一轮挖到 2 个 defense_up(L=2 同实例)→ E_inst = 2 × (0.30 × 12) = 7.2 HP/结算 × 1 结算 = 7.2 全寿命(dur=1——名义值,饱和折减见 F4 敏感性);同轮标中 1 旗 → weaken L=1 → 7.8 HP/结算;踩 1 雷(unit_count=1、attack 拍)→ 该结算敌方附加 +3 HP。 - -### 综合判断 - -单一线性换算全四源共用;E(·) 单位 = 主角 HP 点;Output Range E ∈ [0, +∞)、全表零负值(floor 语义见 F2——percent 池饱和后边际 E = 0);weaken 修订后每旗 7.8 HP > attack_up 6.0(条款②腿一通过)。归口:B1 管对照表与换算维护、D_ref 与 P_perfect 的 SettlementTable 承载;B4 管行值/权重/tier/C 供给(F6);C3 管全部 provisional 数值;B3 管 L×m 合成原样输出(对照表输入侧)。design 的 F1 节收结论、换算式、Variables 与全对照表。 - -## 问题:percent 池怎么合成、地板设在哪、免伤轮合不合法?(F2 推导) - -### 广度分析 - -- 候选 A(合成后统一 clamp 一次):两侧池互相污染,weaken 饱和会吃掉 defense_up 的账面贡献,归因不可读,排除。 -- 候选 B(每池独立 clamp [−100, +100] → 池间乘算 → floor 单一取整):每侧地板独立可读,乘数域 [0, 2],采纳。 -- 候选 C(clamp 域做成 knob):地板是结构语义不是平衡杆——放开 = 负乘数/超 2 倍乘数分支全要重写,定为结构性非 knob。 - -### 深度分析 - -- **三例逐一读法(B3 EC7 登记例的收口)**:weaken AP 界(L=8 × 65 = −520%)与表界(L=16 × 65 = −1040%)均 clamp 到 −100 → M=0——该结算全体存活敌输出归零,第 3 层起边际瞬时当量 = 0(地板吸收);明细行如实显示合成值与终值两端(P2)。defense_up 叠满(L=2 × −30 = −60%)在域内未触地板 → M=0.4。 -- **免伤合法性**:enemy 侧 weaken 饱和(单结算零输出)是乘数域 [0, 2] 自然边界内的设计内结果;hero 侧免伤在现行 −30×2 帽(−60%)下不再由 defense_up 单侧可达——免伤轮(D'=0)的现行可达路径 = weaken 饱和或两侧池叠加触底;强度评估(减伤窗口/免伤频率)归 C3 对账联动(B3 Knob 交互同口径),不属地板规则异常。 -- **Example**:D_raw=20、weaken L=2 → P=−130 → clamp −100 → M=0 → D'=0(零值伤害行,不调 apply_damage);weaken L=1 → 20 × 0.35 = 7;再叠 defense_up L=1 → 20 × 0.7 × 0.35 = 4.9 → floor 4。 -- **地板规则不区分越域来源**:越域深度仅入合成值显示与诊断计数;地板恰边界读法 = 判据函数对 −100 输入的断言腿,非现行行值产物。 - -### 综合判断 - -池内加算 → 每池独立 clamp [−100, +100] → 池间乘算 → floor 单一取整(结构性非 knob);免伤轮(D'=0)是合法设计态——不调 apply_damage、产零值伤害行;Output Range D' ∈ [0, ∞) 整数、零负值分支,MVP 实际域 [0, 20](B2 参考带)。归口:B3 管 L×m 原样输出不 clamp(B3 义务⑧/EC7 对侧);B1 管池归属映射、clamp、乘区次序、取整方向;C3 管池值强度评估。design 的 F2 节收结论、公式、Variables 与三例读法表。 - -## 问题:伤害全序、负值、溢杀与死亡判定边界怎么定?(F3 推导) - -### 广度分析 - -- 候选 A(敌方先手):扫雷的因(伏击池)已在敌侧,玩家没有先手兑现面,"我算出来的"节奏断裂,排除。 -- 候选 B(主角先手 → 逐敌循环 → 道具段三分支全序):玩家动作先兑现、敌方反应后跟,与授予段的归因序一致,采纳。 -- 候选 C(溢杀转移到下一个敌人):一刀清屏的隐性倍率,道具恒定表值的拍板被破坏,排除——溢杀丢弃。 - -### 深度分析 - -- **Example**:goblin(atk=4)L=2 → D_raw=10;weaken L=1 → floor(10 × 0.35) = 3;defense_up L=1 同结算 → floor(10 × 0.5 × 0.35) = 1;knife_adv(power=8)打 hp=6 的敌 → hp 归 0 → Dead、溢杀 2 丢弃、击杀标记进流水、下一件刀打顺位后继。 -- **双死不可达论证(判定段 hero 先判的防御性优先级)**:我方伤敌在道具段与战斗段主角先手攻击、均先于敌方行动兑付;敌方伤我在主角攻击之后——敌行动时点若已敌全灭则先判胜,"hero 与最后敌同时 hp=0"结构上不可达;hero 先判是不可达情形下的纵深防御,不是常态分支。 -- **负值分支禁令的实现面**:percent 池地板 [−100, +100](F2)、flat 值 ≥ 0、hp ∈ [0, max_hp]、治疗 clamp 上界 max_hp(B4 F4 对侧:hp' = min(hp + power, max_hp))、apply_damage 入参 n ≤ 0 = B2 API 拒绝 + 诊断——D'=0 腿由此改走零值行,免伤与零输出必须在明细里可见。 - -### 综合判断 - -三分支全序(主角先手 → 逐敌循环 → 道具段)+ 负值分支禁令(零负伤害/负治疗/负当量)+ 死亡判定:Dead ⇔ hp=0(无负 hp 中间态)、受击即死、hero 死亡战斗段短路、判定段 hero 先判;Output Range 双向伤害 D ∈ [0, ∞)、hp ∈ [0, max_hp]、零转移零存续。归口:B2 管递减/floor 0/Dead 翻转/指针冻结;B1 管全序、调用序、零值行、溢杀丢弃语义、死亡判定时机(B2 义务③的对侧兑现)。design 的 F3 节收结论、四分支公式与 Variables。 - -## 问题:条款③挖掘风险不等式在现行值链下成立吗?(F4 推导) - -### 广度分析 - -- 评估点候选 A(全板平均):被信息端稀释,残余盲猜端的真实风险被平均掉,排除。 -- 评估点候选 B(残余盲猜端最坏点,信息端平凡腿一并登记):风险最坏处配对,"推理有回报"面不丢,采纳。 -- 左臂口径候选:锚行(最低档 buff = defense_up_basic 满寿命当量,合同读法)vs 跨行期望(E_dig 面值口径)——双口径登记防虚高裕度误用。 - -### 深度分析 - -- **V_safe 注记**:原"= D_ref 恒等式"(0.5 × D_ref × 2)随 duration=1(两级奖励批)与 m_d=−30(减伤墙批)消解;现行 V_safe = 0.30 × 12 × 1 = 3.6——锚行满寿命当量,低于跨行期望口径的差距同步收窄(E_dig 现值 4.5)。 -- **V_mine 注记**:单雷边际敌方增益当量上界:1 雷 = 1 层伏击;cap 溢出使第 cap+1 颗雷边际当量 = 0 → 灾难轮不等式自收紧。 -- **ι 代理注记**:actuals p10 未交付前以行 target 代 = 判式面的保守代理(target ≥ 实际 p10 → P(雷) 偏高 → 主式更难过);低 ι 的真实代价不经本式入账——报告 C 交付按总暴露核对消费;重跑义务(对账清单 #6)。 -- **换锚注记**:旧验算的"L1 10×10 d0.10 / L2 12×12 d0.12"系 A1 schema 自洽参考行(registry mvp_reference_rows,非曲线行);本批两腿统一换锚 C3 MVP 行值总表 v3(L1 D0/D1 板 10×10、D2–D4 板 12×12,全轴 d0.25/t0.88)——L2 腿即 v3 曲线内最大常规板形;C3 L2 关卡行值填充批(OQ1)交付后随 actuals 重跑复核。 -- **双口径读数(防虚高裕度误用)**:验算表左臂按锚行当量 V_safe=3.6(A3 条款③"最低档 buff 当量下界"的合同读法);按跨行期望口径(左臂 = P(安全)×E_dig,E_dig=4.5 面值口径)复算:L1 ≈0.60×、L2 ≈0.58×——二元结论不变(两板形、两口径全破)。 -- **结论①(重算回执)**:现行值链下两参考板形破线——登记"通过"回执失效(旧读数 ≈2.0×/2.6× 的三个旧输入:duration=2 / m_d=−50 / v1 曲线参考行);信息端平凡腿不变(零赌博板形不产生破线误判——P(安全)=1 → V_safe > 0 恒成立)。 -- **与 clause3_supply 2.3× 预检的对齐**:该预检系"pp 代理左臂 × cap 右臂"的巧合近似——量纲混用且右臂取结算聚合上界与单格决策单位错配(多计 cap 倍);本闭合改统一 HP 当量 + 边际配对 → registry `clause3_supply.direction_precheck` 退役为历史记录、回执登记重算值(对账清单 #3)。 - -### 综合判断 - -现行值链(duration=1 × m_d=−30 × C3 v3 曲线 d0.25/t0.88)下两参考板形破线(锚行口径 L1 ≈0.48× / L2 ≈0.47×;期望口径 0.60×/0.58× 同向);满配 unit_count=3 深度破线;旧"通过"回执退役为历史记录;破线升格 C3 默认曲线级约束(候选杠杆 = m_d 回调 / duration 恢复跨轮 / D_ref 联动上调 / 板形侧密度×ι 联动对〔d0.28 回退先例〕/ m_amb 下调;全部处"禁独立调参"联动网络 m_w↔D_ref↔m_d↔duration_d,修正方向须 C3 提案 + B1 闭合对账共裁,本重算批如实登记读数、不代裁修正);actuals p10 交付后强制重跑。design 的 F4 节收结论、判据公式、Variables、验算表与结论①–④。 - -## 问题:条款⑤"推到底清图"支配"弃图刷新"吗?(F5 推导) - -### 广度分析 - -- 计价候选 A(逐格按初始比例独立重赌):漏计全池挖掘量——安全格被挖走后池内雷占比持续上升,模型漏项且 actuals 校准无法吸收,系统性偏乐观,排除。 -- 计价候选 B(挖穿残余池计价——均匀交错模型 E[踩雷] = |M|×n_s/(n_s+1)):清图必须挖穿残余盲猜区的真实成本入账,采纳。 -- RAP 计价候选:停手侧 RAP 机会收益按零计价(显式假设)——图源充裕时 RAP 边际低,零价假设对"推到底"偏利一分;本假设下 verdict 已为负,若 C3 为 RAP 计价则结论只会更负——模型边界成文,非遗漏。 - -### 深度分析 - -- **E_dig 推导口径**(2026-09-14 重算批):刀/强治疗已移出格子池入注入池,不摊入单格期望;E[战斗获取] ≈ 1 由注入机制另计;治疗按面值 = 上界读法(实现率折减入敏感性腿,同 F4③)。 -- **实现率折减口径**(E_dig′ = 2.70 provisional——B4 预警②④联动):L1 = −45.3 / −5.3;L2 = −91.2 / −51.2——同向更差(完美翻正腿亦被折减吞没)。 -- **雾态增量(fog_burden_ratio 口径)**:雾格 = 雾元知识可推理安全格(P(安全)=1)→ 属确定格、两策略同挖、不进残余集;雾的条款⑤效应 = 链不可达雾格的全价 AP 抬高轮数——Δr 增量 = |U| × dig_ap_cost ÷ AP_r(A1 例板 U=4 → 0.5 轮;v3 曲线复算:(29.99 + 4) ÷ 8 = 4.25 → 上取整 5——较无雾基线 Δr=4 **+1 轮,增量不再被同轮吸收**,登记读数变化);雾池档位加成对冲入 R_res 侧(E_fog 读数见护栏 A——本批读数失效待重推);actuals fog_burden_ratio p50/p90 交付后重跑(对账清单 #6)。 -- **结构性解读**:残余盲猜区越大(n_s ↑),清图的全池雷险越逼近"踩到全部残余雷"——"是否承担盲猜风险是策略点"(game-concept 设计本意)被本判式定量证实;v3 曲线(d0.25/t0.88)使残余集系统性变大、非完美态被支配加深——与 F4 破线同源(曲线加难侧未同步补偿结算侧奖励/防御杠杆);完美高光与清图支配性互 feed 的设计意图保留(L1 完美双份翻正 +11.3),但非完美态仍负 = 被支配。 -- **护栏 A 注记**:与残余池模型无关;登记读数 (11.1 − 7.2) − 1.5 = +2.4 ∈ (0, 3](v1 曲线/旧格子池口径);2026-09-14 重算批方向性复核:E_dig 修正 4.5 + 雾池构成变更(刀移出格子池——现行雾池加权当量 ≈4.9 面值口径)→ 读数 ≈ −1.1 < 0 越下界(雾纯税化风险——链不可达雾格全价 AP 成本超过当量增量);E_fog 现行池构成下的正式重推随 W2 批(C3 收口批三选一落档),本批登记方向性读数、不代裁。 -- **护栏 B 注记**:|S|_min = min_safe_count 是 A1 行级 knob,调参时按当期行集重算、禁写死 50;|R₀|_max = 20 系参考带经验值、无登记供给方 → 登记 A1 产出义务 R₀ 规模分布上界(F4 报告 C 扩列,缺口预检 9);DPS 期望严格读数的敌 DPS 参照系 v1 曲线 atk 值(4/4/6)——v3 atk(7/5/9/6/9)+50% 后 DPS 界随之上探,正式重推随 W2 批。 - -### 综合判断 - -条款⑤未闭合——挖穿残余池计价下主判式两态为负(L1 仅完美双份翻正,非完美态被支配),实现率折减与多敌语境更差;"推到底"的支配性只在残余集小时自然成立;判据函数角色 = C3/B4 调参约束生成器,AC-40 断言输出与登记约束包一致。C3 已裁约束包②(非支配设计态)+ 计价基元换位 clear_blast;B1 重算批维持裁决②。design 的 F5 节收结论、判据公式、Variables、四态验算表、约束包与两护栏。 - -**P_perfect 默认值建议与相容性(×2 的论证):** - -| 条 | 内容 | -|---|---| -| 建议 | ×2(SettlementTable.p_perfect = 200,provisional,调参所有权 C3;运行时载体域 {100, 200}) | -| ① | 单一线性换算不破坏——乘子作用于 C 当量换算之后、换算 ÷100 已成文(F1 对照表行内显式列),非新增分源换算率(条款①合规) | -| ② | 与条款⑤同向且是现参数下唯一使 L1 翻正的杠杆(+8.0)——完美高光与清图支配性互 feed;非完美态仍负 → C 量级上调约束不因 P_perfect 消解 | -| ③ | 触发谓词 = 板级 flag 记录(零误标 ∧ ≥1 标中),与踩雷正交(盲挖踩雷不破坏 perfect,标错旗才破坏——以"标旗未中"零值行留痕,Core Rule 5.2) | -| ④ | RAP 刷新路径零清图奖励 → 无 perfect farming 环(双份兑付不改此性质——刷新图无兑付点) | -| ⑤ | 与 F0 weaken 修订同向(标中旗价值 ↑ → perfect 可达性 ↑——高光 #2/#3 互 feed) | -| ⑥ | 上界受护栏 B 约束(登记读数 16 ≤ 24 系 v1 曲线 D_ref 口径;C=40/完美 80 越线裁决随 W2——完美加成不得触碰钓鱼线) | - -## 问题:完美排雷的"翻倍"是账面乘数还是真实双份交付? - -### 广度分析 - -- 候选 A(账面乘数——明细记 ×2 名义值):实现一行乘法,但玩家实得与账面脱节,高光沦为数字修饰,排除。 -- 候选 B(真实双份交付——第二份同身份兑付走既有授予通道):道具类 stock 第二次、buff 类 apply_effect 第二次(满层拒绝照旧),玩家实得两件,采纳。 -- 候选 C(任意整数倍乘数):非整数倍数乘数无运行时载体,域收窄为 {100, 200}、域外加载致命。 - -### 深度分析 - -高光行 value 记实际有效兑付(首份 + 第二份被接受部分)、禁记名义值——否则"翻倍"在满层/满血等合法例外下变成假账。首份即零兑付 → 高光行不发(完美谓词仍成立,对账入账 = 实际兑付 0);仅第二份被拒(首份落地)→ 高光行照发、value = 首份当量 + "奖励未生效"行一条——降级语义全覆盖。 - -呈现分工的取舍:事件型高光(完美排雷)发独立高光行——它是一次性事件,需要独立行锚定节拍;属性型强调(标中旗、清图奖励)用行字段标记——它们挂在既有兑付行上,独立行会双倍计数。#3 标中旗的 chord 缺席(MVP 无即时音画反馈)以"当轮兑付 + 明细强调"组合补偿——weaken dur=1 本就当轮生效,节拍缺失是呈现层债务(归 D1/垂直切片),不是兑付层缺陷。 - -### 综合判断 - -完美排雷落真实双份交付载体(P_perfect ∈ {100, 200},200 = 双份交付、100 = 仅高光无第二份);高光行记实际有效兑付、零兑付降级;事件型用独立高光行、属性型用行字段标记。design 的「规则 13 实现参照」表与「明细行类型」表只收此结论。 - -## 问题:伤害A/B 充能与护甲克制怎么结算?(F6 推导) - -### 广度分析 - -- 候选 A(充能吃 attack_up 等 percent 修正):与 B4 F4"刀不吃修正"同族拍板冲突——加法增量分量一律不吃 percent,排除。 -- 候选 B(flat 附加分量、逐分量查甲效表 floor 后相加):基础/伤害A/伤害B 三分量各自对甲型读数,对策面清晰(甲B 对策 = 伤害B 充能),采纳。 -- 候选 C(跨轮累积充能池):单轮生命周期(轮末清零)是"这轮挖得多 → 这刀重"的即时因果,跨轮存量会稀释归因,排除。 - -### 深度分析 - -- **验算(表读值记号,默认矩阵)**:对甲A 敌(bugbear)10 格挖掘轮——A 池 = min(10×1, 8) = 8 → dmg_a = floor(8×1.5) = 12;2 首标 B 池 = 4 → dmg_b = floor(4×0.5) = 2;base = 6(零 attack_up)→ D_hero = 20。对甲B 敌(ogre_chief):dmg_a = floor(8×0.5) = 4、dmg_b = floor(4×1.5) = 6 → D_hero = 16——甲B 对策 = 伤害B 充能(C3 联动网络 #6)。无甲敌(goblin):8 + 4 → D_hero = 18。 -- **cap 截断腿**:15 格连锁轮 A 池 = min(15, 8) = 8——溢出 7 格零充能、无"溢出未生效"行(充能非奖励、无兑付语义),截断仅入诊断计数;cap=0 = 不封顶结构位,damage_a_per_cell=0 = 机制关闭合法极端。 -- **与乘区关系**:A/B 分量在 percent 池乘区之外(敌→主乘区 F2 不作用于 hero→敌方向;hero_offense 池只乘基础分量);attack_up 只乘基础分量——B4 F4 同族拍板。 -- **P2 归因**:A 池来源 = 开格(逐格可归)、B 池来源 = 首次标中旗(与 weaken 同判定批——"标中旗双收益线"归 W12③ 对账清单);明细行 = hero 伤害行分量二元组 {baseline = 基础分量, attach = dmg_a + dmg_b 合计}(A/B 拆分经充能池公开读值可还原,P2 不丢失)。 - -### 综合判断 - -伤害A/B 为挖掘期充能、战斗段主角先手攻击一次性消费的 flat 附加分量——池内加算、不吃任何 percent 修正、逐分量查 armor_effectiveness 甲效表后 floor 相加;充能池单轮生命周期(累积 → 消费 → 轮末归零,跨轮零存量);Output Range D_hero ∈ [0, ∞) 整数、零负值分支。归属:机制与结算归 B1(F6 + F3⓪),四字段数值投值归 C3,甲型映射归 B2 EnemyTable。design 的 F6 节收结论、公式与 Variables。 - -## 开放问题 - -| 编号 | 悬案 | owner | 时机 | -|---|---|---|---| -| 1 | 事件总线载体:signal vs 回调注册 vs 直连调用;B1 触发机制(事件订阅 vs 相位轮询)与 A2 事件捕获断言面同批落地——AC-6/AC-33 相关 THEN 为纸面契约直至落地(缺口预检 1) | 实现期 ADR(与 A2 OQ2 同一裁决) | Technical Setup | -| 2 | m_w 修订终值共裁:F0 已裁值域 [60, 85]/默认 −65 与归一口径;终值确认 + B3 StatusEffectTable 行表/Tuning Knobs/registry 三处回写执行(缺口预检 3);B3 AC-14 腿 3 非平凡性随批复查 | B4/B1 锚 owner 共裁 + C3 调参 | B1 评审后的接口漂移回写批 | -| 3 | A1 actuals p10 交付后条款③⑤强制重跑:ι 以行 target 代 p10 为乐观代理——重跑 AC-39/40 + 同步 registry 重算值(对账清单 #6);连带 fog_burden_ratio p50/p90 | A1 交付 → B1 重跑 | A1 F4 报告 C 交付 | -| 4 | 连锁规模分布供给方悬空:条款②第二腿(连锁放大边际基准)校准需 c̄(每安全格连锁期望放大)——现无既定供给方;候选 = A1 F4 报告 C 扩列 or A2 遥测(对账清单 #8 附注);供给落定前第二腿以 1:1 零链下界运转 | A1/A2 + B1 共裁 | A1 报告 C 扩列或 A2 telemetry 定稿 | -| 5 | EC5 零合法板玩家侧呈现形态:提示/补偿/回退三形态选型——B1 数据面(非法产物标记上抛)已就绪;B1 域内不做补偿逻辑(候选"确定性回退已知好种子"归实现期 ADR——A1 EC5 登记对侧) | D1 裁决 | D1 GDD | -| 6 | C1/C2 encounter 供给接线:begin_battle 入参直供改真实遭遇上下文 + 跨战斗 HP 持久性(B2 hp_persistence 对侧承接);战斗触发(节点移动碰非奖励点)归 C1(缺口预检 5) | C1/C2 | C1/C2 GDD | -| 7 | 深度高光形态:#3 标中旗高光的二期形态(即时 HUD 反馈动画/音画同步)——MVP 已落数据面标记 + 当轮兑付;旗落格高亮/姿态反馈等表现形态随 art-bible 与战斗表现美术测试定 | D1/B5 | 垂直切片 | -| 8 | 标错惩罚 flag_miss 源路径:候选"敌方伏击 +1"上线时——flag_judged{hit=false} 转化路径 + B3 source_class 新枚举(结构冻结项走 GDD 修订)+ 惩罚重复性裁决(hit=false 无去重的不对称)联动关闭(缺口预检 12) | B1/A2/A3 联合 | A2 OQ1 实测采纳后修订批 | -| 9 | hero atk 激活——已闭合(2026-09-11 起"基础攻击恒存在":HeroTable.atk 域 [1,999]、0 加载拒绝、MVP=6;attack_up 复活、消费面 = 主角战斗段先手攻击);对照表回迁 + AC-36 死行断言改写随重算批兑现 | B4/B1 | 已闭合 | -| 10 | B2 OQ1 两 face 归属:query_attack/ambush_grant_plan 归 B2 供给面 vs B1 编排面——裁决归 B1 则 AC-14/22 相关腿迁移至 B1 冒烟(断言口径不变) | 实现期 ADR | Technical Setup | -| 11 | 零伤害死局遥测锚口径:战斗轮数异常遥测的阈值与埋点(EC 死局组合 B1 无自愈分支——护栏 owner = 实现期 ADR/D2 跨字段校验,B2 OQ9 并案)(缺口预检 11) | C3/playtest | 垂直切片 playtest | - -## 缺口预检(验收阻塞与后续义务登记) - -| 编号 | 缺口与处置 | 对侧 | 时机 | -|---|---|---|---| -| 1 | 【阻塞级】A2 事件载体 ADR 依赖:经真 A2 事件流驱动 B1 的 THEN 子集为纸面契约直至落地;A2 半真备选(注入面 + A3 真)已登记为过渡载体、断言口径不变 | 实现期 ADR(与 A2 OQ2 同一裁决) | Technical Setup | -| 2 | 【阻塞级】σ 登记轨迹与取号约定:身份依赖腿(双包/刀全灭/清图槽身份/完美板布置)依赖 σ 登记与取号约定(B4 缺口 8 同源);登记后须第二人独立推导复核 | qa / 实现期 ADR | 冒烟框架搭建 + ADR 定名 | -| 3 | m_w 修订回写——已闭合:registry 回执 #1/#2 于 2026-09-10 F0 批落地、2026-09-14 重算批更新腿读数(attack_up 参照回迁口径重跑兑现);B3 AC-14 腿 3 非平凡性复查通过(16×65 = 1040 越域) | B4/B1 共裁 + C3 | 已闭合 | -| 4 | A1 actuals p10 未交付:F4/F5 以行 target 代 p10 乐观代理——交付后强制重跑 AC-39/40 并同步 registry(对账清单 #6);连带 \|M\|/\|S\| 分布与 fog_burden_ratio p50/p90 | A1(交付)→ B1(重跑) | A1 F4 报告 C 交付 | -| 5 | C1/C2 encounter 供给:begin_battle 入参直供为 provisional——C1 定稿后接入真实遭遇上下文与跨战斗 HP 持久性,AC-5/24 的直供构造改为真实供给链 | C1/C2 | C1/C2 GDD | -| 6 | 【阻塞级】D1 呈现义务台账:A2×6/B2×4/B3×4/B4×5/B1×3(高光行强调/完美排雷呈现/EC5 零合法板提示)缺项即 blocking——design 验收标准节 AC 全部以数据面断言、呈现零覆盖 | D1 | D1 GDD 门禁评审 | -| 7 | SettlementTable registry 条目回填——已闭合:settlement_table 条目 2026-09-10 回填、2026-09-14 重算批随 W3 充能规格更新为十二字段口径;AC-41④ 按现行条目断言 | 本 GDD 定稿批 | 已闭合 | -| 8 | B1 扫描域成员清单登记:AC-43 单向扫描的 B2/B3/B4 API 符号清单与 B1 文件集须登记入 D2 AC-9 项目级 CI 扫描配置(B3/B4 先例) | Technical Setup | B1 GDScript 产物落地即登记 | -| 9 | C3 调参对账重跑流程:D_ref/P_pf/m_w 任一调参 → AC-36/39/40 + AC-2–4 夹具登记值连锁重跑;扩表:A1 行参数(mine_density/min_safe_count/ι target)与 B4 奖励权重/power 调参 → 同批重跑 AC-39/40;A1 新增产出义务 = R₀ 规模分布上界(F4 报告 C 扩列——护栏 B 的登记供给方) | C3(调参)+ qa(重制)+ A1(R₀ 产出) | 每次调参 / 报告 C 扩列交付 | -| 10 | A1 桩 → 真 A1 全链路:换图编排 generate 真实集成(含 attempt 重试不重开 scope 语义、非法产物真分布)登记端到端集成冒烟(与 A1×A2 双包含端到端同槽) | qa/A1 | A1 实现落地 | -| 11 | 零伤害死局遥测锚:EC 死局组合 B1 不设自愈分支——战斗轮数异常遥测的口径登记(进 C3/OQ 清单) | C3/playtest | 垂直切片 playtest | -| 12 | flag_miss 源路径预留:标错惩罚上线时补 `flag_judged{hit=false}` → 敌方伏击 +1 源路径 AC(source_class 新枚举走 B3 修订——A2 预告接口漂移) | B1/A2/A3 联合 | 惩罚实测采纳后修订批 | - -## 附录 A:审计元数据 - -### 复核注记(v1.1-lean 头部遗留) - -lean 门禁下 systems-designer / qa-lead 已委托起草(F0–F5 + 对账义务清单 / 43 条 AC + 覆盖矩阵);creative-director 与 art-director 未经咨询——生产前人工复核 Player Fantasy 情绪定位与 Visual/Audio 和 art-bible 一致性(§1–4 须在 D1 GDD 前创建)。 - -### 对账登记义务清单 - -| 编号 | 登记内容 | 对侧 | 状态 | -|---|---|---|---| -| 1 | registry `status_effect.anchor_warning` 裁决回执:归一口径 = 每结算瞬时当量(总暴露分支关闭——schema 域禁止 + 重定参照路径不采纳);m_w 修订值域 [60, 85]/默认 65;"7 层触地板"预读更正(地板 = 乘数零点 −100 pp,交叉层数 = ⌈100/m_w⌉ = 2);参照对象 = attack_up 当量(registry 回迁口径) | registry / B3 | 已回写(2026-09-10 回执;重算复核更新腿读数) | -| 2 | registry `status_effect.mvp_content.weaken` + B3 GDD 行表/Tuning Knobs:magnitude −25 → 值域 [60, 85]/默认 −65(接口漂移回写);B3 AC-14 腿 3 非平凡性复查回执(16×65 = 1040 越域 ✓);B3 OQ1/OQ6 关闭回执 | registry / B3 | 已回写(2026-09-10) | -| 3 | registry `clause3_supply.direction_precheck` 闭合回执:统一当量重算值双口径登记(边际配对),pp 代理退役为历史记录;破线 → C3 调参约束登记 | registry / C3 | 已回写(2026-09-10)+ 2026-09-14 重算回执(现行值链破线读数) | -| 4 | registry 新条目 `clause5_dominance`:F5 主判式(挖穿残余池计价)+ 未闭合登记与 C3/B4 约束包(C3 已裁②非支配设计态)+ 两护栏结论 + actuals 重跑义务 | registry / C3、B4 | 已回写(2026-09-10)+ 2026-09-14 重算回执(v3 曲线读数) | -| 5 | registry `reward_table`/`reward_config` 注记:C_eff 口径(P_perfect 入账规则——÷100 成文 + 真实双份交付、载体域 {100,200};当量 = power 恒等);attack_up 死行注记已随基础攻击恒存在批退役(对照表现行 = attack_up 活行) | registry / B4 | 已回写(2026-09-10 回执;死行注记随基础攻击复活退役) | -| 6 | registry `board_gen_table.inferability_vs_p_safe` 消费回执:P(安全) 代理公式(残余盲猜端上界式)+ actuals p10 输入接线路径(A1 F4 报告 C) | registry / A1 | 待回写 | -| 7 | D2 SettlementTable schema(B1 回填 owner)+ registry `settlement_table` 条目(十二字段 = 原八字段 + damage_a_per_cell / damage_a_cap / damage_b_per_flag / armor_effectiveness——护甲克制批) | D2 / registry | 已回写(2026-09-10 回填;2026-09-14 随 W3 字段更新) | -| 8 | systems-index 门禁记录:B1 强制检查点三项(条款①②③⑤)裁决落定登记;A3 OQ1(对照表)、B4 OQ5(T_fog_min 推导式——对照表已落定,改推导式与否由 B4 裁)/OQ6(weaken 联动)状态回写。附注(新缺口):第二腿校准所需的连锁规模分布(c̄)无既定供给方——登记 A1 报告 C 扩列或 A2 telemetry 的归属 OQ | systems-index / B3、B4 | 待回写 | - -### AC 覆盖矩阵 - -| 类别 | 映射 | -|---|---| -| Core Rules(16/16) | 1→AC-43(单向扫描)+ AC-33(零随机行为级)· 2→AC-6 · 3→AC-9 · 4→AC-7+AC-2 · 5→AC-9/10/11/12(腿 5 = 标旗未中行)/13 · 6→AC-14 · 7→AC-15/16 · 8→AC-17 · 9→AC-18/19/20 · 10→AC-21/22/23/24/25 · 11→AC-26 · 12→AC-24/27 · 13→AC-35(#2 真实双份)+ AC-12(#3+腿 5)+ AC-36(P_pf 入账)· 14→AC-42(13 类+字段分层)· 15→AC-33/34 · 16→AC-1/2/3/4/32/41 | -| Formulas | F0→AC-41(registry 对账形态)· F1→AC-36 · F2→AC-37+AC-22 腿 3 · F3→AC-38+AC-18/20/22/24 · F4→AC-39 · F5→AC-40 · F6→AC-44 | -| 上游义务 23 条 | B3①→AC-9 · ②→AC-9 · ③→AC-37/22 · ④→AC-26 腿 2 · ⑤→AC-36 · ⑥→AC-26 腿 1 · ⑦→AC-17 腿 1 · ⑧→AC-14 ∥ B2①→AC-21 · ②→AC-9/14 · ③→AC-24/38 · ④→AC-39 · ⑤→AC-18 · ⑥→AC-14 ∥ A2①→AC-6 · ②→AC-10 腿 2 · ③→AC-12 腿 2/3 ∥ B4①→AC-7 · ②→AC-9/10/11 · ③→AC-13 · ④→AC-15/16/18/19/20 · ⑤→AC-31 · ⑥→AC-5/28——23/23 全落位 | -| 强制检查点 5 项 | reload gate→AC-32 · 可回放→AC-33 · new_board 违约→AC-30 · roll_board 恰一次→AC-5/28(scope 计数器观测)· 衰减恰一次→AC-26 | -| SettlementTable 校验 | segment_order→AC-2 · 悬空 effect_id→AC-3 · p_perfect 域→AC-4 · schema 定稿→AC-1/41 | -| EC(26 条) | 末图清图→AC-13/26 腿 2/27/31 · hero 短路→AC-24 · 双死 hero 先判→AC-24 注(结构不可达不构造)· D'=0→AC-22 腿 3 · 溢杀→AC-18 腿 3 · charge 蒸发→AC-23 · 全体 charge→AC-23 腿 2 · L=0→AC-22 腿 1 · 同窗多包→AC-16 · 部分回复→AC-16/19 腿 2 · 刀全灭→AC-20 · 空库存→AC-15 腿 4 · RAP 不足→AC-29 腿 3 · 连环刷图→AC-29 腿 2 · 未刷新→AC-30 · 非法产物→AC-28 腿 2 · 清理被拒→AC-31 腿 2 · 战斗中 reload→AC-32 · 衰减空→AC-26 腿 3 · 清图 buff 满层→AC-13 腿 2(高光降级)· 完美刷新图→AC-35 腿 4 · 标中+误标→AC-35 腿 2+AC-12 腿 5 · 多敌共享 L→AC-25 · 死亡即不动手→AC-18 腿 2 · 零伤害死局→负空间+遥测锚 OOS(C3/playtest)· 结算开始 hp=0→负空间 debug 断言——呈现半边全部 OOS 至 D1/B5(生效条件 = D1 义务台账登记) | -| 无洞声明 | Core Rules 16/16、F1–F6、义务 23/23、检查点 5/5、SettlementTable 校验 3/3 全部映射 AC;EC 除 2 条负空间自守(不可由公开 API 构造)与呈现/playtest OOS 外全部 Given-When-Then 或对账断言承载 | - -## 去向映射 - -| 原文章节/表 | 落点 | -|---|---| -| 头部(状态/版本/承载支柱/一句话) | design 头部;复核注记 → 附录 A | -| 速览表 | design 系统范围(定位/拥有/不拥有/上下游/硬约束拆入负责·不负责清单与规则 1/15) | -| 体验锚点表 + 反向护栏 | design 设计目的(四条承诺);论证 → 问题"结算系统如何兑现三根支柱的体验承诺" | -| 全局流程(战斗开始/七段骨架/出口分发表) | design 核心循环 | -| 核心规则 1/2/3/4/16 | design 编排与触发(编号人话句);静态扫描/行为级举证 → design 验收标准 AC | -| 核心规则 5/6/7/13 + 三批转化表 + 奖励分流表 + 高光兑现节点表 | design 授予与高光;真实双份论证 → 问题"完美排雷的翻倍是账面乘数还是真实双份交付" | -| 核心规则 8/9/10/11/12 | design 合成、道具与战斗 | -| 核心规则 14/15 | design 明细流水协议 | -| 枚举(明细行类型/source_class/highlight) | design 明细流水协议 | -| 术语表 | design 当量换算与条款闭合(读公式所需的定义) | -| F0 结论 | design F0 节;分支表/同分母性/机制同构/schema 禁止/值域依据/红警更正/重算复核/连带后果 → 问题"weaken 锚的归一口径" | -| F1 结论/换算式/Variables/对照表/锚两腿/结构性边界/归口 | design F1 节;候选取舍/锚对照实物论证/Example → 问题"四源效果档位如何放在同一把尺上对照" | -| F2 结论/公式/Variables/三例读法表/归口 | design F2 节;候选取舍/免伤合法性论证/Example → 问题"percent 池怎么合成、地板设在哪、免伤轮合不合法" | -| F3 结论/四分支公式/Variables/归口 | design F3 节;候选取舍/Example/双死不可达论证 → 问题"伤害全序、负值、溢杀与死亡判定边界怎么定" | -| F4 结论/判据公式/Variables/验算表/结论①–④ | design F4 节;换锚注记/双口径/V_safe·V_mine·ι 注记/clause3_supply 对齐 → 问题"条款③挖掘风险不等式在现行值链下成立吗" | -| F5 结论/判据公式/Variables/四态验算表/折减·雾态 bullets/约束包/护栏表/护栏 B 输入登记/P_perfect 结论 | design F5 节;计价候选/显式假设论证/结构性解读/护栏 A·B 注记/P_perfect 建议六条 → 问题"条款⑤推到底清图支配弃图刷新吗" | -| F6 结论/公式/Variables/cap 截断腿/P2 归因 | design F6 节;候选取舍/验算/乘区关系 → 问题"伤害A/B 充能与护甲克制怎么结算" | -| 边界参数总表 | design 调参表(边界参数总表) | -| 显式排除声明(归属表) | design 系统范围(不负责清单括注归属)+ 各 F 节归口行 | -| 对账登记义务清单(8 条) | 活契约摘要 → design 依赖与输出(registry 回写义务随各上游行);全表 → 附录 A | -| 状态表 + 编排不变式 | design 编排与触发 | -| 边界情况表(26 条 EC) | design 边界情况(条件|行为两列,依据内联句尾) | -| 依赖(上游 9 行/下游 5 行/双向核对) | design 依赖与输出 | -| 呈现与 UI 契约(8 条数据面义务) | design 依赖与输出(呈现数据面义务) | -| Tuning Knobs(SettlementTable schema/Knob 表/非 knob/Knob 交互/调参所有权) | design 调参表 | -| 验收标准·测试口径 | design 验收标准(测试口径) | -| 验收标准·AC 清单(AC-1–AC-44) | design 验收标准(AC 清单,编号不变,覆盖列同步改"规则 N"称谓) | -| 验收标准·覆盖矩阵 | 附录 A(审计证据;design AC 表覆盖列已含规则级映射) | -| 验收标准·缺口预检(12 条) | analysis 缺口预检区(编号不变) | -| 开放悬案(OQ 1–11) | analysis 开放问题区(编号不变) | -| 版本历史(7 行) | design 版本历史(全保留 + 追加 v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/b2-enemy-system.md b/design/archive/gdd-2026-09-14/analysis/b2-enemy-system.md deleted file mode 100644 index e63d6db9..00000000 --- a/design/archive/gdd-2026-09-14/analysis/b2-enemy-system.md +++ /dev/null @@ -1,335 +0,0 @@ -# B2 敌人系统 设计推演 - -> 状态:concluded · 本文只装"为什么"——`design/gdd/b2-enemy-system.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 原文头部复核注记(保留):lean 门禁下 systems-designer(Formulas)/ qa-lead(AC + 缺口预检 7 项)已委托起草;creative-director 与 art-director 未经咨询——生产前人工复核体验锚点情绪定位与 Visual/Audio、art-bible 一致性(art-bible §1–4 须在 D1 GDD 前创建,线索清单是其输入之一)。 - -## 问题:伏击量纲与单轮上限怎么定,才能让"它强是我喂的"成立? - -### 广度分析 - -- 候选 A:percent 量纲(按百分比放大敌人攻击)——收益:与 weaken/defense_up 同一语言;代价:atk=0 敌种下伏击恒零、量纲随敌种曲线漂移,条款 3 换算不可锚。 -- 候选 B:flat 固定值(每层 +N 点主角 HP)——收益:与敌种 atk 解耦、换算单一线性;代价:不同 atk 敌种间相对强度不平(由 C3 曲线承载)。 -- 候选 C:"每颗已开雷伤害加成"(按累计雷数而非本轮授予)——收益:账更简单;代价:跨轮存量 → 惩罚无自然边界,与"debuff 只活一结算"定稿冲突。 -- cap 候选:默认 8(旧)vs 4——8 使 min(雷数≤8, cap) 恒等、溢出协议死码;4 绑定单轮 5–8 雷灾难轮,溢出协议获真实消费域。 - -### 深度分析 - -合成序判别说理:伏击附加若进倍乘,heavy 拍会把"读怪规避"的收益放大到不可控(判别例 20 vs 32);后置加法让伏击与敌种基线正交、两份账各自可归因(P2)。池共享不消耗(同结算多敌读同一 L,非均分、非先到先得)是 side-wide 语义的自然推论——层数扣减唯一入口 = B3 轮末衰减(dur=1 轮末全清)。m_amb 变量卡:int flat ≥ 1、provisional 3、B3 行值、量纲 = 主角 HP 点数(本 GDD 定稿——registry OQ2 关闭条件兑现);锚验收归 B4/B1。 - -F2 验算表: - -| 验算 | 读数 | 说明 | -|---|---|---| -| bugbear(atk=4, mult=2)heavy 拍 L=4 | 4×2 + 12 = **20** | 合成序判别非平凡:塞进倍乘得 (4+12)×2 = 32 ≠ 20;L=4 = cap=4 默认下游戏态上界(域内判别值);query_attack 的 L 为调用方注入的判别探针、B2 不校验其游戏态域(游戏态域由 F3 预截流承载——探针取值与游戏态域分离,实现期若给 query_attack 加 L 域守卫须回改 AC-7) | -| goblin(atk=4)本轮开雷 3 颗 | D = 4 + 9 = **13** | attack 拍基础例 | -| 满编 3 goblin、L=4 | 各 4+12 = 16、合计 48(伏击分量 36) | 多敌共享读值例 | - -F2 Output Range(默认表值,cap/atk/m_amb/mult 调参后随之重算):goblin attack ∈ [4, 16];bugbear attack ∈ [4, 16]、heavy ∈ [8, 20]、charge ≡ 0(cap=4 封顶 L=4)。极端:charge 拍零兑付 → 蓄力轮授予的伏击层当轮全部蒸发(合法推论;反向 = 读怪奖励"蓄力拍前放心贪雷"——D5 教学条目);无负值分支(clamp/地板归 B1)。边界注记:归 B1——L 读值、clamp/负值/溢杀、hero 侧减伤合成次序、死亡判定与"这一下是否兑现"。分量供给建议:B2 向 B1 供(基线, 伏击)二元组而非合后标量——结算明细"伏击 +N"的 P2 归因行需要分量边界。 - -F3 验算表: - -| 场景 | granted | overflow | 说明 | -|---|---|---|---| -| cap=4、开雷 6 | 4 层 | 2 行 | 本结算每个攻击行为附加 +12 | -| cap=4、开雷 5–8(灾难轮) | 4 | 1–4 | cap 反灾难护栏绑定域 | -| cap=0、开雷 m | 0 | m | 免疫极端——全溢出、伏击全无效但全部可见(P2 诚实) | - -max_stack = 16 双重不可达论证:单轮 L ≤ min(8, cap=4) = 4 < 16,且 dur=1 无跨轮存量 → B3 满层拒绝对 ambush 行双重不可达;不可达性由 dur=1 ∧ AP ≤ 8 承载、与 cap 无关——M=16 是死护栏非死字段。重验触发:ambush.duration ≥ 2 ∨ AP 经济改动 ∨ ambush 新增非 mine_hit 授予源(旗源授予不计入 mines_r、cap 预截流漏账 → L 可达 16 触发 B3 满层拒绝、与 F3/B3 双溢出协议冲突——OQ6 标错惩罚采纳时强制重验)。 - -### 综合判断 - -量纲定稿 = flat、单位 = 主角 HP 点数(provisional 3,锚验收归 B4/B1——A3 条款 2/3);cap 默认 4 定稿为反灾难护栏(绑定阈 = 单轮 5–8 雷灾难轮)。量级注记:atk=4 时 attack 拍 L≥2 伏击分量过半(6/10);heavy 拍因基线 ×mult 过半点后移(6/14 < 半)——支配边界 L* = ⌈atk×mult/3⌉ 与"过半"口径按拍别分别读取;常态支配的修正入口 = 敌种 atk 曲线(C3 所有权)或 m_amb 锚(B4/B1 验收),本 GDD 权限外、仅登记方向;cap=4 只治尾部灾难(5–8 雷轮)。量纲定稿注记按接口漂移回写 registry status_effect.ambush(AC-16④ 承载)。 - -## 问题:行为环为什么确定性轮转、"死亡即不动手"? - -### 广度分析 - -- 候选 A:半随机 AI(每拍掷行为)——收益:变化感;代价:不可学、不可规划,威胁归因断(P1/P3 双断)。 -- 候选 B:固定环(Peglin 式轮替)——收益:可学习、可规划,"抢在重击前击杀"成为技能;代价:内容量小(MVP 读怪对象最长 3 拍环)。 -- 死亡口径候选:死亡后指针继续推进(尸体走环)vs 就地冻结——冻结让"抢杀窗口"有真实兑付(重击永不兑现),且语义直白。 - -### 深度分析 - -同步性质定理证明:同种单位同指环首(初始化同一)且每结算各恰推进一次(B1 义务①)→ 任意结算序号下存活者 steps 相同 → beat 相同;死亡只冻结本人指针、不改变他人 steps——任何死亡时序都不会让幸存者乱拍(EC2)。 - -Output Range 与极端:指针恒 ∈ [0, 环长);环长 1(goblin)退化为恒等(EC10:每拍 attack、无自然空窗、兑付率 ρ=1——该敌种伏击威胁无衰减节拍)。Example:bugbear——结算 1 攻击(p→1)→ 结算 2 蓄力空拍(p→2)→ 结算 3 前被主角击杀 → 重击不兑现、指针冻结于 2;若结算 3 行动后才死 → 重击已兑现、p 回绕 0。边界注记:归 B2——指针所有权、存活校验、冻结不变式、环首初始化、跨轮跨图延续;归 B1——死亡判定时机、结算内先后次序、每结算恰一次推进(义务①)。 - -### 综合判断 - -定稿:确定性环 + 死亡即不动手(2026-09-09 用户拍板)+ 先作用后推进(与 B3"先兑付后衰减"同款时序哲学)。行为环敌单位专属——主角无环、推进域排除(full 评审 blocking⑧ 核销项);预留四拍(guard/boost/hinder/summon)启用 = GDD 修订非调参(枚举封闭性)。 - -## 问题:条款 3 供给口径取"每战上界"还是"单结算自然边界"? - -### 广度分析 - -- 候选 A:每战上界表值——收益:对账式整齐;代价:战斗长度是轨迹量,表值上界须假设战斗长度、口径造假。 -- 候选 B:单结算自然边界(debuff 只活一结算)——收益:无需战斗长度假设、与 dur=1 机制自洽;代价:跨结算累计无表值上界(须显式声明为轨迹量)。 - -### 深度分析 - -口径依据(用户定稿原话转写):"不设(每战)上界——踩雷的 debuff 只存在一回合:在一次结算中有效,之后就没有 debuff 了。"——debuff 单结算寿命 = 自然边界。F4 结构上界 min 收紧(full 评审批):unit_count × min(AP 上界, cap) × m_amb——cap > AP 界时 cap 腿松弛,默认 3×min(8,4)×3 = 36、cap ≥ 8 时真可达 72 而非 144、默认 unit_count=1 下 = 12。 - -方向性预检验算表(provisional——真实对账 = A1 actuals p10 + B1 归一表): - -| 项 | 读数 | 说明 | -|---|---|---| -| 盲猜端单格 P(雷) | ≈ 0.5–0.7 量级 | 有信息挖掘端趋 0(A1 参考:密度 0.10 / target 0.95)——不等式真实战场在残余盲猜集 | -| 右臂(cap=4) | 0.64 × 12 ≈ 7.7 | 条款 3 右臂代理读数 | -| 左臂(条款 2 最低档锚 +50pp) | 0.36 × 50 = 18 | 条款 3 左臂代理读数 | -| 方向稳健裕度 | ≈ 2.3× | registry clause3_supply.direction_precheck 同步回写 | - -预检史:裕度曾按 +100 两层叠满取值得 4.7×,full 评审更正为 2.3×——旧值与"最低档下界"语言矛盾。左臂参照对象曾迁 defense_up 当量(attack_up 死行期),2026-09-11"基础攻击恒存在"裁决后回迁 attack_up 当量(registry status_effect.anchor_warning / clause3_supply.direction_precheck 两处迁移注记)。B3 红警闭环:ambush 量纲已由 F2 供给(registry OQ2 关闭条件);条款 3 左臂(安全格 buff 当量)载体 = 主角基础攻击(恒在,attack_up 复活)与 B4 奖励行值;闭合回执见 registry clause3_supply(B1 F4;含 2026-09-14 B1 重算批破线读数与联动约束网登记,以 registry 为准)。 - -### 综合判断 - -定稿 = 单结算口径:每结算暴露精确式 k × L × m_amb(k = 本结算存活敌中攻击/重击拍单位数,确定性可算)+ 每结算结构上界 + 跨结算轨迹量声明(不设上界)。B1 对账取"每结算"口径即可闭合、无需战斗长度假设。 - -## 问题:MVP 敌人名录与多敌模型怎么定? - -### 广度分析 - -- 单敌 vs 多敌:B3 单敌假设(target_side 无歧义)曾入文;B2 定敌人数模型时回验——用户 2026-09-09 拍板定多敌(1–3 同种),触发 B3 预登记接口漂移条款:registry status_effect.single_enemy_assumption 回验改写 + systems-index 门禁记录登记;B3 GDD 正文不改、以 registry 为准(A3 OQ5 收编先例)。 -- 效果作用域候选:单体寻址 vs side-wide 共享池——side-wide 与 B3 现接口零改动兼容,是 MVP 最便宜路径;单体寻址留 target_ref 扩展位(首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决)。 -- 名录构成候选:每坐标多敌种随机 vs 每行集恰一敌种——后者把"配错"变成加载期致命,选择规则整体让渡给遭遇域(C1/C3),B2 零选择逻辑、零悬空风险。 -- unit_count 语义:定值 vs 区间 [unit_count, unit_count_max]——区间语义由 C3 遭遇随机化批引入(B1 encounter 骰定本战实际数量 n,实例化后不增——EC5 记号调和;定值行 = 缺省、旧行零迁移)。 - -### 深度分析 - -多敌模型的测试承载问题:默认 unit_count=1 下多敌语义零消费者(Rule 7 空转、AC-5/9/10 靠夹具根可达)——死码风险登记为 OQ2;多敌夹具根选 bugbear 行(三拍环)而非 goblin——goblin 环长 1 恒 attack,混合拍 GIVEN 不可构造、同步断言零判别力、双单位读值不可构造(full 评审 blocking③ 核销);夹具值非 MVP 内容调参结论,多敌根是 Rule 2 的测试承载、仅供冒烟。 - -精英/Boss 编码位(OQ7 预登记):难度 = f(关卡序号, 节点深度, 精英/Boss 修饰);现键 (level_index, node_depth, enemy_id) + "每行集恰一敌种"结构冻结下,若 C1 定稿分支地图使同深度并存普通与精英节点,精英编码无键位(同深度第二敌种行触发行集校验致命);届时改键(如追加 encounter_class 维度)走 D2 Rule 4 接口漂移修订,schema/AC-12/夹具/registry 连锁回写(A1 OQ6 镜像;A1 BoardGenTable 已预留 elite_/boss_ 命名空间与改键退路)。 - -### 综合判断 - -定稿:多敌 side-wide + 每行集恰一敌种 + 区间 unit_count。MVP 名录:原始定稿为双敌种(goblin/bugbear,数值占位 provisional),C3 修订批扩容为三敌种 {goblin, bugbear, ogre_chief}(DND 更名批对齐)——两阶段表述差异与 registry 现行行值的核对见开放问题 OQ-迁移-1。goblin 单拍环体验证伪预登记为 OQ8:玩家可能将其感受为"自动平砍的血条"(恰为体验锚点反向对照),MVP 实际读怪内容仅剩 bugbear 一环;证伪则两拍环备用案(如 [attack, charge])由 C3 内容所有权处置、本 GDD 结构不变。新敌种投放节奏 = 关卡命脉:MVP 敌信息总量小、L2 见底——每关须有新敌种或新环段投放(C3)。 - -## 问题:玩家怎么"读"敌人——数值预告还是视觉推测? - -### 广度分析 - -- 候选 A:界面直接显示下一拍行为与数值——收益:信息零损耗;代价:读怪幻想死亡、规划退化为读表,P1 断。 -- 候选 B:视觉推测型(图像承载行为线索、数字只在结算明细兑现)——收益:观察成为技能、可归因可学习;代价:呈现层承重(D1×4 义务、art-bible 约束),线索不可学即塌。 -- 参考感受合成:Peglin 固定招式轮替(威胁因可预测而可规划——确定性环是可学习性来源)× 怪物猎人读招(前摇姿态承载威胁信息、无数值面板——视觉推测的同构)→ 本作 = 确定性环 × 视觉推测;反向对照(要避开的感受)= 半随机、不可归因、重掷线索的"猜怪"呈现。 - -### 深度分析 - -体验锚点(情绪目标一句话):**"对面是个看得懂的对手,不是一个血条"**——威胁可推测、可归因、可拆解;玩家不操作敌人,但每一轮都直接感受它。 - -| 支柱 | 关键词 | 机制承诺 | -|---|---|---| -| P3 同源的对面对象 | "赌桌对面的那个存在" | 结算明细"敌方获得伏击 +3(第 4 轮 · 雷)"的行可指认——敌人强度是扫雷决策的镜像,威胁有源可溯 | -| P1 可推测的威胁 | "它弓起背了,下一拍是重击" | 读怪推理进入挖掘决策(形态↔行为映射稳定可学,MVP 双环最长 3 拍);不预告精确数值——数字在结算明细兑现,结算前的世界靠观察而非读表 | -| P2/P3 的拆台兑现 | "它强是我喂的,它弱是我拆的" | 标中旗 weaken 与伏击行同框、同一呈现语言,落在同一个它身上 | -| P4 地牢住户 | "越下越险的刻度" | 深层敌人更凶(C3 施加),给下探氛围一个可见刻度 | - -护栏:威胁绝不能是无源暗账——玩家说不出"它为什么变强 / 这一拳为什么这么重"即归因链失职(P2/P3);线索必须稳定可学(映射每 run 恒定,D1 义务②),任何让线索重掷或不可学的呈现设计默认砍掉(P1);血条/攻击力数字可读性适用视觉锚 1(暗色底上高对比)。 - -五条规格为何是承重项:①②③ 任一断裂 → "抢在重击前击杀"窗口、"蓄力轮放心贪雷"教学、读怪幻想三者同时落空;⑤ 预告时序锁定的理由——挖掘阶段是决策发生地,预告必须全程在场;结算时不另设独立意图播片(结算明细是数字兑现面、非意图预告面)。"不直接显示数值"的负空间 = 冒烟 API 封闭枚举(无意图数值 API)。双舞台陷阱:敌单位出现在棋盘上还是独立战斗场景 = B5 前"战斗表现美术测试"锁定(game-concept 双舞台资产管线陷阱),B2 只锁数据面与状态清单、不预设舞台;敌人层绘制优先级(锚 3 优先级表:数字>小人>旗>变异纹理>底色,不含敌单位)须在 art-bible 创建前裁决插入位置(姿态精灵与数字/旗/小人的遮挡关系),随美术测试一并锁定,否则"哪些数字可信"的心智模型分裂。音频:蓄力拍的音频前摇是"读招"的潜在第二通道——登记为垂直切片可选项(非 MVP 义务)。 - -### 综合判断 - -定稿 = 视觉推测型(用户拍板):不直接显示行为/数值、映射键 = enemy_id(B3 effect_id→icon 同款契约)、映射每 run 恒定禁重掷、数字在结算明细兑现。MVP 视觉状态清单:goblin 1 态(攻击)、bugbear 3 态(攻击/蓄力/重击);学习成本低(最长 3 拍环)。 - -## 问题:主角数值放哪、基础攻击为什么必须恒在? - -### 广度分析 - -- 候选 A:atk MVP=0 机制开关(伤害全走 B4 道具侧)——旧定稿;后果:零基线乘任何百分比增益恒为零,"当前内容态结构性不可通关、B4 先行 = 任何可通关验证的先决"(胜利路径声明,CD 排序 #1)。 -- 候选 B:基础攻击恒存在(atk ≥ 1 自 schema 层杜绝零基线)——2026-09-11 用户裁决采纳:死锁从数据层进不来、开发期任何内容态都不可能出现。 -- 表形态候选:随关卡成长表 vs 单行全局表——主角不随关卡自动成长(成长 = 天赋 C4 / 奖励侧),单行全局 + Rule 4 豁免(ActionEconomyTable 先例)。 - -### 深度分析 - -裁决的连锁退役:原"atk MVP=0 机制开关、胜利路径依赖 B4 先行"条款与 OQ3 左臂悬空投影退役;attack_up 复活(+50 percent,消费面 = 主角战斗段先手攻击——B1 战斗段同批增补 hero_attack 来源值),锚参照从 defense_up 回迁 attack_up 当量;OQ9 恒零死局分支收窄——hero 侧恒零伤害已被 HeroTable.atk 域下界([1,999]、0 加载拒绝)结构杜绝,残余 = 行 atk=0 ∧ cap=0 → 无威胁敌(战斗可胜但零风险——内容调参禁区注记、非死局);跨表量级护栏(atk×mult 上界 vs max_hp 域)owner = 实现期 ADR/D2(ActionEconomyTable 跨字段校验先例)。 - -战斗节奏定位:每次结算的战斗段主角先手攻击顺位最前的存活敌人——先于敌方行动;攻击是固定动作、不是行为环一拍(主角无环);伤害算式/乘区/明细行协议归 B1 战斗段。道具伤害是恒定表值、不吃修正。战斗开始血量由编排方入参供给(越界拒绝 = EC16,承 A3 拒绝口径——编排方供给异常显式暴露、不静默吸收);跨战斗是否保留归 C1/C2(MVP 冒烟以血量上限入参);解锁成长归 C4、曲线调参归 C3。 - -### 综合判断 - -定稿:HeroTable 单行全局两字段(max_hp + atk);atk 域 [1,999]、0 加载期校验拒绝;MVP = 6(原型锚 HERO_BASE_ATK provisional 归 C3)。胜利路径 = 基础攻击(恒在)+ B4 奖励侧规划面伤害(囤刀、抢杀、爆发时点的决策素材)共同兑付"敌人全灭 → 战斗胜利",每一分伤害逐行标注来源(hero_attack / 道具逐件实例)。 - -## 问题:各调参旋钮的方向风险怎么定(Tuning Knobs 论证)? - -### 广度分析 - -原 Tuning Knobs 表("调过高/调过低"两列即方向风险论证): - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| EnemyTable.unit_count | 1(provisional) | 同步轮转下齐射爆发(全攻轮 side 伤 ×N,非平滑) | =1 时 AOE 分流/顺位顺延零消费者(Rule 7 空转) | -| EnemyTable.hp | 18(provisional,出处待查) | 战斗拉长 → 伏击跨轮累计放大 | 秒杀级 → 惩罚无兑现窗口、伏击机制名存实亡 | -| EnemyTable.atk | 4(provisional,出处待查) | 伏击稀释 → 踩雷无感(P3"风险与收益同源"断) | 支配边界 L*→1,惩罚接管战斗、敌种属性被 C3 曲线稀释 | -| EnemyTable.heavy_multiplier | 2(provisional) | heavy+伏击同拍成秒杀拍(读怪规避价值升、容错归零) | =1 时 heavy ≡ attack、三拍环退化两拍(读怪素材坍缩) | -| EnemyTable.advantage_per_round_cap | 4(本 GDD 定稿) | →8 时溢出协议死码回归、支配区扩大、条款 3 右臂膨胀 | ≤2 时 cap 常态绑定 → 边际惩罚归零("再多踩也不痛")、溢出行噪音、P3 归因梯度塌陷 | -| HeroTable.max_hp | provisional(出处待查) | 容错升、治疗道具贬值 | 灾难轮秒杀感(与 cap 交互) | -| HeroTable.atk | 6(原型锚 provisional 归 C3;域 [1,999]、0 加载拒绝) | 击杀预算贬值 → 道具供给/敌 hp 曲线联动重算(C3,禁止独立调参) | 战斗拖长、基础攻击存在感稀薄(道具侧支配) | - -### 深度分析 - -Knob 交互:cap × atk(支配边界 L* = ⌈atk×mult/3⌉ 联动)禁止独立调参——联动评估归 B1 条款 3 闭合对账;unit_count × cap(单结算上界双线性);heavy_multiplier × atk(heavy 拍支配)。pattern 内容(环长/charge 占比 → 兑付率 ρ)属内容行调参,所有权归 C3。 - -零伤害死局组合护栏(OQ9):hero atk=0 已被 HeroTable schema 域下界杜绝——"全场恒零伤害、战斗永不定局"结构不可能;残余退化 = 行 atk=0 且 cap=0 → 无威胁敌(内容调参禁区注记,非死局);混编遭遇(多敌种同战斗)下 side 池 cap 取哪行值未定义——当前结构(每行集恰一敌种)恒单行值,混编引入时随 OQ7 改键一并裁决。 - -### 综合判断 - -MVP 全部默认值 provisional、曲线数值归 C3(A1 参考行先例);B1 条款 3 对账落定前,cap 与伏击量纲相关联调须重跑方向性预检并同步 registry(接口漂移义务)。非 knob(结构冻结):行为枚举七类封闭、死亡即不动手、先作用后推进、伏击池共享读法、合成序后置加法、伏击量纲 = HP 点、固定顺位规则、每行集恰一敌种、零随机——修订走 GDD 流程。 - -## 开放问题 - -### 原 OQ1–OQ9(编号保留) - -| # | 悬案 | owner | 时机 | -|---|---|---|---| -| 1 | query_attack / ambush_grant_plan 两 face 归属——B2 供给面 vs B1 编排消费(F2"供给建议"与 F3"预截流归 B1"边界注记的张力落点);裁决归 B1 则 AC-7/8/9 对应腿迁移至 B1 冒烟(断言口径不变)、回写 AC 前言 | 实现期 ADR 定名时同步裁决 | Technical Setup / 实现期 | -| 2 | 多敌语义默认零消费者复验——默认 unit_count=1 下多敌路径仅测试根可达(死码风险);C1 落地 unit_count>1 真实遭遇后复验 AC-5/9/10 夹具根是否升级为默认根内容;C1 须真实消费 unit_count>1(Boss/精英战最廉价的构成表达),且 Boss 表达不能只靠 unit_count——同种同拍 ×3 = 伤害乘法、非 Boss 幻想 | C1 遭遇分布定稿 | C1 GDD | -| 3 | 条款 3 左臂载体——基础攻击恒存在后"载体悬空、内容态不可通关"事实已闭环;残余 = 左臂当量换算口径(锚参照回迁 attack_up 当量——B4 F4 / registry anchor_warning)随 B1 对照表对账 | B1 | B1 GDD 强制检查点 | -| 4 | 原型参考值溯源——敌 18HP/4ATK、伏击 +3、hero max_hp 均 provisional 且出处待查(D2 Tuning Knobs 既有登记义务);回填定值前补原型 REPORT 溯源,查无出处则按 C3 调参所有权重定 | 本 GDD 回填定稿时 | EnemyTable/HeroTable 定值回填 | -| 5 | HeroTable 单行校验落点——schema validate() vs loader 缝两处恰一承载(AC-13 腿3 / 可选根 hero_extra_row manifest 行) | 实现期 ADR/D2 | Technical Setup | -| 6 | 标错惩罚候选与伏击清单联动——候选"敌方伏击+1"若实测采纳:事件源 = flag_judged{hit=false}(旗落非雷格)、不在 Rule 5 cell_revealed{kind=mine} 转化路径内;B3 需新增行且 source_class 需新枚举值(如 flag_miss)——source_class 枚举属 B3 结构冻结项、须走 B3 GDD 修订(接口漂移)非"加行";B2 侧伏击清单联动修订 + F3 重验触发(非 mine_hit 源)强制重跑;若错标为 mine_hit:P2 归因明细行来源失实(标错被记成踩雷) | A2 OQ1 实测会话 | A2 /design-review 核对在位 | -| 7 | 精英/Boss 遭遇编码位预登记——难度 = f(关卡序号, 节点深度, 精英/Boss 修饰);A1 BoardGenTable 已预留 elite_/boss_ 命名空间与改键退路;本表键冻结 (level_index, node_depth, enemy_id) 且"每行集恰一敌种"入结构冻结——若 C1 定稿分支地图使同深度并存普通与精英节点,精英编码无键位(同深度第二敌种行触发行集校验致命);届时改键(如追加 encounter_class 维度)走 D2 Rule 4 接口漂移修订,schema/AC-12/夹具/registry 连锁回写(A1 OQ6 镜像) | C1/C3 | C1 GDD 定稿强制核对 | -| 8 | goblin 单拍环体验证伪——goblin 环长 1、无前摇无空窗,玩家可能将其感受为"自动平砍的血条"(恰为体验锚点反向对照);MVP 实际读怪内容仅剩 bugbear 一环;预注册证伪项:playtest 采集"goblin 是否被读"信号;证伪则两拍环备用案(如 [attack, charge])由 C3 内容所有权处置、本 GDD 结构不变 | C3/playtest | 垂直切片 playtest | -| 9 | 零伤害死局组合与跨表量级护栏——hero 侧恒零伤害分支已被 HeroTable.atk 域下界([1,999]、0 加载拒绝)结构杜绝;残余 = 行 atk=0 ∧ cap=0 → 无威胁敌(内容调参禁区、非死局);atk×mult 上界与 max_hp 域无跨表量级护栏——遭遇行配置期跨字段校验落点裁决(ActionEconomyTable 跨字段校验先例),详见 analysis 问题 6 | 实现期 ADR/D2 | Technical Setup | - -### 迁移登记(两件套迁移发现的冲突——未自行裁决,待拍板) - -| # | 冲突 | 说明 | -|---|---|---| -| OQ-迁移-1 | MVP 名录表述漂移 | 原文 Rule 3 人话"MVP 恰两种敌人" + 双敌种内容行(goblin 18hp/4atk 原型占位、bugbear heavy_multiplier=2)与 同文 AC-14/AC-16③ 定值断言及版本历史 C3 修订批"物种集 = {goblin, bugbear, ogre_chief}"、registry `enemy.mvp_content` 三敌种六行具体行值(如 goblin L1 D0 24hp/7atk ×[1,2]、ogre_chief L1 D4 150/9 ×1、heavy_multiplier=2 全员)不一致。新 design 按数值单一事实源纪律以 registry 为准写三敌种(未自行裁决最终表述);原 18/4 占位行值与 registry v3 行值不一致——OQ4 原型溯源时应一并核对哪组为定值候选。 | -| OQ-迁移-2 | registry 敌方攻击区间批未入 GDD | registry `enemy.fields` 已登记 atk_min/atk_max 可选配对 int [0,999](上阶/下阶区间随机;缺省 = 定值行向后兼容;atk = (min+max)/2 中点锚;roll 时机 = 遭遇骰同流、spawn 期整战持久;B1.begin_battle roll → B2.spawn enemy_atk_override 收确定值;MVP 六行 ±3 provisional 归 C3;验收 = 完美策略档 0 加成通关 ≤40%〔registry OQ7〕),注记"正式侧 GDD/registry 修订批随 ADR-0009 同批"。本 GDD 原文尚无该字段与 spawn 参数;本次格式迁移不发明内容、未写入 design——待 ADR-0009 修订批正式落地时补入 schema/AC/spawn 签名。 | - -## 附录 - -### 附录 A:registry / 接口漂移回写义务与一致性核对(审计台账) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| R-1 | B3 单敌假设回验结果 = 不成立(定多敌)→ 触发 B3 预登记的接口漂移条款("定多敌即触发 target_ref 接口漂移补列"):registry status_effect.single_enemy_assumption 注记更新 + systems-index 门禁记录登记(B3 GDD 正文不改,以其"以 registry 为准"先例承载) | B3 / registry | 待回写(Phase 5b/5d) | -| R-2 | 索引 B2 行描述为窄口径("敌人类型/词条、目标选择规则")→ Phase 5d 更新进度行时补战斗单位系统身份(CD 门禁扩容口径) | systems-index | 待回写(Phase 5d) | -| R-3 | registry status_effect.ambush 量纲定稿注记回写(F2 定稿——B3 registry OQ2 关闭条件) | B3 / registry | 待回写(Phase 5b) | -| R-4 | HeroTable 新增 → D2 Core Rules 表清单 + registry 接口漂移回写 | D2 / registry | 待回写 | - -双向一致性核对(systems-index 依赖分层表):B2 ← D2 ✅(索引仅此一条硬边,其余为事实读取不列边——D2 注记口径);B1 ← …B2 ✅ · C3 ← D2,B2 ✅ · C1 ← C2,C3,B2,B4 ✅。 - -### 附录 B:验收支撑材料(原 lean 件验收节承载,全文保留) - -#### B-1 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | B2 是单位层纯逻辑类——非 autoload、无场景依附、无自有渲染面。冒烟载体 = `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree 以获得 quit(code)、ConfigDB autoload 由脚本显式实例化);单位容器与两表 schema 经 class_name 直引实例化(每用例全新实例、无跨用例状态——AC-17 扫描对该实例化路径豁免);每用例先 `reset_diagnostics()`(D2 冒烟协议,全局声明) | -| 被测面与调用方 | B1 未实现(设计顺序第 9 位)——冒烟直接驱动 B2 最小 API 面(冒烟脚本扮演编排方,按"实例化 → 查询 → 受击 → 推进 → 消亡"结算编排序列驱动);B1 就绪后改走真实调用方(结算编排)、断言口径不变 | -| 时序口径 | B2 无结算 API——"一次结算"在冒烟中 = 调用方对每个存活敌单位恰一次 advance(含兑付读值与受击注入)的构造窗口(主角无行为环、不在推进域内——Rule 4);"每结算恰一次推进"是 B1 义务①——冒烟以构造序保证前提、不断言编排正确性;"轮到该单位之前被杀" = 同一构造窗口内 advance(u) 之前的 apply_damage(u, …);多步 GIVEN 均给出构造序列 | -| 只读观测量 | 敌单位投影七字段 enemy_id · hp · max_hp · atk · heavy_multiplier · pattern(快照)· advantage_per_round_cap(快照)+ beat(当前拍)+ 存活态;hero 投影 hp · max_hp · atk | -| 相位与投影 | Alive/Dead 由 query_alive 成员差分推断(Dead 句柄经 query_beat 冻结值可读);Despawned = 逻辑失效态(状态位实现——容器为 RefCounted 纯逻辑类、对象不提前释放;失效句柄上查询返回空 + 诊断、作用接口拒绝;瞬态纪律同 A3 RoundEnd);Unspawned 无观测量;投影一律为快照(pattern 等引用字段返回拷贝——原地改写返回值不影响容器,AC-11 腿 3);容器公开可写属性为零(hp 等仅经 apply_damage 变更——AC-17 扫描域);实例不变式(hp ∈ [0, max_hp]、敌单位数 = unit_count、指针 ∈ [0, 环长))为 debug 断言自守——违规路径不可由封闭 API 构造(负空间)、不经冒烟断言(进程致命保留给 D2 数据通道);行为级证据 = AC-1(数)、AC-3(指针)、AC-4/AC-6(hp floor) | -| 期望值纪律 | hp(18)/atk(4)/heavy_multiplier(2)/unit_count/max_hp 均为 provisional knob(Tuning Knobs 节)——各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导、不写死;记号:h_g/a_g(goblin 行)、h_e/a_e/m_e(bugbear 行)、u_c、M_h、c_r(所在行 cap)、p_g/p_e(pattern 表读值)、m_amb = StatusEffectTable.ambush.magnitude 表读值(仅作 AC-7 注入值来源);pattern 环内容属内容行调参(C3 所有权)——轨迹断言一律按 p 表读值推导;L/mines_r/n 等入参为构造选择(显式登记)、期望值由表读值推导 | -| 结构定值断言 | 合法集:敌种 id 集 {goblin, bugbear, ogre_chief}(Rule 3 MVP 收窄——C3 修订批扩容三敌种)、pattern 元素域 {attack, charge, heavy}(枚举封闭)、每行集恰一敌种、HeroTable 单行、HeroTable.atk 域 [1,999](0 加载拒绝;MVP 值 6 provisional 不作定值断言) | -| 致命类收窄与 manifest | B2 冒烟设恰两根致命夹具(均为 B2 表特有校验类别):runner manifest 退出码行 rowset_dup→≠0 · pattern_reserved→≠0(独立 headless 进程、游戏通道,D2 AC-2b 协议同型);其余致命类别(D2 R1 悬空敌种/行集缺行〔EC13〕、遭遇坐标越界〔EC14〕、通用枚举域/域校验)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留——B2 冒烟仅以合法坐标驱动 spawn);HeroTable 单行类别条件性(可选根);schema 侧以程序构造断言域类别(AC-12/13) | - -#### B-2 冒烟 API 面(provisional,封闭枚举——实现期 ADR 定名) - -| API | 签名 | 语义与返回口径 | -|---|---|---| -| spawn | `spawn(level_index, node_depth, hero_hp, n) -> bool`(n = 本战实际数量 override——B1 encounter 骰;定值行/省略 n = unit_count 表值) | 解析遭遇行 → 行值快照 → 实例化 n 个敌单位(行主序生成序)+ 主角(hp 入参,MVP 冒烟以 max_hp 入参——Rule 9);Alive 相位重复 spawn → false + 诊断(相位守卫) | -| query_alive | `query_alive(side) -> Array` | side ∈ {hero, enemy};生成序稳定枚举;只读 | -| query_beat | `query_beat(u) -> String` | 当前拍 ∈ pattern 元素;Dead 句柄保留只读可查(冻结不变式的观测量);hero 句柄 → 空 + 诊断(主角无行为环——Rule 4);只读 | -| query_attack | `query_attack(u, L, m_amb) -> {baseline, attach, total}` | F2 分量供给面;L/m_amb 由调用方供值(B1 兑付读值的冒烟等价——B2 对 B3 零运行时依赖的边界由此保持);L 为判别探针入参、B2 不校验其游戏态域(游戏态域由 F3 预截流承载);Dead 句柄 → {0, 0, 0} + 诊断;只读 | -| apply_damage | `apply_damage(u, n) -> bool` | 受击上报;hp 递减、floor 0 → Dead;n ≤ 0 → false + 诊断(无伤害作用非法);Dead 句柄 → false + 诊断(MVP 无复活) | -| advance | `advance(u) -> bool` | 存活才推进("先作用后推进"的推进半);false 分两级:存活校验失败 = 轮到前被杀的预期冻结、无诊断(EC1 常态路径——抢杀窗口是设计卖点,诊断刷屏会淹没信号);相位/句柄失效 = false + 诊断;hero 句柄 → false + 诊断 | -| default_target | `default_target() -> u\|null` | 固定顺位供给面;只读 | -| ambush_grant_plan | `ambush_grant_plan(mines_r, cap) -> {granted, overflow}` | F3 机制算术纯函数——B1 预截流编排的消费面;只读 | -| despawn_all | `despawn_all() -> bool` | battle_over 消亡;重复调用 → false + 诊断(重复调用守卫) | - -- 返回口径:全部布尔/计数返回 = 受理/拒绝(A3 全 API 布尔口径同款)——"拒绝"直接断言返回值,附 debug 诊断、非进程致命(进程致命保留给 D2 数据通道);五个 query 面(query_alive / query_beat / query_attack / default_target / ambush_grant_plan)只读、无副作用。 -- 封闭枚举即负空间验收形态:无 summon/增援 API(EC5 负空间——战斗内不增员)、无复活 API(Dead 不可逆)、无重置/换图 API(EC11 跨图延续的结构前提)、无伏击池写 API(B2 无池——L 恒由调用方注入,EC17 读值语义);新增上述任何入口 = 接口漂移(GDD 修订非调参)。 -- ADR 前置裁决项:query_attack / ambush_grant_plan 两 face 若实现期裁决归 B1(F2"供给建议"与 F3"预截流归 B1"边界注记存在张力),对应 AC 腿迁移至 B1 冒烟、断言口径不变(OQ1)。 - -#### B-3 夹具策略 - -| 根 | 构成 | 服务 | -|---|---|---| -| 默认根 | 干净检出:EnemyTable 双敌种行 + HeroTable 单行 | 全部分支行为 AC | -| enemy_multi_unit | D2 全表清单拷贝 + EnemyTable 仅将 (L_a, D_a) 行(bugbear——三拍环)unit_count 置 3(其余字段域内合法;登记值 u_c_f = 3) | 多敌 AC(AC-5 / AC-7 腿4 / AC-9 / AC-10 腿2) | -| enemy_reloaded | D2 全表清单拷贝 + EnemyTable 数值漂移(登记:hp/atk/advantage_per_round_cap 各 +1、pattern 不动——快照差分判定用) | AC-11 | -| enemy_rowset_dup_species(致命) | D2 全表清单拷贝 + EnemyTable 默认行 + 追加一行与 (L_g, D_g) 行同 (level_index, node_depth) 而 enemy_id 相异("goblin_twin",其余字段域内合法)→ 每行集恰一敌种违规 | B2 表结构致命校验的进程级落点——manifest rowset_dup→≠0(B3 status_effect_dup_key 同型) | -| enemy_pattern_reserved(致命) | D2 全表清单拷贝 + EnemyTable (L_g, D_g) 行 pattern 追加预留值 "guard"(其余合法)→ pattern MVP 校验域拒绝预留值 | Rule 4 fail-fast 的 loader 集成缝落点——manifest pattern_reserved→≠0(A1 solver_rules 冻结先例) | -| hero_extra_row(可选根) | HeroTable 置两行(域内合法——单行全局违规) | 单行校验落点若实现期 ADR/D2 裁定在 loader 缝则启用(manifest 行 hero_rows>1→≠0),否则程序构造承载(AC-13)——可选、两处恰一承载 | - -- 行集登记常数协议(A1 黄金向量 / A2 板登记同源):(L_g, D_g) = goblin 行坐标、(L_a, D_a) = bugbear 行坐标,逐坐标手工推导记录入版本库;失效处置 = 先复核登记、登记无误即实现缺陷。 -- 多敌根选 bugbear 行(三拍环)保证判别力:goblin 行环长 1 恒 attack → 混合拍 GIVEN 不可构造、同步断言零判别力、双单位读值不可构造;改 bugbear 行后混合拍经对单单位重复 advance 构造(冒烟构造序可越出"每结算恰一次"契约——B2 无守卫、构造自由度成立)。 -- 显式声明:夹具值非 MVP 内容调参结论(Tuning Knobs 默认 unit_count = 1——多敌语义在默认根上零消费者,多敌根是 Rule 2 的测试承载、仅供冒烟)。 -- 换根加载经 `load_tables(root, collect_only=true)` 直调(非 D2 `reload()` 路径:不过 set_reload_gate、不发 config_reloaded——门语义归 D2 AC-16/B1,B3 AC-15 同款);程序构造(AC-12/AC-13):两 schema 类 class_name 直引实例、不经 load()/preload();行为夹具根经 `--data-root=` 注入(仅 debug、不入 data/tables/——D2 夹具纪律);各 AC 声明其表根、用例间无顺序依赖。 - -#### B-4 覆盖声明(out-of-scope——deferral 生效条件 = B1×6 + D1×4 义务清单,均缺项即 blocking) - -| deferral 项 | 生效条件 / 承载 | -|---|---| -| B1×① 行为环推进每结算恰一次与结算内先后次序(double-advance 无守卫——冒烟单调用方次序即构造序,B3 义务⑥同款) | B1 义务① | -| B1×② 雷→伏击事实转化恰一次 + 编排期授予/预截流调用次序(F3 编排半、EC17"先转化后兑付"次序半句) | B1 义务② | -| B1×③ 伤害 clamp/负值/溢杀语义与死亡判定时机(冒烟只断言 hp 递减、floor 0 与 Dead 翻转——"这一下是否兑现"归 B1) | B1 义务③ | -| B1×④ F4 条款 3 闭合对账(cap 表值 + 量纲 + A1 actuals p10——冒烟只供分量面与 k 可算性) | B1 义务④ | -| B1×⑤ 默认目标消费与单体/AOE 分流(冒烟只断言 default_target 供给面) | B1 义务⑤ | -| B1×⑥ 溢出"溢出未生效"明细行协议(呈现归 B5/D1——冒烟只断言 overflow 计数会计) | B1 义务⑥ | -| D1×①② 图像线索清单成文与映射每 run 恒定(Rule 8 视觉面——视觉映射不可 GIVEN-WHEN-THEN;验收形态 = 映射键契约〔enemy_id〕+ B2 侧行为级承载:行为环零随机可学〔AC-3/AC-15〕) | D1 义务①② | -| D1×③ 顺位与存活可读呈现 | D1 义务③ | -| D1×④ 敌方 side 池呈现口径(B3 敌侧延伸) | D1 义务④ | -| EC8 池蒸发腿(dur=1 轮末清池——B3 AC-8/AC-9 既有覆盖,跨引不重复;B2 侧零兑付半 = AC-7 腿3 / AC-9 腿1) | B3 AC 既有 | -| EC13/EC14 端到端致命(D2 R1/EC14 既有通道) | D2 AC-2(manifest 豁免) | -| Rule 10 后半难度修饰施加点(B2 以实例化后数值运作——修饰算式无表值可断) | C3 provisional | -| 跨战斗 HP 持久性 | C1/C2 | -| 曲线数值与遭遇分布定值(AC-14 显式不作分布定值断言) | C3 | -| atk 激活裁决——已退役:基础攻击恒存在,域断言由 AC-13/AC-14 承载 | 无遗留义务 | -| Rule 8"不直接显示数值"负空间(无意图数值 API——冒烟 API 封闭枚举承载) | API 封闭 | -| qa-lead 缺口预检 7 项处置:预检 1/2 入 OQ①②;预检 3/4 随批修正 F4 满配语境与 EC17 切分;预检 5–7 承载于 ADR 裁决项 / HeroTable 可选根 / 坐标登记协议 | 已处置 | - -#### B-5 覆盖矩阵(qa-lead 交付,验收评审用) - -| 类别 | 映射 | -|---|---| -| Core Rules(11/11) | 1→AC-1/AC-6/AC-2(clamp·溢杀·死亡时机→OOS B1×③)· 2→AC-1/AC-5/AC-9(side-wide 兼容与 target_ref 扩展位→B3 接口漂移义务随批 B1/D1、非冒烟域)· 3→AC-12/AC-14/AC-13 · 4→AC-3/AC-4/AC-5/AC-15(预留值拒绝→AC-12+manifest pattern_reserved)· 5→AC-8(每雷恰一次→OOS B1×②;溢出明细行→OOS B1×⑥+B5)· 6→AC-7/AC-16④(量纲锚验收→B4/B1,排除声明)· 7→AC-10(消费分流→OOS B1×⑤;顺位可读→D1×③)· 8→映射键契约(enemy_id)+AC-3/AC-15(行为环可学性承载)+OOS D1×①②、"不显示数值"负空间=API 封闭 · 9→AC-1/AC-2/AC-13/AC-14 · 10→AC-1/AC-11(D2 R1 解析致命→OOS D2 通道;难度修饰→C3 provisional)· 11→AC-15/AC-17(调用权集中→OOS B1×①) | -| Formulas | F1→AC-3/AC-4/AC-5 · F2→AC-7 · F3→AC-8 · F4→AC-9(闭合对账→OOS B1×④) | -| EC(17 条) | EC1→AC-4 腿1/腿2 · EC2→AC-5 腿2 · EC3→AC-6 腿1+AC-10 腿3 · EC4→AC-6 腿2 · EC5→冒烟 API 封闭(负空间——无 summon API 不可 G-W-T,B3 Rule 8 先例)+AC-5 腿3+AC-17 · EC6→AC-8 腿4+AC-12(cap=0 合法腿)· EC7→AC-8 腿3 · EC8→AC-7 腿3+AC-9 腿1(池蒸发腿→B3 AC 既有覆盖,OOS 跨引)· EC9→AC-4 腿1 · EC10→AC-3 腿3 · EC11→AC-3 腿4(跨图结构裁决)+AC-2/AC-6(相位重复守卫,B3 EC11 同款)· EC12→AC-11 · EC13→OOS(D2 R1 通道,D2 AC-2 同类别夹具,manifest 豁免声明)· EC14→OOS(D2 EC14 通道,同前)· EC15→AC-10 腿1 · EC16→AC-2 · EC17→AC-7 腿4(读值即时性/纯函数半)+OOS B1×①②(次序半) | -| 无洞声明 | 17 条 EC 中 EC5/EC13/EC14 三处非 G-W-T 形态,分别以 API 封闭负空间声明与 D2 通道豁免承载(B3 Rule 8 负空间 + 致命收窄豁免先例同款);其余全部映射到 AC 或显式 OOS(deferral 生效条件 = B1×6/D1×4 已登记缺项即 blocking) | - -### 附录 C:显式排除声明(数值与机制平衡归属) - -| 对象 | 归属 | -|---|---| -| 伤害 clamp/地板/溢杀、乘区合成、减伤读法、死亡判定时机 | B1 SettlementTable | -| F1 条款 3 不等式闭合对账(输入 = A1 actuals p10,非 target 参数) | B1 单一 owner | -| m_amb(+3)行值锚验收、weaken 档位 | B4/B1(A3 条款 2/3) | -| 敌种 hp/atk/pattern 曲线数值、难度修饰 | C3 | -| 伤害道具/奖励池(hero 侧伤害来源) | B4 | - -B2 只对"套路怎么转、一下打多少的两块拼图、一轮吃几层、交给 B1 对账的口径"负责。 - -### 附录 D:去向映射(零丢失可审计证据) - -| 原文节 | 落点 | -|---|---| -| 头部(状态/版本/承载支柱/一句话/复核注记) | design 头部(状态/版本/一句话/推演件);承载支柱 → design 设计目的定位段;复核注记 → analysis 文首注记 | -| 速览(定位/拥有/不拥有/上游/下游/硬约束) | design 设计目的 + 系统范围 + 依赖与输出;硬约束 → design 系统范围 | -| 体验锚点(情绪目标/支柱表/护栏/参考合成) | 承诺 → design 设计目的编号体验承诺 + 反向护栏;论证全文 → analysis 问题 5 | -| 全局流程(行为环字符画 + 出口分发表) | design 核心循环 | -| 核心规则 1 / 11 | design 单位与状态·规则 1–2 | -| 核心规则 2 / 3 + 规则 2 实现参照(多敌模型表) | design 敌人构成与名录·规则 1–2 + 名录表 | -| 核心规则 4 + 规则 4 实现参照(推进细则表) | design 行为环·规则 1 + 细则表 | -| 核心规则 5 / 6(含 cap 行为表) | design 伏击·规则 1–2 + cap 表 | -| 核心规则 7 / 8 + 规则 8 实现参照(五条规格表) | design 目标选择与读怪·规则 1–2 + 规格表 | -| 核心规则 9 / 10 | design 主角与实例化·规则 1–2 | -| 枚举(行为拍七类 + pattern 域注记 + MVP 双敌种内容行) | design 行为环枚举表 + 敌人构成名录表;双敌种占位行值与三敌种表述漂移 → analysis OQ-迁移-1 | -| EnemyTable / HeroTable schema | design 数据表 Schema | -| 数值结论与推导 F1–F4(结论/推导/Variables/验算/Output Range/边界注记/术语) | 结论 + 表达式 + 术语 → design 数值公式;推导论证/验算表/Output Range/量级注记 → analysis 问题 1–3 | -| 显式排除声明 | design 系统范围不负责清单 + analysis 附录 C | -| 状态(四态表 + 不变式) | design 单位与状态 | -| 边界情况 EC1–EC17 | design 规则内联边界(EC 编号随文保留:规则句尾/出口表/AC 覆盖列)+ analysis 附录 B-5 映射 | -| 依赖(上游/下游表 + 双向一致性核对) | design 依赖与输出表;核对记录 → analysis 附录 A | -| 义务台账(B1×6 / D1×4) | design 依赖与输出·义务台账(活契约) | -| registry / 接口漂移回写义务 R-1–R-4 | analysis 附录 A(历史审计台账) | -| 呈现与 UI 契约(数据面义务 8 行) | design 依赖与输出·呈现契约 | -| Tuning Knobs(knob 表/非 knob/交互/所有权) | 字段·域·默认·owner → design 调参表;调过高/调过低方向论证 → analysis 问题 6 | -| 验收标准·测试口径 / 冒烟 API 面 / 夹具策略 | analysis 附录 B-1/B-2/B-3(design 验收标准口径摘要指针) | -| 验收标准·AC 清单(AC-1–AC-17) | design 验收标准 GWT 表(编号不变) | -| 验收标准·覆盖声明 / 覆盖矩阵 | analysis 附录 B-4/B-5 | -| 开放问题 OQ1–OQ9 | analysis 开放问题(编号保留、全文保留) | -| 版本历史(5 行) | design 版本历史(原行全保留 + 追加 v2 行) | diff --git a/design/archive/gdd-2026-09-14/analysis/b3-status-effect.md b/design/archive/gdd-2026-09-14/analysis/b3-status-effect.md deleted file mode 100644 index ebda6010..00000000 --- a/design/archive/gdd-2026-09-14/analysis/b3-status-effect.md +++ /dev/null @@ -1,282 +0,0 @@ -# B3 增益/状态系统 设计推演 - -> 状态:concluded(部分问题随 B1/B4 门禁与 playtest 联动,见开放问题区)· 本文只装"为什么"——`design/gdd/b3-status-effect.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 - -## 问题 1:为什么四类持续效果共用一个容器、一套机制? - -### 广度分析 - -- 候选 A:每类效果各自容器/各写一套计时叠层逻辑——收益:各类可定制;代价:四套生命周期代码、结算明细无法逐行统一归因、四源当量对照无实物载体。 -- 候选 B:统一容器、三向效果同构实例(采纳)——收益:机制一套、归因一门语言;代价:容器必须足够" dumb ",不能承载任何效果语义。 -- 候选 C:状态挂在 B1 结算内部——收益:少一个系统;代价:结算编排同时当账本,可回放步骤流失去独立状态侧前提,P2 归因字段无明确 owner。 - -### 深度分析 - -统一容器让"效果"成为一门单一语言:它是 A3 条款 1"四源统一当量"的对照实物、B1 结算的单一对接面、可回放步骤流的状态侧前提。机制与内容分离是结构原则——B3 只拥有机制(时限/叠层/衰减/生命周期/兑付接口),效果内容的经济归属归各锚 owner(B4/B2),二者不混。 - -### 综合判断 - -采用候选 B。design 件「系统范围」与 Rule 1 只出现本结论;四规矩(寿命=一场战斗 / 跨轮跨图延续 / 零随机 / 敌侧共享)为既有定稿口径的承载,其中"不跨战斗"为 game-concept 定稿,多敌共享读法按 registry single_enemy_assumption 登记。 - -## 问题 2:时限为什么用"剩余结算次数"这单一量纲? - -### 广度分析 - -- 候选 A:按轮数计时——收益:直觉;代价:"轮"与"兑付次数"在停手轮/弃图轮分叉,免费延时漏洞。 -- 候选 B:按时长/秒——收益:无;代价:回合制无意义,引入墙钟。 -- 候选 C:剩余结算次数倒数(采纳)——收益:读数即规划素材;代价:dur=1 语义须靠"先兑付后衰减"时序契约才完整。 - -### 深度分析 - -P1 规划素材的成立条件 = 增益携带明确的剩余结算次数与到期时机,玩家才能把它纳入挖哪格的推理;时限语义透明度是规划感的前提。计数量纲与兑付次数同物后,"停手不挖的轮、弃图刷新的轮照常算一次结算、计数照减"成为自然推论——不存在"不结算就不掉次数"的免费延时。dur=1 的"一次性"全部机制内容 = 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末 R=0 移除,由 F3 时序契约闭合。 - -验算示例(F3 Example 原文留档):轮 3:编排期授予 attack_up(L=1、R=D_a=1)→ 兑付 +50% → decay_round()=1(移除);轮 4 query_active(hero) 已不含 attack_up。dur ≥ 2 行(策略探针 D_f=3):授予后逐轮兑付、R 逐轮 −1、第 3 轮末移除——R 轨迹与 k 全由表读值推导。 - -### 综合判断 - -采用候选 C 并结构冻结(非 knob)。时限量纲 = remaining_settlements 为 game-concept 定稿口径;最后一轮(敌人全灭)是否 decay 归 B1 判定次序域(A3 EC8 同款——battle_end 全清兜底,两种次序产生同终态)。 - -## 问题 3:叠层为什么按行 stack_policy 三分支、stack 为什么不重置 R? - -### 广度分析 - -- 候选 A:stack 授予同时重置 R——收益:玩家"早拿不亏";代价:stack ≡ refresh + 加层,三分支失去区分性。 -- 候选 B:stack 加层不触碰 R、refresh 重置 R 取实例授予时快照 D、independent 并存(采纳,用户拍板、结构冻结)——收益:三分支语义正交;代价:dur ≥ 2 行存在"早拿必亏"读法(见下)。 -- 候选 C:单一全局策略写死代码——收益:简单;代价:未来内容行被锁死,违反数据表驱动(Rule 9)。 - -### 深度分析 - -spec 决议(F1 注):duration_settlements 只有初始授予定钟;若 stack 也重置 R,则 stack ≡ refresh + 加层。refresh 的重置目标 D 取实例持有的授予时快照(与 EC9 快照语义一致——实例不受表重载影响)。 - -验算示例(F1 Example 原文留档):attack_up(stack,D_a=1、M=2):轮 3 同轮授予批次两个安全格事实 → apply_effect×2 → L=2、R=1;同轮第 3 个授予 → L=2=M → **false**(明细"溢出未生效"行);兑付 +100%(F2)→ 轮末 decay R=0 移除。weaken(stack,D_w=1、M=16):轮 3 三旗命中三雷(雷格实例键,三次授予均合法)→ L=3、R=1;兑付 3×m_w(默认 65 → −195%)→ decay 移除;轮 4 一旗命中新雷 → 旧实例已销毁,**新建** {L=1, R=1}——dur=1 行的层只在单轮授予批次内累积,跨轮必为新实例。dur ≥ 2 行(策略探针 D_f=3):跨轮 R 逐轮 −1,refresh 腿见 AC-5。 - -体验面反例(OQ7 证伪项):"早拿必亏"——分轮拿满总暴露 150pp vs 同轮拿满 200pp(算例基线 = dur=2 行值);现行四行 D=1 下两读法总暴露相等、不对称休眠,dur ≥ 2 内容行上线时激活。该不对称叠加奖励身份不可预读(创意风险 #1)可能伤害"把 buff 纳入挖掘推理"的规划感(P1)。补偿载体先行:B4 奖励身份预读 + D5"同轮拿满优于跨轮叠"教学;证伪成立则走结构冻结修订流程回炉(合并/重定义 stack 分支)——非调参。 - -### 综合判断 - -采纳候选 B 并结构冻结;体验面反例登记为 OQ7 playtest 证伪项,补偿载体已登记为 B4/D5 义务。合并在授予时执行、结算作用顺序归 B1 SettlementTable——两序分离,互不干扰。 - -## 问题 4:weaken 档位怎么锚定?(F0 裁决全程) - -### 广度分析 - -| 分支 | schema 可行性 | 后果 | 裁决 | -|---|---|---|---| -| 每结算瞬时当量 | 可行(m_w ≥ 51 即过锚——percent 域内) | F2 越域界随移(AP 界 8×m_w / 表界 16×m_w);地板交叉层数 = ⌈100/m_w⌉ = 2;上调的连带成本(地板提前到达、边际层贬值)入裁决 | 采纳 | -| 每 AP 总暴露 | 不可行——需 m_w > 100,被 percent ∈ [−100, 100] schema 域禁止 | 现实解 = B4 重定最低档参照(非上调)——未采纳 | 排除 | - -### 深度分析 - -- 同分母性:瞬时口径下 weaken 与 hero 侧 buff 作用于同一伤害流,"严格大于"在百分点读法与 HP 读法下等价,锚判定无量纲歧义;总暴露口径引入时长权重,把 duration knob 泄漏进锚判定。 -- 机制同构:B3 本就按结算逐次兑付,瞬时口径是容器原生口径;总暴露需跨结算累计账本,与已锁的"单结算自然边界"(dur=1 每结算清零无存量)冲突。 -- 值域依据(@D_ref=12):下界 60 = 条款 2 两腿可行交集(腿一 m_w ≥ 51——65 > 50 严格大于 attack_up 当量〔参照对象,registry 回迁口径〕;腿二随 E_dig 口径修正放宽——m_w ≥ 38,以 B1 GDD F0 重算回执为准);上界 85 = 超出仅在连锁贫瘠板增加裕度、地板交叉层数恒 2;schema 顶 100 保留为绝对上界。 -- 红警关闭:原 −25 值在两个独立线性代理下同向预检不过(条款 2 锚差约 4×,且"单一线性换算"堵死分源改率、"无单档上限"堵死 max_stack 豁免)——F0 修订后锚两腿通过(瞬时当量 7.8 > 6.0 严格大于 ✓ / 7.8 ≥ E_dig 4.5 ✓——E_dig 读数随 2026-09-14 B1 重算批口径更新,原 7.2 随口径退役);终值共裁与 registry 终值确认联动 B1 OQ2(见开放问题 #1)。 -- 修复空间不对称(历史登记):每结算瞬时当量归一 m_w≥51 可行(F2 越域界随移 AP 界 −408%/表界 −816%——系 −25 口径旧值);每 AP 总暴露归一 m_w>100 被 percent 域禁止(该分支不可行)——OQ1 前置步骤曾是"B1 先钉死归一口径,口径落定前禁止数值修订";落总暴露则现实解 = B4 重定最低档参照。 -- 参照对象迁移史:最低档安全格 buff 当量的参照对象曾迁 defense_up 当量(attack_up 时为死行——B4 F4 迁移);2026-09-11 用户裁决"基础攻击恒存在"(HeroTable.atk 域 [1,999]、0 加载拒绝、MVP=6)后 attack_up 复活,参照对象回迁 attack_up 当量(消费面 = 主角战斗段先手攻击);defense_up 迁移退役为历史记录,attack_up 入池时 tier_min_buff 重算。defense_up |−50|×dur2 与 attack_up 数值巧合全等(100pp),迁移期结论不变;迁移后预检未按新参照重跑的义务已于 2026-09-14 B1 重算批兑现(F0/F1 按 attack_up 当量重跑 + F1 锚对照实物改 attack_up 行——迁移注记关闭)。 -- 地板更正:地板 = 乘数零点 −100pp、交叉层数 = ⌈100/m_w⌉ = 2(原"7 层触地板"预读按 −400% 合成带估读,更正)。 - -### 综合判断 - -m_w 值域 [60, 85]、默认 −65;归一口径 = 每结算瞬时当量;B3 接口零修订、值变更走 registry 回写——回执以 B1 GDD F0 为准(registry status_effect.anchor_warning)。终值 = B4/B1 共裁(B1 OQ2);裁决时复查 AC-14 腿 3 非平凡性。此节为已裁决设计争议的完整留档。 - -## 问题 5:合成值为什么不在 B3 内 clamp? - -### 广度分析 - -- 候选 A:B3 输出前 clamp 到 percent 域——收益:下游省心;代价:地板语义被藏进容器,B1 换算方向无从成文,"不 clamp"不可判定。 -- 候选 B:L×m 原样输出、地板/clamp/换算归 B1 SettlementTable(采纳)——收益:职责单一、可判定(载荷与表值推导值恒相等,任何地板都会使其不等);代价:越域值在边界情况显性存在(EC7)。 - -### 深度分析 - -B3 只对"L×m 线性合成 + R 计数"负责。weaken 合成下界两档并列:AP 界 = 8×m_w(默认 65 → −520%;默认经济下 flag_hit 单轮 ≤ ap_per_round=8 次授予、dur=1 层只在单轮累积 → L=8)与表界 = 16×m_w(默认 65 → −1040%;仅非 AP 源如 clear_reward 授予、或 ap_per_round 调参后可达 L=16)——两档均越域,均不在本系统内收口。乘算读法(1.5^L)在 B3 语义域外;percent 行的 L×m 是百分点线性叠加。行值出处(provenance,如"原型 1.5×")是数值来历标注,非合成语义。跨 effect_id 聚合、percent 与 flat 混算 = B1 SettlementTable 域。 - -验算示例(F2 Example 原文留档):attack_up L=2 → +100 percent(兑换成 2.0× 与否的读法归 B1);defense_up L=2 → −60 percent(B1 换算 0.4×——现行值链下不触地板,"归零"读法须 B1 定义);weaken L=8 → 8×m_w(默认 −520 percent);ambush L=3 → **+9 flat**(3×m_amb——B3 不解释单位)。 - -### 综合判断 - -采纳候选 B。合成值多大算强、多弱算废、floor 在哪、+3 打谁——均不在本 GDD 语义域(显式排除声明);B1 义务③(percent→乘数换算方向与合成值地板成文)是其对侧承载,AP/表界数值随 F0 修订更新为 −520%/−1040%。 - -## 问题 6:数值归属为什么这样切分(B3 无平衡公式)? - -### 广度分析 - -- 候选 A:B3 自带平衡公式(值该多大写进本 GDD)——代价:与 B4 奖励经济、B2 敌情上限、B1 结算换算四方争同一事实源。 -- 候选 B:机制数学(合并/合成/衰减)归 B3,平衡与语义归属逐项划给锚 owner(采纳)。 - -### 深度分析 - -逐项归属依据:效果档位当量对照表(四源统一当量、单一线性换算)归 B1(出表方兼闭合对账单一签字人,A3 F1 条款 1);weaken 档位锚归 B4 表设计 + B1 对照验收(条款 2,基准 = 连锁放大边际挖掘收益,provisional 1:1);挖掘风险不等式(P(安全)×buff 当量下界 > P(雷)×敌方增益当量上界)归 B2 供给上限表值、B1 单一闭合对账(条款 3);奖励定价(清图奖励及 B4 三硬约束:雾内档位下界 / 锚随雾成本上浮 / 净当量优势带上界)归 B4(A4 pricing_constraints、条款 4/5);percent 消费侧换算与地板归 B1 SettlementTable,flat 量纲归 B2(已定稿)。 - -Rule 10 收编史:A3 OQ5"标中旗 debuff 档位归 B4 表设计"经用户 2026-09-08 拍板收编——四行 MVP 初值定稿权归 B3(已定稿),锚验收权仍归 B4/B2/B1(条款 2 + A4 三定价硬约束引用的"最低档安全格 buff 当量"以 attack_up 行为参照对象),修订走接口漂移回写 registry ownership_note;A3 GDD(Approved)不改,以该条 + registry 为准。这是对"档位归奖励表设计"的显式收编——初值定稿权与锚验收权分离。 - -### 综合判断 - -采纳候选 B。B3 无平衡公式;四行 MVP 值全部 provisional;改初值 = 接口漂移回写 registry,不是随手调参。 - -## 问题 7:满层为什么是"拒绝 + 留痕"而不是覆盖或静默? - -### 广度分析 - -- 候选 A:满层覆盖最旧层——代价:寿命被偷偷重置,违反"stack 不触碰 R"决议;玩家不可规划。 -- 候选 B:满层静默吞掉——代价:奖励蒸发无痕迹,违反 P2 诚实。 -- 候选 C:拒绝原子(false + 容器逐字不变)+ "溢出未生效"明细行含来源(采纳)。 - -### 深度分析 - -奖励的浪费是诚实的、可规划的:玩家看得到"这层白拿了",下次就懂得满层时别再拿同款。无论这份重复来自玩家直接踩出的格子、结算转化、还是连锁展开自动开出的奖励格,都走同一个授予入口,满层时同样产生溢出行、同样留痕。拒绝原子性保证无半写、无溢出落层;同轮多授予谁被拒取决于 B1 授予次序——授予次序确定性是 B1 编排义务(义务①)。 - -原则张力留档(EC4):refresh 空刷新静默返 true 与 Rule 5"不静默蒸发"存在张力(stack 有溢出行、refresh 无对应物)——MVP 零消费者故休眠,首个 refresh 内容行上线时其授予可见性语义由 B4/B1 随 OQ3 一并裁决。 - -### 综合判断 - -采纳候选 C。呈现归 B5/D1(溢出行呈现、origin_cell 玩家可读形态两项义务已登记)。 - -## 问题 8:体验锚点如何落到机制?(P1/P2/P3 论证) - -### 广度分析 - -| 支柱 | 关键词 | 机制承诺 | -|---|---|---| -| P2 可归因的兑现感 | "我攒下的东西正在替我打架" | 每个状态实例携带来源标注(安全格/标中旗/清图/雷),结算明细逐行生效——P2 准话测试"这个结果是我哪步扫雷带来的?"在 B3 字段里就有答案;"规划的延迟兑现"从口号变成可见事实的机制落点 | -| P3 雷的两面 | "雷是赌桌不是陷阱" | 踩雷的敌方增益行与标中旗的削弱行在结算明细里使用同一呈现语言,玩家由此学会雷的两面;旗标对的即时回报部分补偿 chord 缺席的兑现节拍缺失(CD 创意风险 #3 的关联缓解,正式高光设计归 B1/B4) | -| P1 规划素材 | "还剩几次结算、何时到期" | 增益携带明确的剩余结算次数与到期时机,玩家才能把它纳入挖哪格的推理——时限语义的透明度是规划感的前提;满层溢出行可见("满层时别再拿同款") | - -反向护栏:状态效果绝不能是无感的暗账——玩家说不出一行结算"从哪来",来源标注即失职(违反 P2);任何让 buff 时限/剩余次数不可读的设计默认砍掉。 - -### 深度分析 - -参考感受:杀戮尖塔的增益图标(时机与层数一目了然,是决策素材而非装饰)、Peglin 神器在关键时刻叠加生效的"攒出来的强大"。两者共同指向:状态图标是决策素材,时限/层数不可读 = 机制白做。旗标对的即时回报与 CD 创意风险 #3(chord 缺席的兑现节拍缺失)是关联缓解而非正式高光——正式高光设计归 B1/B4,B3 只提供字段与兑付面。 - -### 综合判断 - -三锚点全部由已有字段承载(六归因字段 + display_name + 授予时快照),无新增机制需求;呈现侧三要素(图标/层数/剩余结算次数)与极性映射登记为 D1/B5 数据面义务。 - -## 问题 9:defense_up −50→−30(减伤墙批)的数值论证 - -### 广度分析 - -- 候选 A:维持 −50——代价:叠满两层 −100 恰触 percent 地板,免伤轮由 defense_up 单侧可达,防御型奖励失控(减伤墙)。 -- 候选 B:回调 −30(采纳,C3 投值)——叠满两层 −60 帽,免伤轮不再由 defense_up 单侧可达。 - -### 深度分析 - -定量坐实:defense_scan 墙轮 39% / 真人 12 轮零承伤。回调后免伤轮现行可达路径 = weaken 饱和(敌侧单结算零输出);defense_up 叠满 = 0.4× 承伤(消费读法归 B1),B1 地板规则压力同步解除。回调下界 = 减伤墙复发——观测锚 = C3 承伤带复验与 B1 条款③重跑。该回调即"禁独立调参"联动网络的实证:defense_up.magnitude/duration 已纳入 m_w↔D_ref↔m_d↔duration_d 联动网络(与 B1 Knob 交互同口径),减伤窗口强度与 attack_up 同入 B1 对账联动评估(B1 地板规则 × 战斗时长曲线 × 条款③ V_safe),禁止独立调参。 - -### 综合判断 - -−30 为现行 provisional 值;修订轨迹与免伤轮叙述同步见 design 件版本历史(对侧 B1 F2 同批)。 - -## 问题 10:四行 knob 调过高/调过低各会发生什么? - -### 广度分析(逐 knob 后果,Knob 表原文留档) - -| Knob(表行值,D2 承载) | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| attack_up.magnitude | +50 | 叠满 +100%,敌方 HP 池相对贬值(战斗时长曲线压向 B1 对账) | 安全格奖励空心化——A3 条款 3 左臂(P(安全)×buff)塌方 | -| defense_up.magnitude | −30 | 叠满 −60%(免伤轮不再由 defense_up 单侧可达——B1 地板规则压力同步解除) | 减伤无感,防御型奖励萎缩(回调下界 = 减伤墙复发——观测锚 = C3 承伤带复验与 B1 条款③重跑) | -| weaken.magnitude | −65(值域 [60, 85]) | 越域界加深(表界 16×m_w)、地板交叉层数 ⌈100/m_w⌉ 恒 2、边际层贬值 | 值域下界 60 = 条款 2 锚两腿可行交集——越界即破锚(修订方向 B4/B1 裁决) | -| ambush.magnitude | +3 flat | 量纲已定稿(每攻击类行为 +3 HP)——踩雷痛感随值放大,条款 3 上限对账归 B1 | 踩雷无痛感——P3"风险与收益同源"失衡 | -| duration_settlements(四行) | 1/1/1/1(当次结算) | 窗口拉长恢复跨轮延续(规划变简单、衰减感消失) | 已在下界 1(一次性语义——再低无定义) | -| max_stack(四行) | 2/2/16/16 | 合成越域幅度增大(B1 地板压力↑) | 叠层机制边缘化(重复奖励变溢出浪费) | - -### 深度分析 - -Knob 交互:attack_up 与 weaken 是条款 2/3 对账的两端——禁止独立调参,联动评估归 B1 闭合对账;A3 的 ap_per_round 是 weaken 单轮层和的经济上限(F2 AP 界 8×m_w 的来源);效果档位当量对照表(B1)落定前,四行 magnitude 的任何调整都须重跑条款 2/3 锚预检并同步 registry(接口漂移义务)。 - -### 综合判断 - -四行值全部 provisional;调参纪律(禁独立调参 + 重跑锚预检 + registry 同步)为结构规则,已留在 design 件调参表。 - -## 问题 11:ambush 量纲与敌侧 side-wide 语义怎么定稿的? - -### 广度分析 - -- ambush 量纲候选:进倍乘的 percent / 后置加法 flat(采纳,B2 GDD 定稿)。 -- 敌侧作用范围候选:单体寻址 target_ref / side-wide 全体存活敌单位(采纳)。 - -### 深度分析 - -ambush_unit_definition(B2 GDD Rule 6/F2 定稿,registry OQ2 关闭条件兑现):+3 flat = 每层伏击为每次攻击类行为(attack/heavy)附加 3 点主角 HP 伤害(后置加法、不进倍乘);charge 拍零兑付(空拍蒸发);值仍 provisional(锚验收归 B4/B1——A3 F1 条款 3;B2 供给 cap 表值与单结算自然边界口径见 clause3_supply 条目)。 - -single_enemy_assumption 回验史:Core Rule 1 原单敌假设经 B2 定多敌模型(1–3 个同敌种敌单位,EnemyTable.unit_count,用户 2026-09-09 拍板)回验不成立——效果 side-wide 语义改"全体存活敌单位"(层数 = side 共享池),B3 现接口零变更兼容;target_ref(单体寻址)= 扩展位义务——首个单体效果上线时 B3 补列(随批:B1 归集语义/D1 呈现裁决);B3 GDD 正文不改,以 registry 该条为准(A3 OQ5 收编先例)。 - -### 综合判断 - -量纲与 side-wide 均已定稿且与 B3 接口解耦——B3 不解释单位、不感知敌数;两条均以 registry 为准的收编形态落档。 - -## 问题 12:测试策略为什么这样设计?(夹具/退化/deferral 论证) - -### 广度分析 - -- 夹具注入候选:程序构造注入表 vs --data-root 行为夹具根(采纳后者承载 refresh/independent 语义)。 -- 致命夹具候选:每类致命各一根 vs 恰一根 dup_key(采纳后者)。 - -### 深度分析 - -选夹具根而非程序构造注入表的理由:容器经 ConfigDB 单点读表(Rule 2/9)、无表注入 API——--data-root 是 debug/test 构建的既定注入通道。致命类收窄的理由:恰一根 status_effect_dup_key(重复键类别)实证"游戏内真的会死"在本表上的落点(loader 集成缝 = loader 是否对本表调用校验的进程级落点,runner manifest 退出码 dup→≠0,D2 AC-2b 协议同型);其余致命类别(枚举域/域校验/跨字段)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留),schema 侧以程序构造断言域类别(AC-13)。 - -退化与 SKIP 纪律:AC-4 腿 2 / AC-8 / AC-14 腿 3 / AC-17 并入腿均依赖表读值前提(D_a ≥ 2、M_w×m_w 越域等)——默认表值不满足时退化跳过 + 显式 SKIP 标记防 CI 静默、不假失败;AC-14 腿 3 非平凡性依赖默认基线(M_w=16、m_w=−65 → −1040 越出 percent 域),knob 调参使 M_w×m_w 绝对值 ≤ 100 时退化为恒等断言,退化时输出显式 SKIP 日志、CI 可见防静默失真。out-of-scope deferral 生效条件 = B1 义务清单全部落位(已成立);Rule 8 负空间"无对应 API"不可 GIVEN-WHEN-THEN,验收形态 = API 面封闭枚举 + 接口漂移修订门。 - -### 综合判断 - -测试口径九行(载体/被测面/返回/观测量/时序/期望值/夹具/致命收窄/OOS)全部为结论性规格,留 design 件验收标准节;本节仅留存选型理由。 - -## 开放问题 - -| # | 问题 | owner | 状态/时机 | -|---|---|---|---| -| 1 | weaken 条款 2 锚裁决——归一口径已由 F0 裁决关闭(每结算瞬时当量;总暴露分支被 schema 域禁止排除),m_w 值域 [60, 85]/默认 −65 已入文。余项:终值共裁确认 + registry 终值回写,裁决时复查 AC-14 腿 3 非平凡性 | B4/B1(deadline:B1 GDD 强制检查点) | 余项随 B1 OQ2 联动 | -| 2 | ambush 量纲——已定稿(B2 GDD:每层伏击为每次攻击类行为附加 m_amb 点主角 HP 伤害、后置加法、charge 拍零兑付——registry ambush_unit_definition)。余项:B1 条款 3 上限检验 | B2 → B1 | 随 B1 对账闭合 | -| 3 | 首个 refresh/independent 内容行的 AC 补全——EC4 登记义务:奖励池引入非 stack 行时补真实内容行冒烟 AC,夹具探针行退役;其授予可见性语义(空刷新 vs Rule 5)随批由 B4/B1 裁决 | B4 | 奖励池引入非 stack 行时 | -| 4 | clear_reward 源授予——清图奖励若含 buff 的授予路径确认(apply_effect source=clear_reward;A3 条款 4 差异化插槽) | B4 | B4 期 | -| 5 | EC9 reload gate 的 B1 侧落点——防"战斗中真的被置位"零落点(qa-lead 缺口 #4) | B1 GDD 门禁评审 | 随 systems-index 门禁记录登记 | -| 6 | 效果当量对照表的预检重跑——条款 1 对照表落定时按预检重跑 weaken/ambush 方向性预检(正式对账载体);C3 首次调参即须按现行参照(attack_up 当量)复算条款 2 预检 | B1 | B1 对照表落定 / C3 首调 | -| 7 | stack-不重置 R 的 playtest 证伪项——F1 注决议(用户拍板、结构冻结)的体验面反例检验:"早拿必亏"(分轮拿满总暴露 150pp vs 同轮拿满 200pp——算例基线 = dur=2 行值;现行四行 D=1 下两读法总暴露相等、不对称休眠,dur ≥ 2 内容行上线时激活)叠加奖励身份不可预读(创意风险 #1)是否伤害"把 buff 纳入挖掘推理"的规划感(P1)。补偿载体先行:B4 奖励身份预读 + D5"同轮拿满"教学;证伪成立则走结构冻结修订流程回炉(合并/重定义 stack 分支)——非调参 | 垂直切片前置 playtest 批次 | playtest | - -## 附录 A:一致性核对与审计注记(历史审计留档) - -| 项 | 内容 | -|---|---| -| 双向一致性 | B4 ← A2, B3, D2 ✓ · B1 ← A3, B2, B3, B4, D2 ✓ · B3 ∈ Foundation、无上游 ✓(systems-index 依赖分层表) | -| B2 无边说明 | 索引无 B2←B3 边与依赖表 B2 行不矛盾——敌方状态的承载在 B3,但授予路径经 B1,B2 与 B3 之间是验收锚关系非运行时依赖,故不列边 | -| D2 hard 措辞 | "hard"指 ConfigDB 读表的数据通道事实依赖(registry config_db referenced_by=[all-systems] 同口径);索引分层表不列纯数据读取边——相容非矛盾 | -| Rule 10 回写 | 对 A3 OQ5"档位归 B4 表设计"的收编(初值定稿权归 B3、锚验收权留 B4/B1)已回写 systems-index 门禁记录与 registry ownership_note | - -复核注记(v1.1-lean 头部留档):lean 门禁下 systems-designer / qa-lead 已委托起草(Formulas / AC);creative-director 与 art-director 未经咨询——生产前人工复核体验锚点情绪定位与视觉数据面规格同 art-bible 的一致性。 - -## 附录 B:去向映射(零丢失可审计证据) - -| 原文节 | 落点 | -|---|---| -| 头部(状态/版本/支柱/Layer/一句话) | design 头部块 | -| 头部复核注记 | analysis 附录 A | -| 速览表 | 定位→design 设计目的;拥有/不拥有→design 系统范围;上游/下游→design 依赖与输出;硬约束→design 系统范围「负责」 | -| 体验锚点(含反向护栏/参考感受) | 承诺结论→design 设计目的 1–4;论证全文→analysis 问题 8 | -| 全局流程(生命周期字符画 + 出口分发表) | design 核心循环(原样保留) | -| 核心规则 Rule 1/3/4/5/6/8(人话 + 子表) | design 授予、合并与接口(编号人话句 + 四张原表 + 举证表) | -| 核心规则 Rule 2(含时限语义参照表) | design 时限与衰减 | -| 核心规则 Rule 7 | design 数值结论·显式排除声明节末 | -| 核心规则 Rule 9 / Rule 10(含举证依据) | design 枚举与数据字段(schema 小节 / MVP 内容行小节) | -| 枚举(source_class / target_side·unit·stack_policy / MVP 四行) | design 枚举与数据字段(原表保留) | -| F0 结论 | design 数值结论 F0;推导表与论证→analysis 问题 4 | -| F1 结论/伪代码/Variables/Output Range | design 数值结论 F1;F1 注(spec 决议理由)+ Example 验算→analysis 问题 3 | -| F2 结论/表达式/Variables/Output Range | design 数值结论 F2;不 clamp 论证 + Example 验算→analysis 问题 5 | -| F3 结论/伪代码/Variables/时序契约/Output Range | design 数值结论 F3;时限量纲论证 + Example 验算→analysis 问题 2 | -| 显式排除声明(归属表) | design 数值结论;归属切分理由→analysis 问题 6 | -| 状态(四态表 + 不变式 + 纯逻辑类口径) | design 实例状态 | -| 边界情况 EC1–EC14 | design 边界情况(原表保留,增编号列) | -| 依赖(上游 D2 / 下游八行) | design 依赖与输出(双向一张表) | -| B1 侧义务清单 ①–⑧ | design 依赖与输出(活契约原表保留) | -| 呈现与教学义务清单(D1×4/B5×2/D5/B4) | design 依赖与输出(活契约原表保留) | -| 一致性核对与注记 | analysis 附录 A(历史审计) | -| 呈现与 UI 契约(数据面义务 4 行) | design 依赖与输出(活契约原表保留) | -| Tuning Knobs schema + 加载校验 + Rule 4 豁免 | design 枚举与数据字段 schema 小节 | -| Tuning Knobs F0 回执注记 | design 数值结论 F0 | -| Knob 表(调过高/调过低) | 字段|域|默认|owner→design 调参表;后果论证全文→analysis 问题 10 | -| 非 knob 结构冻结 + Knob 交互 | design 调参表(规则为结论保留);联动网络论证→analysis 问题 9/10 | -| 验收标准(测试口径 9 行 / 夹具规格 3 根 / AC-1–19 / 覆盖矩阵) | design 验收标准(原表保留,AC 编号不动);选型理由→analysis 问题 12 | -| 开放问题 OQ1–OQ7 | analysis 开放问题区(原编号保留) | -| 减伤墙批(−50→−30)论证 | analysis 问题 9;结论值留 design 调参表与 MVP 行表 | -| ambush 量纲 / 多敌 side-wide 定稿史 | analysis 问题 11;结论留 design 枚举与系统范围 | -| 版本历史(全部历史行) | design 版本历史(原行全保留 + 追加 v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/b4-reward-item-economy.md b/design/archive/gdd-2026-09-14/analysis/b4-reward-item-economy.md deleted file mode 100644 index 3eb6c42c..00000000 --- a/design/archive/gdd-2026-09-14/analysis/b4-reward-item-economy.md +++ /dev/null @@ -1,298 +0,0 @@ -# B4 奖励与道具经济 设计推演 - -> 状态:concluded · 本文只装"为什么"——`design/gdd/b4-reward-item-economy.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 - -## 问题:奖励身份为什么 install 期预分配、Ready 后只读? - -### 广度分析 - -- 候选 A:授予期现 roll——收益:实现直观、无板级映射容器;代价:身份在开格与授予之间不恒定,预读(P1 规划素材)与回放确定性垮掉,随机入口散布到结算期。 -- 候选 B:install 期整板预分配(选定)——收益:身份恒定可读、A5 探测道具零成本桥接、零随机出 roll_board 一线、同 σ 同流消费轨迹 ⇒ 同映射的确定函数(AC-9);代价:需 F5"草稿-校验-提交"机制承载保底,多一张板级映射。 -- 候选 C:开格时才定身份——代价:探测桥接无结构前提,创意风险 #1(安全格奖励可预期性 = P2 前提)直接失败。 - -### 深度分析 - -RNG 单点纪律要求封闭命名流;registry `rng_service.scope_event_binding` 将 reward_roll 绑定为"每次 board install(格奖励批 + 清图奖励批)",与 board_gen"每次生成新图"同构——换图 = 新 scope 批 = 新身份(E6)。Ready 后只读 + 无重掷 API 构成负空间验收:没有 API 入口即"Ready 后零写入"的结构前提,实例不变式不可由封闭 API 构造违规路径。 - -F5 的草稿重 roll 全部发生在提交前(Unrolled 态),确定性 = 同 scope 消费轨迹的确定函数,与 Ready 只读不变式零冲突;每稿 = 格批 + 清图批尾一号,草稿弃用连清图一号一并弃用,scope 计数器每 install 恒 +1(重 roll 不开新 scope)。 - -### 综合判断 - -install 期预分配 + Ready 只读 + 零随机出 roll_board 一线(design 规则 2/8/10,F1)。创意风险 #1 维持 OPEN:结构前提落地 ≠ 风险闭合;面向特定道具的寻路("绕开两颗雷去拿那把刀")须以未开格身份可读为前提,MVP 未兑现——结构前提已备(身份已定、预读查询面就绪、A5 桥接零成本),呈现深度 = OQ2(垂直切片)。 - -## 问题:奖励分几类、按什么轴交付? - -### 广度分析 - -- 全即时:零决策、零窗口摩擦;代价:丢掉库存规划面——P2"囤刀待机"的长线形态无存身之处。 -- 全可选:规划面最大;代价:每轮都弹窗、结算明细淹没、拾取感过度延迟,拾取的糖被结算的实吞掉。 -- 两级交付轴(选定):即时类高频保底"开格即有反馈",可选类数量少但更强保住规划面;起步配比即时 75% / 可选 25%。 - -### 深度分析 - -可选类入库存带来的窗口摩擦由三个结构缓解:库存只收可选类(权重占比低)+ 窗口单件制(每次决策量最小)+ buff 时长改当次结算(D=1——浪费不再跨结算累积、保质期一次结算天然有界;同结算内批量授予的零兑付仍存在,故预警④仪表保留)。治疗两级稀缺化:instant_heal 小额常见零决策,heal_pack 稀缺强效——治疗整体供给变少、决策价值变高,"治疗是稀缺奖励";满血双态区分(instant_heal 满血零兑付记"奖励未生效"行 vs heal_pack 满血拒用不烧包)分别承载"白捡无感"与"误触防护"。 - -C3 修订批以供给控制器(RewardSupplyController——install 期战斗首件保证 + 指数递减注入 0.4→0.2→0.1→…,E[战斗获取] ≈ 1 标定目标)替代"格子权重 75/25"承载可选类供给:首件保证取代 K_dmg 保底的胜利路径语义,指数递减保稀缺、永不绝育防"可选类绝育"。clear_blast 换位(原 clear_knife 入库刀 → instant_aoe p40 当场兑付全体存活敌、不入库不占可选类供给、完美板 ×2 = 80)同理——清图槽的兑付不走库存通道,B1 条款⑤计价基元随换位重推(C = power = 40)。 - -### 综合判断 - -五值封闭枚举 + 两类交付轴 + active_inject 注入池(design「奖励类型与数据表」)。预留值(resource / aux_item)校验拒绝 fail-fast,启用走修订——机制与内容分离,名录扩展归垂直切片/Alpha。 - -## 问题:道具伤害吃不吃 percent 修正、attack_up 死行怎么办? - -### 广度分析 - -- 道具吃修正:与 attack_up 叠乘爆发高;代价:乘法爆炸面 + 囤刀无上限不再安全 + 玩家不可心算。 -- 恒定表值不吃修正(选定,用户拍板):可算性 + 囤刀无上限安全(无乘法爆炸,E17 的结构前提)。 - -### 深度分析 - -attack_up 曾为死行(HeroTable.atk 曾可为 0),A3 条款 2 锚参照对象一度迁 defense_up 当量。用户裁决"基础攻击恒存在"(atk 域 [1,999]、0 加载拒绝、MVP = 6 原型锚;主角每结算战斗段先手攻击顺位最前敌)后 attack_up 复活:唯一消费面 = 主角战斗段先手攻击,只乘基础攻击、不乘刀——"道具不吃修正"拍板不变。锚参照对象回迁 attack_up 当量(registry `status_effect.anchor_warning` / `clause3_supply.direction_precheck` / systems-index A3 OQ5 注记三处同批回写;B3 锚预警裁决前置不变)。 - -### 综合判断 - -恒定表值 + attack_up 复活口径见 design F4。残余 = attack_up 是否入默认根池(OQ1——复活批不擅自入池,随奖励改造批裁决,C3 内容所有权);入池时 tier_min_buff 重算、AC-19 对账对随批重制。 - -## 问题:道具段已选刀但无存活敌时,拒用还是照常消耗?(E10) - -### 广度分析 - -- 拒绝不消耗:玩家友好、无浪费感;代价:须读 B2 存活集才能判定,B4 零跨系统读纪律开口子。 -- 照常消耗零效果(选定):B4 保持零游戏态守卫,战斗轨迹判断留编排层;代价:玩家可能"烧刀",须明细行诚实呈现。 - -### 深度分析 - -选定理由两条:① 守卫所有权不对称(非信息不对称)——满血守卫是 B1 读 hero hp 的表局部判定(F4 已定),而零效果判定须读 B2 存活集,B4 零跨系统读纪律不为它开口子,选定即承诺把战斗轨迹判断留给编排层;② 反抖动——选定即承诺防窗口内反复重选拖垮结算节奏(B2 呈现规格供给 hp/max_hp 血条数字,敌我血量在选择时点均可读;窗口内可用性预判 usable_now〔B1 组装〕承载"误触防护"半句)。原"敌 HP 不可见"理由与 B2 血条数字可读矛盾,已更正为上述两条。 - -段序不截断:选定件全序执行 → 战斗段照常推进(死敌"死亡即不动手"空转)→ 衰减段 → 判定段判胜 → 关卡末 clear_inventory 全清(含未选件)。"零效果"是事实判定(B1 读存活集做判定)非拒绝——逐件进"已消耗未生效"明细行(B3 义务⑧"溢出未生效"行协议同款数据面)。 - -### 综合判断 - -照常消耗 + 逐件"已消耗未生效"明细行(design E10;AC-14 分支 3 承载拍板语义——不采信任何"拒绝不消耗"旧读法);监控锚 = 预警①浪费半。 - -## 问题:每板刀供给如何保底?(F5 与供给控制器) - -### 广度分析 - -- 候选 A:K_dmg 草稿-校验-提交重 roll(现行机制保留)——结构保证但引入概率性致命带。 -- 候选 B:清图槽保底(否决)——弃图流覆盖不到:RAP 刷图非必经清图;economy-designer 复核:清图免费换板且多清图槽,吞吐严格支配 RAP 刷新,无刷刀农场漏洞。 -- 候选 C:safe_cell 伤害权重下界(否决)——概率缓解非结构保证,留作 C3 伴生调参。 -- 候选 D:供给控制器战斗首件保证(选定承接)——机制保证每战至少一件可选类,K_dmg 降为 0。 - -### 深度分析 - -概率性致命带:合法权重下 N_draft 耗尽概率随 K/池构成可达非平凡值(同配置不同种子一个能玩一个崩——种子轮盘);处置 = C3 调参期批量仿真义务(刀供给分布 × A1 板分布的可行率),把配置错误暴露在调参台而非玩家局内。b4_reroll 夹具的可达性标定:首稿零刀 P ≈ (6/7)³ ≈ 0.63(重 roll 可达)而耗尽经验稀有 ≈ 4×10⁻⁷/σ。 - -保底仅计 damage_item 不计 instant_aoe——保底的意义在"每板至少有一把可囤可择时的刀"(玩家可控时点的伤害资源),即时类自动兑付无规划面。K_dmg=0 后 no_damage_row 后闸托底零活刀行世界:内容健康护栏、非胜利路径闸——基础攻击保证战斗可胜,本闸防"零伤害道具世界"经纯内容调参静默复活导致战斗拖长、奖励系统空转(与 B2 OQ9 并案登记同一 owner)。 - -### 综合判断 - -K_dmg=0 现行默认 + 供给控制器首件保证 + 双加载护栏 floor_supply_missing / no_damage_row(design F5)。"C3 禁区默认值"条款随 C3 修订批解除。 - -## 问题:清图与雾区奖励如何定价?(A4 三约束的 MVP 承载) - -### 广度分析 - -- ① 雾内档位下界:T_fog_min 表值 vs 推导式(= 最低档 buff 当量所在档)。 -- ② 清图锚随雾成本上浮:MVP 常量池 vs clear_ 差异化。 -- ③ 雾板净当量优势带上界:运行时校验 vs 验收锚 + 预警对冲。 - -### 深度分析 - -① T_fog_min 真推导式依赖 B1 条款①对照表(未设计),加载期循环依赖不可行——取表值(默认 2 provisional),A4① 登记为验收锚非运行时校验,对照表落定/调参时核对"雾池最低档行当量 ≥ 最低档安全格 buff 当量"。AC-19 档位序检查的已知失效面:tier 与当量零耦合(跨类别 tier 序不保证当量序——雾池 tier2 治疗包的当量可能高于 tier3 buff 行),故 AC-19 只作档位序检查非当量保证,升格运行时致命会锁死内容;单行雾池下检查恒平凡真(判别力零)——默认根已布置四行雾池规避。 - -② clear_default MVP 单默认槽 = 板无关常量池,清图奖励当量无法随雾负担变化——MVP 结构性不可闭合(非 deferral:B1 强制检查点只能对该常量判 pass/fail,改 power 会同步抬高无雾板、破坏无雾侧定价);激活载体 = clear_ 插槽(垂直切片,待 C1 biome 词表落定)。 - -③ ②缺位 + 雾格仅 tier 下界加成的 MVP 结构下近乎必然平凡通过——静默绿灯风险显式登记;休眠状态与接受风险(重雾板清图欠偿 → 弃图偏斜——A4 警告的 level 2 结构性高发位);对冲 = 预警⑤雾板分层观测(聚合指标会被雾板污染或反向掩盖)+ 预警⑥速杀退化监测。 - -### 综合判断 - -①锚侧承载 / ②休眠待 clear_ / ③显式接受风险 + 双预警对冲(design「A4 定价硬约束的 MVP 承载状态」表 + AC-19)。 - -## 问题:默认根数值如何锚定?(方向预检与口径) - -### 广度分析 - -- 供给面:刀供给期望 ≈ |资格格| × 19% × 9.7(加权刀力 = (15×8+4×16)/19 ≈ 9.7)≈ 1.8|资格格|/板,另加即时群伤与基础攻击分量。 -- 需求面:击杀需求 = 敌 hp 18(单敌档)/ 54(3 敌档,B2 EnemyTable 参考行)。 -- 对照基准:max_hp = 50(原型锚)为治疗供给对照基准。 - -### 深度分析 - -现值读数:"单敌无忧 / 2–3 敌贴近下界"有锚。预警联动:速杀退化预警⑥在"基础攻击 6/结算 + 即时类自动兑付"下压力进一步上升——敌 hp 曲线与奖励供给禁止独立调参(C3 联动重算义务)。输入缺口:|资格格| 分布待 A1 actuals p10/p50 → 落地后重跑;max_hp=50 原型锚出处建议随 B2/D2 回写补登。 - -buff 零兑付率推导(预警④连锁批单列的依据):buff 供给 λ = 8 挖/轮 × 44% ≈ 3.5 层/轮 vs 吸收上限 1 层/结算 × max_stack 2——批式授予下零兑付率远高于单格批,故连锁批量授予零兑付率单列(阈值 >50%)。F6 供给面口径 = 全活行投影(非仅活 buff 行清单)——承载 A4②③与 A3⑤ 对账,道具/清图行值在内(B1 直读 ConfigDB 本也可绕过,接口名实相符);量纲建议 = 主角 HP 点(与 m_amb 同量纲)。B2 OQ3 衔接:伤害道具作为主角规划面伤害令"安全格拾取 → 伤害当量"可落地(基础攻击为恒定基底、道具为可规划增量——部分缓解非闭合,窗口使用次数是战斗轨迹量归 B1)。 - -### 综合判断 - -方向预检登记对账记录(B2 clause3_supply 先例);数值全部 provisional 归 C3;锚验收权 B4/B1(B3 Rule 10 同款)。 - -## 问题:体验锚点如何论证?(拾取的糖、结算的实) - -### 广度分析 - -- 参考感受:Microsoft Minesweeper Adventure 的开格拾取(身份即在场的战利品,不是无名金币)+ 杀戮尖塔奖励节点(有名字、有用途、进构筑的战利品)。 -- 反向对照:无身份的纯数值掉落("你获得了 +5"式系统补偿)与开包式随机惊喜(拿到了也不知道是啥)——本作要避开的两种感受。 - -### 深度分析 - -玩家的每一轮都在预读本系统:已开格与库存的奖励身份恒定可读,叠加"每个安全格必有货"(F1 结构保证)与"雾格档位更高"(F2)两条全板先验——构成"往雾区推进、囤刀待机、叠层满载后收手"的路线与节奏决策素材。深度轴 MVP 零载体,深度/图类型差异化 = clear_/池变体结构位(垂直切片登记)。 - -E17 囤刀:合法策略且为设计意图(可选类道具是关内资产——"囤刀待机"的规划视野 = 整个关卡,P2 长线规划形态兑现);无运行时上限因伤害恒定表值 ⇒ 无乘法爆炸;失衡监控 = 预警①(浪费半)与⑥(速杀退化),修正入口 = C3 权重调参。E3 连锁批量溢出:13 格链 × max_stack=2 ⇒ 大量同文"奖励未生效"明细行——显式接受(A2 登记义务"连锁批量授予溢出吸收"的 B4 侧裁决落点);玩家侧缓解 = 叠层感知挖掘(HUD 满层后少开安全格/优先挖刀——弱自救;层数长在 B3 容器上不长在格子上,未开格身份不呈现、无格可绕);明细行数据面须携带可聚合计数/批次字段(是否合并呈现归 B1/B5 裁决,数据必须可聚合——防事后补字段 = 接口漂移)。 - -### 综合判断 - -拾取瞬间的糖与延迟兑现的实各管一半,后者是 P2 归因的奖励侧落点;反向护栏两条(身份永远在桌上 / 拾取不得改即时生效)入 design 设计目的。窗口触发政策:MVP 有库存恒弹,候选"仅可用品触发 / 常驻库存条非模态"归垂直切片(P4 节奏)。 - -## 开放问题 - -| 编号 | 问题 | owner | -|---|---|---| -| OQ1 | attack_up 入池裁决(复活已闭合,残余入池问题):基础攻击恒存在(B2 Rule 9)→ attack_up 复活、消费面 = 主角战斗段先手攻击;attack_up 行是否进入默认根 RewardTable 池随奖励改造批裁决(复活批不擅自入池);A3 条款 2 锚参照对象已回迁 attack_up 当量(F4 口径后果) | C3 | -| OQ2 | 未开格身份呈现深度:MVP 不呈现(规则 8);A5 探测道具零成本桥接(身份 install 期已定可查);呈现深度(类别/档位/身份)待 A5 定稿 | A5+D1(垂直切片) | -| OQ3 | items_per_settlement_cap 启用裁决:Tuning 结构位默认关;启用即限制(过低锁死 3 单位 54 击杀需求胜局——economy-designer 警告) | C3 playtest | -| OQ4 | 关卡末剩余道具折算(关内延续裁决后重述):"战斗结束库存清空"的体验负债主体闭合(库存关卡域:跨战斗延续、未选用件不再随战斗消亡;层间延续可见反馈已入切片);残余 = 关卡末剩余道具折算/继承结构位(转金币/继承——Alpha,C2;清空前快照计数已作为折算数据面预留) | C2/D5(Alpha) | -| OQ5 | T_fog_min 推导式:依赖条款①对照表(未设计,加载期循环依赖不可行);落定后改推导式或维持表值(F2,默认 2 provisional) | B1 | -| OQ6 | weaken 锚裁决联动:B3 OQ1 归一口径裁决前置(瞬时 vs 总暴露);若落"总暴露"读法则 B4 重定最低档参照(registry anchor_warning;F6 供给已备行值清单与量纲建议) | B1 | -| OQ7 | 失衡预警预注册归口:预警①–⑧ 阈值与样本量 provisional;与 A3 OQ3、原型 v3 终验 playtest 合并执行候选 | C3/playtest 会话 | - -### 待拍板(两件套迁移发现的原文内部 / 与 registry 冲突——迁移未裁决,design 按所注口径收录) - -| 编号 | 冲突 | 迁移处置 | -|---|---|---| -| NQ-1 | registry `reward_table` 已含 `power_min/power_max` 可选配对字段与"伤害量值区间批"五行区间化登记(heal_minor [2,6] / knife_t1 [5,11] / heal_pack [6,18] / knife_adv [10,22] / clear_blast [25,55],中点恒等原值),原文 schema 九字段与默认根行值未承接 | design 保留原文九字段与定值行;待拍板:GDD 补区间字段还是 registry 回退 | -| NQ-2 | AC-18 断言"category 值域 ⊆ {buff, damage_item, heal_pack}(三值封闭定值)"与规则 1 五值封闭枚举冲突(两级奖励批后未同步) | AC 原文保留未改(编号不动、不断然改 AC);待拍板改写为五值 | -| NQ-3 | 规则 7 举证"heal_pack 默认根权重 6%、power 12"与默认根行集 heal_pack w10(active_inject)冲突(C3 修订批迁注入池后未同步);失衡预警②"可选治疗稀缺化至 6% 后"同源 | design 按默认根行集与 registry 收 w10;预警②行原文保留;待拍板 | -| NQ-4 | F5 推导代码块注"K_dmg 默认 1 provisional"与 F5 结论/Output Range"K_dmg=0 现行默认"及 registry(默认 0)冲突 | design 按 0 收录(registry 已锁 + 原文结论口径一致);原"默认 1"视为残留;待拍板确认 | -| NQ-5 | 夹具"默认根"行原注 K_dmg=1 与行集列 clear_knife,同 NQ-4 / clear_blast 换位残留 | design 夹具行改写为 K_dmg=0 + 指向「默认根内容行」节八行;待拍板确认 | -| NQ-6 | N_draft 域原文 [0, 999] vs registry [1, 999] | design 按 registry [1,999] 收录;待拍板 | -| NQ-7 | registry `reward_table.direction_precheck` 仍为旧权重口径(\|资格格\| × 40% × 5 = 2\|资格格\|),原文方向预检已按新权重重算(19% × 9.7 ≈ 1.8\|资格格\|/板) | analysis 按新口径收录;registry 未随 C3 修订批重跑,待拍板回写 | - -## 附录 A:接口漂移登记(回写已兑现——delta 复核逐处对账) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| 1 | game-concept 待定问题"主动道具后续版本加入"于 MVP 激活(道具使用窗口)——use_timing 字段从预留转承重 | game-concept(第 144 行注记) | 已同步 | -| 2 | registry `rng_service.scope_event_binding` 的 reward_roll 批次语义改写为"每次 board install(格奖励批 + 清图奖励批)" | registry + D2 正文(Core Rule 5 / Interactions B4 行) | 已同步 | -| 3 | 锚参照迁移传播(attack_up 当量参照回迁) | systems-index A3 OQ5 注记 · registry `status_effect.anchor_warning` · registry `clause3_supply.direction_precheck` | 已同步(三处) | -| 4 | game-concept 创意风险 #1 与可证伪信号的 MVP 口径注记 | game-concept | 已同步 | -| 5 | 窗口锚点修订(授予段后) | systems-index 门禁块 | 已同步 | -| 6 | systems-index 分层行 B4 ← D2 更新 | systems-index | 已同步 | - -## 附录 B:缺口预检(11 项——每项标 owner 与时机) - -| 编号 | 缺口与处置 | owner | 时机 | -|---|---|---|---| -| 1 | 【阻塞级】B1 编排半整体 deferral:段序骨架(授予>窗口>增益/减益>道具>战斗>衰减>判定——窗口锚点 = 授予段后)、窗口选择序回放输入、满血守卫(拒绝不烧包)+ 同窗顺序多包逐件动态守卫、零效果判定与"已消耗未生效"行、击杀结果进流水、"奖励未生效"行 + 聚合计数、治疗 clamp、clear_inventory/retire/roll_board 恰一次编排——B4 冒烟全部以构造序扮演、编排正确性零断言;E10 的 B1 侧承接(读 B2 存活集做零效果判定)尤须逐字核对 | B1 GDD(义务清单 6 项,缺项即 blocking) | B1 门禁评审 | -| 2 | 【阻塞级】A4① 当量升级与②③状态:AC-19 分支 2 为档位序检查——真当量换算依赖 B1 条款①对照表(未设计);②在 MVP 结构性不可闭合(依赖节显式宣告——非常量池无法随雾负担上浮)、③静默绿灯风险;激活载体 = clear_ 插槽(垂直切片) | B1 | B1 GDD 强制检查点 + 对照表落定/每次调参时核对 + clear_ 激活时重启② | -| 3 | T_fog_min 推导式悬置(OQ5):表值默认 2 provisional——B1 对照表落定后改推导式或维持表值;若改动,AC-6 夹具(b4_fog_gate tier 布置与 override 分支)及登记轨迹重制 | B1 | OQ5 关闭 | -| 4 | registry/D2/索引/game-concept 回写(评审批已兑现):reward_roll scope 语义改写(registry + D2 正文两处补同步——AC-20① 生效前提)、锚参照迁移三处传播、game-concept 三处 MVP 口径注记、systems-index 分层行 B4←D2 + 门禁块同步——delta 复核时逐处对账 | 本 GDD 评审批 | 已办,delta 复核确认 | -| 5 | attack_up 复活连锁(OQ1)——已兑现:基础攻击恒存在(HeroTable.atk 域 [1,999]、0 加载拒绝)→ attack_up 复活,消费者 = 主角战斗段先手攻击(B1 GDD 同批修订);AC-18 改承载 attack_up 行合法性、AC-19 锚参照回迁 attack_up 当量、registry anchor_warning/direction_precheck 同批回写;残余 = attack_up 是否入默认根池(随奖励改造批,C3) | C3(残余入池裁决) | 已兑现;残余随奖励改造批 | -| 6 | 登记常数随调参重制流程:b4_golden 冻结权重与默认根解耦,但 T_fog_min/K_dmg/N_draft/P_min/默认根行值调参 → AC-19 对账(对账对 (knife_adv, attack_up_basic) 漂移检测)、AC-6 分支 4、AC-18 结构断言须重跑;C3 调参流程若无"登记常数与对账重制"步骤则相关 AC 假失败 | C3(调参)+ qa(重制) | 每次调参 | -| 7 | B4 扫描域成员清单登记:AC-21 分支 1 的生效载体 = D2 AC-9 项目级 CI 扫描域成员清单更新(B3 先例) | Technical Setup | B4 GDScript 产物落地即登记 | -| 8 | 参考算术工具锚定:期望映射 Ψ(σ)/Φ(σ)/重 roll 轨迹的手工推导需"播种生成器取号序列"参考算术——D2 仅登记 scope 种子向量(未登记逐号序列黄金向量);参考算术以冒烟脚本内置、版本库登记,正确性以 D2 AC-3 种子向量 + AC-5 区间算术手工核验锚定;生成器取号约定(如 `randi % W` vs `randi_range`)为实现期 ADR 事实,定名时同步登记;登记后第二人独立推导复核 + b4_reroll 可达性拆分复核(首稿零刀可达/耗尽稀有——失效即重制夹具) | qa/Technical Setup | 冒烟框架搭建 + 实现期 ADR | -| 9 | D1 呈现义务 deferral:预读呈现(含库存常读条)/使用窗口(含 usable_now 呈现与触发政策)/四类明细行呈现/H2 强调/清空反馈不可 G-W-T——deferral 生效条件 = D1 义务①–⑤登记(缺项即 blocking) | D1 | D1 GDD | -| 10 | C3 调参期批量仿真:F5 概率性致命带(合法权重下 N_draft 耗尽概率随 K/池构成可达非平凡值——种子轮盘)→ 调参流程须含批量仿真(刀供给分布 × A1 板分布的可行率),把配置错误暴露在调参台;与预警①–⑧预注册合并执行候选 | C3 | 每次调参 + playtest | -| 11 | 方向预检输入缺口:刀供给方向预检的 \|资格格\| 分布待 A1 actuals p10/p50 → 落地后重跑(方向预检表登记对账记录);max_hp=50 原型锚出处建议随 B2/D2 回写补登 | C3/B2 | A1 actuals 交付 | - -## 附录 C:AC 覆盖矩阵 - -| 类别 | 映射 | -|---|---| -| Core Rules | 1→AC-16/AC-18 · 2→AC-1/AC-9/AC-10(恰一次编排→OOS B1×⑥)· 3→AC-12(施加与满层零兑付协议→OOS B1×②+B3 跨引)· 4→AC-13 · 5→AC-14(段序/窗口时机/满血守卫/零效果判定→OOS B1×①④;窗口呈现→D1×②)· 6→AC-10/AC-11/AC-16(clear_ 拒绝)/AC-17 · 7→AC-12 分支 1(道具类路由)/AC-14 分支 3(满血守卫→OOS B1×④;clamp→E12 OOS)· 8→AC-2/AC-15(未开格呈现→OQ2/A5+D1)· 9→AC-16/AC-17/AC-18(接口漂移回写→AC-20①⑤)· 10→AC-9/AC-21(调用权集中→OOS B1×①–⑥) | -| Formulas | F1→AC-1/AC-5(+AC-9 轨迹)· F2→AC-6(+AC-19 锚侧)· F3→AC-10/AC-11/AC-17 · F4→AC-14(恒定表值供给面)+AC-18(attack_up 行合法性 = 复活口径)——施加/clamp/守卫/不吃修正纪律→OOS B1×④ · F5→AC-7/AC-8/AC-17(加载护栏 ×2)· F6→AC-19(闭合归 B1——OOS) | -| Edge Cases | E1→AC-4 · E2→AC-3 分支 2+OOS B1×⑤(零明细行半)· E3→AC-12(受理序半)+OOS B1×②(行协议 + 聚合计数半)+B3 AC 跨引(apply false 原子)· E4→AC-3 分支 1/2 · E5→AC-1 分支 3 · E6→AC-9 分支 2(roll 半)+AC-13 分支 2(库存半)· E7→AC-3 分支 3/4 · E8→API 负空间(无强制使用入口——不可 G-W-T,B3 Rule 8 先例)+OOS D1×② · E9→AC-14 分支 2 · E10〔照常消耗〕→AC-14 分支 3(B4 半)+OOS B1×④(零效果判定+"已消耗未生效"行+击杀结果流水)· E11〔清图 buff〕→AC-11(B4 半)+OOS B1×② · E12→OOS B1×④(clamp)+AC-14 分支 1(power 供给)· E13→AC-17(b4_dangling_effect 条件性夹具)· E14→AC-15 · E15→OOS B1×①(授予先于判定的段序半)+AC-10 分支 2/AC-13 分支 3(可构造序弱承载注记)+OOS D1×③⑤(消亡语境注记)· E16→AC-18 分支 2(attack_up 行合法——复活口径)· E17→AC-13 分支 1/2 · E18→AC-12 分支 3/AC-10 分支 3 · E19→API 面(清单外 null/false + 诊断)· E20→API 面(stock 受理域封闭)· E21→API 面(枚举序 = stock 受理序——D1 呈现序契约) | -| 上游承接 | A4①→AC-19 分支 2(夹具对账型,升级缺口预检 2)· A4②③→MVP 休眠显式宣告(依赖节)+ OOS B1 强制检查点 · A3 条款④恒非空→AC-10 分支 1(兑付面)+AC-17 分支 4(表侧)· B3 dangling_ref 首引激活→AC-17 分支 6+AC-20④ · 奖励身份预读→AC-2/AC-15(呈现→OOS D1×①)· attack_up 行合法性→AC-18 分支 2(复活口径)· A3 条款⑤支配性→OOS B1 强制检查点(预警⑤⑧观测) | -| 覆盖口径 | 21 条 EC 中 E8/E15 两处非 G-W-T 形态,分别以 API 负空间与 B1×① 段序 deferral 承载;其余全部映射 AC 或显式 OOS(deferral 生效条件 = B1×6/D1×5 义务清单登记);"负空间"学说的边界如实登记:封闭枚举防住"没有的入口",不自动防住"有入口、语义未裁"——E18–E21(重复受理族/清单外坐标/stock 域/枚举序)为评审批补裁的输入域语义;今后新增 API 入口须随附全输入域语义表(实现期 ADR 检查项) | - -## 附录 E:验收执行规格(测试口径 / 夹具与种子 / 致命 manifest——原文验收标准节执行 machinery,AC 表引用的夹具根名与 manifest 行名以此为准) - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | B4 是 Core 层数据/逻辑系统——非 UI、无场景依附;冒烟载体 = `godot --headless --script`(脚本 extends SceneTree 以获得 quit(code),ConfigDB/RngService autoload 由脚本显式实例化);映射容器/库存容器/RewardTable schema 经 class_name 直引实例化(每用例全新实例、无跨用例状态;AC-21 扫描对该路径豁免) | -| 被测面 | B1 未设计——冒烟直接驱动 B4 最小 API 面并扮演编排方(B2/B3 先例);B4 冒烟零 B2/B3 实例化(施加面/存活集/血量全部归 B1 OOS,StatusEffectTable/HeroTable 仅经 ConfigDB 读值);资格格清单程序构造(真实来源 = B1 义务⑥——冒烟构造等价,零 A1/A2 接线) | -| 时序口径 | "一次 board install" = roll_board 恰一次的构造窗口;"cleared 轮" = grant_clear 构造调用;"battle_over" = clear_inventory(+retire_mapping)构造调用;结算段序骨架与使用窗口编排 = B1 域——冒烟以构造序扮演、不断言编排正确性;σ 到达机制:D2 全新 RngService 首个 open_stream 恒为 scope 0——到达 scope=σ 须先 `open_stream("reward_roll")` ×σ 丢弃预推进(AC-7 分支 1 按此执行) | -| 纸面契约子集 | 凡依赖 Ψ(σ)/Φ(σ)/σ*/重 roll 轨迹登记值的 THEN,在取号约定实现期 ADR 落地前不视为可执行(受影响:AC-1 分支 1 非雾格值、AC-7 分支 2/3、AC-10 分支 1、AC-12 登记序列);雾格单行退化分支例外(r 无关,现即可执行) | -| 只读观测量 | 映射投影(reward_id/category——引用级)· 库存实例投影(item_id/来源/快照/状态)· 流 scope 计数器(install 恰一 scope 的观测面);相位无字段观测量:Unrolled/Ready/Retired 由受理返回值推断;Cleared = 逻辑失效态(失效句柄查询返回空 + 诊断、作用接口拒绝);实例不变式(Ready 后映射零写入 / Used 不可逆 / 库存条目仅存关卡域)= debug 断言自守——违规路径不可由封闭 API 构造,不经冒烟断言;行为级证据 = AC-1/AC-2/AC-9/AC-14 | -| 期望值推导纪律 | weight/power/tier/T_fog_min/K_dmg/N_draft 全 provisional——各 AC 的 THEN 具体数值按当前表读值/夹具登记值推导、不写死(记号:w_i/t_i/p_i/T_f/K/N);结构定值断言合法:category 五值封闭、pool_tag MVP 二值封闭、use_timing 单值、清图恒正当量校验存在性;权重比例与数值不作定值断言(provisional 归 C3) | -| 拍板语义承载 | 道具段照常消耗(AC-14 分支 3——不采信任何"拒绝不消耗"旧读法)· 清图槽允许 buff 行(AC-11)· 窗口锚点 = 授予段后(B4 冒烟不断言编排时点,构造序扮演) | -| 登记常数协议 | 期望格身份映射 Ψ(σ)、清图身份 Φ(σ)、重 roll 草稿数轨迹、A4① 对账对——入版本库;失效处置 = 先复核登记、登记无误即实现缺陷;登记后安排第二人独立推导复核 | -| 测试种子取号协议 | master=42;σ 取号 = 每 roll_board 调用恰一 scope(install 批含格批 + 清图批尾;retire 后新 install = 新 scope);期望轨迹经 `derive_at("reward_roll", σ)` 纯函数测试通道推导(不推计数器);黄金向量 m=42 scope0=7422916049646135537(D2 向量表复用——推导起点锚) | -| out-of-scope(覆盖声明) | deferral 生效条件 = B1 义务 6 项 + D1 义务 5 项登记(均缺项即 blocking):B1×① 段序骨架与调用序 ∥ B1×② 受理分流 + 满层"奖励未生效"行协议 + 聚合计数字段 ∥ B1×③ clear_reward 授予路径 ∥ B1×④ 窗口与道具段编排(usable_now 组装、满血守卫、零效果判定、逐件"已消耗未生效"行、击杀结果进流水、治疗 clamp、"恒定表值不吃修正"纪律)∥ B1×⑤ 生命周期编排恰一次 ∥ B1×⑥ roll_board 恰一次 ∥ D1×①…⑤ 呈现(不可 G-W-T)∥ 另有:B3 满层拒绝原子(B3 AC 跨引);A4 约束②③(MVP 休眠)与 A3 条款⑤对账闭合(B1 强制检查点);attack_up 复活联动(OQ1);C3 数值与失衡预警①–⑧(playtest 域);未开格身份呈现深度(OQ2/A5+D1) | - -### 夹具与种子策略 - -| 夹具根 | 登记内容 | -|---|---| -| 默认根 | B4 回填的 RewardTable MVP 行集(design「默认根内容行」节八行)+ RewardConfigTable T_fog_min=2 / N_draft=32 / P_min=8 / K_dmg=0(现行默认)——结构断言、F6 供给与方向预检 | -| b4_golden | D2 全表清单拷贝 + 权重/tier 冻结登记值(刀 w=2 t=1 / 治疗包 w=1 t=1 / defense_up w=1 t=3 / clear_default 单刀行 w=1)——黄金载体与默认根内容调参解耦(C3 重调默认权重不触动本根;雾池 = {defense_up t3} 单行退化——雾格分支 r 无关现即可执行) | -| b4_reroll | T_fog_min=1 / K_dmg=1 / N_draft=32 / p_min=4(刀 p=4 须过 F5 加载护栏 (i),随全局 P_min=8 生效);safe_cell = 刀 w=1 t=1 / 治疗包 w=3 t=1 / defense_up w=3 t=2;clear_default 单刀行 w=1 p=4——满足全部加载校验(活 buff 行 ✓ / 雾池非空 ✓ / 清图正当量 ✓);重 roll 可达(首稿零刀 P ≈ (6/7)³ ≈ 0.63)而耗尽经验稀有(≈4×10⁻⁷/σ)——取号约定 ADR 落地后复核可达性拆分、失效即重制 | -| b4_fog_gate | tier 布置使雾池唯一活行 = 高档行 H、非雾池含低档行 L(登记) | -| b4_fog_gate_hot | 同表 + T_fog_min=8 表值烤入——雾态池空加载致命(AC-6 分支 4 致命分支载体——R3 override 不触发加载校验,D2 边界⑤) | -| b4_clear_buff | clear_default 唯一活行 = defense_up | -| b4_reloaded | power/tier 各 +1(effect_id 不动——登记) | -| b4_nofloor | safe_cell 无刀行 + K_dmg=0 | -| b4_attackup_row | safe_cell 追加 attack_up 引用行(attack_up 复活后的正向夹具) | -| 致命根 ×8 | manifest(见下表;含 b4_floor_supply / b4_nodamage) | -| 程序构造 | RewardTable + RewardConfigTable schema 直引(AC-16);资格格清单 b4_list_A(3 格含 1 雾)/ b4_list_B(4 格)/ b4_list_single(1 格)坐标入版本库 | - -- 注入通道:行为夹具根经 `--data-root=` 注入(仅 debug、不入 `data/tables/`——D2 夹具纪律);标量 knob 单变分支(T_fog_min=1、K_dmg=2)经 R3 debug override(域内值、运行时态);加载致命分支一律烤入根承载、不经 override;两通道每夹具恰一登记。 - -### 致命类收窄豁免与 runner manifest - -| 类别 | manifest 行 | 触发条件 | 断言 | -|---|---|---|---| -| 加载期 ×8 | pool_empty_safe | safe_cell 全 0 权 | 独立 headless 进程非 0 退出 | -| 加载期 | pool_empty_fog | 全行 tier < T_fog_min(雾态空) | 非 0 退出 | -| 加载期 | clear_empty | clear_default 池空/全 0 权 | 非 0 退出 | -| 加载期 | clear_no_value | clear_default 唯一活行 = power 0 道具行(恒非空的可判定形式——A3 条款④表侧兑现) | 非 0 退出 | -| 加载期 | no_live_buff_row | safe_cell 有活行但零活 buff 行(tier_min_buff 无定义——F1 对偶致命) | 非 0 退出 | -| 加载期 | dangling_effect | buff 行 effect_id = "ghost_buff"(B3 StatusEffectTable 无此行;条件性夹具:默认根已含 effect_id 引用行 ⇒ 悬空校验已激活——dangling_ref_policy 首引兑现点) | 非 0 退出 | -| 加载期 | floor_supply_missing | K_dmg ≥ 1 ∧ safe_cell 池无 power ≥ P_min 活刀行(F5 加载护栏 (i)——根 b4_floor_supply) | 非 0 退出 | -| 加载期 | no_damage_row | K_dmg = 0 ∧ safe_cell ∪ clear_default 全池零活刀行(F5 加载护栏 (ii) 零伤害世界后闸——根 b4_nodamage,B2 OQ9 并案) | 非 0 退出 | -| 运行期 ×2 | floor_exhaust | roll_board 保底耗尽 | 调用后退出码非 0 | -| 运行期 | empty_eligible | roll_board(∅) debug 断言中止(release 构建语义 = push_error 致命路径——实现期 ADR 登记) | 非 0 退出 | - -- 其余致命类别(通用枚举域/域校验/R1 类)由 D2 AC-2 同类别 loader 夹具承载(表无关,豁免声明收窄);每用例先 `reset_diagnostics()`(D2 冒烟协议,全局声明)。 - -## 附录 D:去向映射(零丢失可审计证据) - -| 原文章节 | 落点 | -|---|---| -| 头部(状态/版本/支柱/一句话) | design 头部 | -| 速览(定位/拥有/不拥有/上游/下游/硬约束 + 缺位后果) | design 设计目的定位 + 系统范围 + 依赖与输出;缺位后果展开 → analysis「体验锚点」 | -| 体验锚点(四行 + 反向护栏 + 参考感受) | design 设计目的体验承诺 1–5 + 反向护栏表;参考感受与预读行为论证 → analysis「体验锚点」 | -| 全局流程(奖励授予字符画 + 出口分发表) | design 核心循环(字符画 + 出口分发表) | -| 全局流程(库存生命周期字符画) | design 规则 4 + 状态表 + E7/E15(事实全部保留,字符画不重复) | -| 核心规则 1–10(人话 + 举证) | 人话 → design 各领域章节编号规则(括注原规则号);举证中的公式/校验 → design 对应 F 节与表格;论证 → analysis 对应问题节 | -| 规则 2 实现参照(install 期预分配表) | 事实并入 design F1 表达式 + 边界表 + API 面 roll_board 行(表格不重复) | -| 规则 5 结算顺序表 | 事实并入 design 核心循环字符画 + 规则 5 + B1×① + 调参表非 knob 清单(表格不重复) | -| 规则 1/3 实现参照(两级奖励分流表) | design「奖励类型」节分流表(与 category 枚举表合并) | -| 规则 5/7 实现参照(道具使用窗口表) | design「道具使用窗口」节表格 | -| 枚举(category 五值 + 预留值) | design「奖励类型与数据表」 | -| RewardTable schema(九字段) | design「RewardTable schema」节 | -| 默认根内容行(八行 + 归一占比/雾池/对账对注记) | design「默认根内容行」节 | -| F1–F6 结论 + 推导代码块 + Variables + 验算边界(Example/Output Range/边界) | design 对应 F 节(结论先行 + 表达式 + Variables + 边界表) | -| F2 锚性质 / AC-19 失效面注记 | analysis「清图与雾区奖励如何定价」 | -| F4 attack_up 口径论证(复活史、锚参照迁移) | analysis「道具伤害吃不吃修正」 | -| F5 概率性致命带注记 / 否决案存档 / 保底仅计 damage_item 论证 | analysis「每板刀供给如何保底」 | -| F6 供给面口径 / 衔接注记(B2 OQ3) | analysis「默认根数值如何锚定」 | -| 方向预检(刀供给期望/击杀需求/预警联动/输入缺口) | analysis「默认根数值如何锚定」 | -| 状态(两容器状态表 + 不变式) | design「状态与边界情况」 | -| 边界情况 E1–E21 | design 边界情况表(编号 + 条件 + 行为);E10 选定理由、E3 缓解论证 → analysis | -| 依赖(上游/下游 + 双向一致性核对) | design 依赖与输出双向表 | -| B1 侧义务清单 ×6 / D1 侧义务清单 ×5 | design 依赖与输出(活契约) | -| A4 定价硬约束的 MVP 承载状态 | design 依赖与输出;承载论证 → analysis「清图与雾区奖励如何定价」 | -| 接口漂移登记 ×6 | analysis 附录 A(历史审计) | -| 呈现与 UI 契约 ×10 | design 依赖与输出「呈现数据面契约」 | -| Tuning Knobs(9 knob + 非 knob + 交互 + 所有权) | design 调参表 | -| 失衡预警清单 ①–⑧ | design 失衡预警表;④的 λ 推导 → analysis「默认根数值如何锚定」 | -| 验收标准:测试口径 / 夹具与种子 / 致命 manifest | analysis 附录 E(验收执行规格;夹具根名与 manifest 行名不变,AC 表引用不失联) | -| 验收标准:API 面 / AC ×21 | design 验收标准(AC 编号不动、全文保留) | -| 覆盖矩阵(Core Rules/Formulas/Edge Cases/上游承接/覆盖口径) | analysis 附录 C | -| 缺口预检 ×11 | analysis 附录 B | -| 开放问题 OQ1–OQ7 | analysis 开放问题(编号保留)+ NQ-1–NQ-7 待拍板 | -| 版本历史(六行) | design 版本历史(原六行 + v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/c2-adventure-structure.md b/design/archive/gdd-2026-09-14/analysis/c2-adventure-structure.md deleted file mode 100644 index c467d695..00000000 --- a/design/archive/gdd-2026-09-14/analysis/c2-adventure-structure.md +++ /dev/null @@ -1,148 +0,0 @@ -# C2 冒险结构 设计推演 - -> 状态:concluded · 本文只装"为什么"——`design/gdd/c2-adventure-structure.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 本文由 v1(lean 全文,2026-09-14)两件套迁移而来:原文的公式推导过程、数值锚定论证、候选取舍、体验锚点论证与已裁决争议按问题归位;文末附开放问题、历史审计与去向映射(零丢失审计表)。 - -## 问题一:冒险骨架为什么是"N=2 线性序列 + 死亡即终",序列为什么必须被内容覆盖锁死? - -### 广度分析 - -- 候选 A:维持切片现状(单关 N=1)——收益是零新增内容即可运行;代价是承载不了 P4"不断下探更险的层"的序列感,也没有 P1 要的冒险级对照物("这局我到第几层"没有坐标)。 -- 候选 B:线性序列 MVP N=2(L1 地牢基线 → L2 雾解锁 + 数值台阶)——收益是用最小内容批同时给出可感知难度台阶(通关率带下移 + 雾解锁 + 数值跳升)与冒险级坐标;代价是 N=2 生效前提 = C3 L2 深度轴行值(enemy/board_gen 的 (2, D1–D4))填充批,未落地期只能以 N=1 合法态运行。 -- 候选 C:更长或带分支/跳关的序列——收益是逼近愿景单局 20–40 分钟(OQ1);代价是扩关 = 内容批(链行 + 敌我数值 + 变异解锁同批落),MVP 期内容缺口风险最大,且跳关/回头路与 MVP 线性语义冲突。序列扩展走修订批,不许静默加回。 - -### 深度分析 - -序列覆盖义务把"冒险长度"从运行时问题变成内容生产问题:冒险关数 ⊆ 表内容覆盖,运行时战斗表 floor 兜底属 D2 既有语义,C2 不产生越界请求、玩家不可达越界关——越界关卡 = 内容生产缺口,必须在冒烟期被断言拦下(行集内每个 battle/boss 节点 (L,D) 在 enemy/board_gen 两表有精确行 + 序列关数断言,D2 跨表校验复用),而不是运行期被兜底吞掉。关卡行缺失同理是序列配置事故、fail-fast 处置,与战斗表 floor 兜底分属两层。 - -难度总闸在 N:P_run = Π P(L_i) 是乘法合成——N=2 合成带 [6%, 20%](L1 [30,50]% × L2 [20,40]%,L3+ [10,25]% 预留)对应 Roguelike"多数局止步中途"的体感;每加一关带再乘一次,所以扩关节奏必须用真人单关时长数据裁决(OQ1),不能拍脑袋加关。链模板(battle D0/D1 → reward → battle D2/D3 → rest → boss D4,7 节点 5 战斗深度)与深度标号规则(前序战斗节点计数、Boss = Dmax、reward/rest 不占深度不查战斗表)让 L1/L2 同构复用、加关只动内容批不动结构。 - -### 综合判断 - -定案:MVP N=2 线性序列(无跳关、无回头路),死亡即冒险终;通关 = Boss 战胜利(C3 Boss 通关编排归属 C1/C2 域——game-concept 冒险语义承接);序列覆盖由冒烟断言 + D2 跨表校验承接;A4 雾 unlock_level=2 是 L2 台阶的内容面(序列难度排布消费);扩关节奏归 OQ1(playtest 批次 2 后,C2 + C3)。 - -## 问题二:HP 为什么一条血走完整个冒险、恢复为什么只留恢复点与大奖励两个显式口? - -### 广度分析 - -- 候选 A:每关开始回满(切片现状)——收益是关卡间难度解耦、无需账本;代价是"Boss 前把血囤满"的囤积决策消失,P3 塌掉,冒险没有资源压力曲线。 -- 候选 B:跨战斗 HP 账本 + 两个显式回血口——收益是血成为冒险内唯一带得走的资源、恢复点位置 = 决策压力点;关卡切换零结算、账本收支四口(置满/交出/收回/入账)结构简单可测;代价是要给 C1 增 report_battle_end / heal_clamped 两个上报口,并经 begin_battle 覆盖值通道供值。 -- 候选 C:大奖励改部分恢复——收益是削弱对满血口径的强依赖;代价是 C3 逐关通关率带按每关满血开局校准,大奖励血回满正是该口径跨关成立的闭合件——改部分恢复则 F1 合成式整体失效、须改口径;否决,仅在 OQ2 大奖励形态扩展时重审。 - -### 深度分析 - -跨战斗 HP 持久性归 C1/C2 是已锁事实——B2 单位接口以初始 hp 入参、零变更,C2 以账本兑现自己那半边;B4 关内库存跨战斗延续与账本同构。三套跨战斗生命周期口径对齐:buff 战斗域清(B1)、RAP 战斗域清(A3)、库存关卡域清(C1 收束点)、血冒险域延续——冒险内无跨关遗留物,冒险层账本与摘要是唯一跨关状态。 - -clamp 边界:账本三写口全部 clamp [0, max_hp_eff];恢复点满血触发回 0 合法(账本静默——无明细行协议,与战斗域"奖励未生效"族不同层);defeat 腿 = 0 与"死亡即冒险终"闭合,不存在"带着 0 血进下一战"的中间态。max_hp_eff = HeroTable.max_hp + Σ大奖励提升——恢复比例 rest_heal_pct 随上限加成同步放大,防止高上限档恢复失效(切片 30 转正 provisional,数值复验归 C3)。 - -### 综合判断 - -定案:F2 账本结算式——战后回写 / 恢复点比例回血(floor(max_hp_eff × rest_heal_pct ÷ 100))/ 大奖励回满三写口全 clamp;血条跨关只降不自动回。切片"每关开始 HP 回满"转正改写为跨关延续,恢复只来自恢复点节点与大奖励两个显式口。依据链:B2 hp_persistence 归 C1/C2、B1 begin_battle 覆盖值入参、B4 关内延续同构。 - -## 问题三:关卡大奖励为什么是三件固定构成、为什么末关不兑付、为什么不进库存? - -### 广度分析 - -- 候选 A:发进背包的物品——与库存裁决冲突:库存生命周期 = 关卡域,收束点已清空,跨关携带违背"关卡末清库"既定语义;且奖励内容/库存语义归 B4/C3,C2 不碰库存域。否决。 -- 候选 B:三件固定(上限 +10 / 血回满 / 代币 +10/关)——上限提升经 begin_battle 覆盖值通道传入后续每战(hero 表运行期不可变,覆盖值是唯一合法提升通道);回满与 C3 满血开局校准口径闭合(问题二);代币给 C4 一个干净入账位(levels_cleared 乘子)。 -- 候选 C:三选一 / 攻击型 / 通关加成等扩展形态——MVP 无元进度消费面;AdventureTable 扩列结构位已留,随 C4 元进度设计(OQ2),通关加成位预留不启用(裁决归 C4)。 - -### 深度分析 - -末关不兑付的机理:上限提升只对"下一战"有收益,末关通关后没有下一战可受益——此时兑付是死数值,还虚增摘要口径;代币照记(乘子是 levels_cleared,不受影响)。 - -时点约束"收束清库之后、下一关开始之前"不可换:清库(B1 level_clear)在收束点已由 C1 触发,大奖励若插在清库前会被关卡域清空吞掉。上限 +10 的值锚是 C3 区间平移换算率(+10hp ≈ +1 轮)——回满 + 上限共同抬开局强度,上调须 C3 重扫 L2 通关率带;累加语义(每关一份,N=2 冒险至多一次)让多次兑付不产生重复歧义。 - -### 综合判断 - -定案:三件固定构成;F3 记账式 tokens = levels_cleared × token_per_level,通关与中途死亡同式、差异只在 run_completed 标记;末关不兑付;不进背包不占库存域。依据链:B4 库存关卡域裁决、C3 区间平移换算率锚、C4 记账位。 - -## 问题四:失败重开为什么是全新冒险、放弃为什么同失败型、种子域单位为什么是冒险? - -### 广度分析 - -- 候选 A:关卡重试 / 检查点——直接违背 game-concept"死亡则冒险结束"已锁语义。否决。 -- 候选 B:重开 = 全新一轮(新种子 / 第 1 关 / 满血 / 空手)——每局是新局面而非同一关复读(P1 锚点);保留面只有冒险摘要(坐标对照),清零面 = 账本 / 库存 / 种子域,Roguelike 重开纯度最高。 -- 候选 C:切片逐关播种 + 逐关重置——切片无冒险层的历史简化:逐关播种使冒险不可复现(快照契约域单位 = master_seed + 三流计数器对不上),转正改写为冒险域单种子、关卡间 RNG 连续。 - -### 深度分析 - -放弃同失败型:差异只在 run_completed 标记与"玩家主动";已到手的保留(已获大奖励不追回)——追回需要回滚大奖励三件,复杂度全在边界上且无体验收益。战斗中拒绝受理(战斗域单事务在飞),入口呈现仅非战斗期可达;MVP 无 UI 入口,语义预留归 OQ4 / D1。 - -种子接线:注入时点 = 冒险开始恰一次,冒险内雷图生成 / 奖励抽取 / 遭遇掷骰全部派生自该种子、冒险内不重置;重开种子与上局相同是合法态(熵源小域)——约束在通道而非值:种子生成禁走玩法随机通道、冒险内计数器随 reseed 归零,生成器归属归实现期 ADR(OQ3)。零流消费(RngService open_stream 零命中)让"冒险可复现域"有静态可验的判据(AC-8 静态扫描)。 - -### 综合判断 - -定案:死亡即冒险终(无关卡重试、无检查点);重开 = 全新一轮,保留面 = 摘要、清零面 = 账本/库存/种子域;放弃同失败型、非战斗期受理;一次冒险一粒种子、冒险 = 快照契约域单位(D3 复盘消费 master_seed)。依据链:game-concept 死亡即终、A3 RAP 战斗域生命周期、registry rng_service 快照契约 + D3 消费方。 - -## 问题五:C1/C2 编排边界为什么收束点在 C1、C2 为什么零直调? - -### 广度分析 - -- 候选 A:C2 直调 B1 战斗/清库——冒险层同时侵入战斗域与库存域,收束点语义分裂:库存清空触发源不唯一,时序归属扯皮。否决。 -- 候选 B:收束点在 C1(先调 B1 level_clear、再向 C2 宣布 level_end)——库存关卡域清空触发源唯一(C1 收束点),C2 零战斗域直调、零库存域直调,只守账本写口与收束监听。 -- 候选 C:收束点在 C2——C2 需要监听战斗内部状态才能判收束,跨层反向依赖,违背"C1 拥有关内行进"的切分。 - -### 深度分析 - -先例转正:切片 level_runner 的关卡域生命周期切两半——冒险域(序列推进 / HP 账本 / 大奖励 / 重开 / 种子)归 C2 侧新 owner,关内行进与节点兑付触发归 C1。B1 出口分发既定语义"关卡结束 = 上层显式调用"由 C1 收束点承接。 - -接口契约四件套(start_level / report_battle_end / heal_clamped / level_end)+ 战斗发起组装权是 C1 GDD 强制输入——C2 在 C1 之前设计,边界措辞即 C1 接口基线,C1 定稿须全款承接核对(门禁评审项)。战斗发起组装:深度取链位、关卡序号与血条取 C2 下放、hero_atk 走表值通道(MVP 冒险内不提升攻击)。防御双层:英雄死亡但战斗判定胜利为结构不可达(B1 判定 hero 先判),cleared 收束另有账本 hp > 0 防御断言——不依赖运行时序的单点正确。 - -### 综合判断 - -定案:C1 拥有关内一切行进与收束点,C2 只接结果;四件套 + 组装权成文为契约表(design 领域六);对侧义务全款列入 design 依赖与输出的活契约台账(C3 L2 行值批 / D2 种子注入入口 + AdventureTable 建表 / B1 begin_battle 入参供给方转正 / C1 全款承接核对 / C4 远期消费 / registry 三条目登记)。 - -## 开放问题(原文 OQ 全量,编号不动) - -| # | 悬案 | owner | 时机 | -|---|---|---|---| -| OQ1 | 冒险长度扩展节奏——MVP N=2(约 15–25 分钟)vs 愿景单局 20–40 分钟;扩关 = 内容批,节奏按真人单关时长数据定 | C2 + C3 | playtest 批次 2 后 | -| OQ2 | 大奖励形态扩展(三选一 / 攻击型 / 通关加成)——AdventureTable 扩列结构位已留,设计随 C4 元进度 | C2 + C4 | C4 GDD | -| OQ3 | master_seed 生成源(熵源通道禁走玩法随机——种子值生成器归属) | D2 / 实现期 ADR | 实现期 | -| OQ4 | 放弃入口呈现与受理细节(仅语义已定:非战斗期受理、同失败型结算) | D1 | D1 / UX 批 | -| OQ5 | L2 display_name 表现层命名(provisional 名"第二层 · 雾漫巢径"——风格对齐 L1"苔藓回廊") | C2 表现层 | L2 内容批 | - -迁移校验说明:未发现原文内部或原文与 registry 之间的数值/规则冲突;无新增待拍板项。唯一迁移副作用:registry `hero_override_parameter_passing.adr_status` 引用"C2 GDD 规则 3/4"作为 HP 账本供值的定义源——v2 迁移后 C2 规则改为领域内编号(对应现 design 领域三规则 1 与领域四规则 1–2),该跨文档编号引用失真,registry 修订归 owner 批处理(本迁移批禁碰 registry)。 - -## 附录 A:历史审计(自 v1 正文迁入,非现行规则) - -- 复核注记(v1 定稿时):v1 solo 出稿 → 经 /design-review(--solo 快速审批)APPROVED(0 blocking / 3 recommended——recommended 随下次修订批执行);专员/总监代理未咨询——生产前人工复核保留。评审日志:`design/gdd/reviews/c2-adventure-structure-review-log.md`。 -- 状态沿革:v1 出稿时状态头 In Design → v1.1 评审通过同步为 Approved(零规则变更),详见 design 件版本历史。 -- C2 是结构系统——运行时零新增公式;F1 为设计期工具式、F2/F3 为账本结算式,全部数值 provisional,调参所有权见 design 调参表(v1 数值节导语,随迁)。 - -## 附录 B:去向映射(零丢失审计表) - -| 原文(v1)节/表 | 落点 | -|---|---| -| 头部(状态/版本/作者/承载支柱/一句话/复核注记) | design 头部(状态/版本/一句话/推演件)+ 设计目的定位段(支柱);复核注记 → 本文附录 A | -| 速览·定位 / 拥有(7 项) / 不拥有(6 项) | design 设计目的定位段 + 系统范围(负责/不负责两清单,归属括注保留) | -| 速览·上游输入 / 下游输出 | design 依赖与输出主表对应行接口要点 | -| 速览·硬约束(零随机/序列覆盖/死亡即终/不碰库存域) | 领域一不变式 3(零流消费)+ 领域五规则 4(单一种子注入点)+ 领域二规则 2(序列覆盖)+ 领域五规则 1(死亡即终)+ 领域六规则 3(不碰库存域) | -| 体验锚点表(4 行:P4/P3/P1/锚点时刻) | design 设计目的编号承诺 1–4(关键词与机制承诺逐条保留) | -| 全局流程·冒险生命周期字符画 | design 核心循环与冒险生命周期(等义压缩重排,全部分支与标签保留) | -| 全局流程·出口分发表(4 行) | design 核心循环出口分发表(原文保留) | -| 核心规则 1(冒险骨架)+ 依据 | design 领域二规则 1;依据链 → 本文问题一综合判断 | -| 核心规则 2(序列覆盖)+ 依据 | design 领域二规则 2 + 细则表;依据链(D2 跨表校验 / C3 期望表与 OQ1 / A4 unlock_level=2)→ 本文问题一 | -| 核心规则 3(HP 账本)+ 依据 | design 领域三规则 1–2;依据链(B2 hp_persistence / B1 begin_battle 入参 / B4 关内延续同构)→ 本文问题二 | -| 核心规则 4(大奖励)+ 依据 | design 领域四规则 1–3 + 构成表;依据链(B4 库存关卡域 / C3 平移换算率 / C4 记账位)→ 本文问题三 | -| 核心规则 5(失败重开)+ 依据 | design 领域五规则 1–3;依据链(game-concept 死亡即终 / A3 RAP 生命周期)→ 本文问题四 | -| 核心规则 6(种子接线)+ 依据 | design 领域五规则 4–5;依据链(registry rng_service 快照契约 / D3 消费方)→ 本文问题四 | -| 核心规则 7(C1-C2 编排边界)+ 依据 | design 领域六规则 1–3 + 契约表;依据链(B1 出口分发 / level_runner 先例转正)→ 本文问题五 | -| 规则 2 细则表(5 行) | design 领域二首表(原文保留) | -| 规则 4 细则表(3 行) | design 领域四构成表(原文保留) | -| 规则 7 细则表(接口契约 6 行) | design 领域六契约表(原文保留) | -| 枚举·冒险结果(3 值)/ 关卡收束结果(2 值) | design 领域一"结果与收束枚举"合并表 | -| 枚举·冒险摘要(5 字段) | design 领域一冒险摘要表(原文保留) | -| F1(结论/推导/变量/验算) | design 领域二 F1(结论 + 表达式 + 变量表 + 验算表原文保留);推导论证 → 本文问题一深度分析 | -| F2(结论/推导/变量/验算) | design 领域三 F2(原文保留);口径与边界论证 → 本文问题二 | -| F3(结论/推导/变量/验算) | design 领域四 F3(原文保留);末关不兑付机理与扩展取舍 → 本文问题三 | -| 状态表(3 态)+ 不变式(5 条) | design 领域一状态表 + 不变式规则 1–3(hp ∈ [0, max_hp_eff] 并入不变式 1) | -| 边界情况表(11 行) | 逐行内联:末关 Boss 胜利 → 领域四规则 3 + 领域一;start_level 越界 → 领域二规则 4;内容缺口 → 领域二规则 3;level_end 重复宣布 → 领域一不变式 2;恢复点满血 → 领域三规则 4;上限已有加成 → 领域四规则 2;战斗中放弃 → 领域五规则 3;死亡但判胜 → 领域一不变式 4;重开种子相同 → 领域五规则 5;跨关遗留物 → 领域三规则 2;关卡行缺失 → 领域二规则 4("对齐 C3 边界情况表 / B1 判定段"两处依据 → 本文问题一/问题五) | -| 依赖表(上游 6 行 / 下游 5 行) | design 依赖与输出主表(原文保留,B1 上下游两行分开保留) | -| 跨 GDD 义务清单(7 行) | design 依赖与输出·跨 GDD 义务台账表(活契约,原文保留) | -| Tuning Knobs(5 行 + 非 knob 冻结清单 + knob 交互) | design 调参表(knob 列改 owner 列,域/默认/说明保留,provisional 标注)+ 表下两行注记;交互机理 → 本文问题二/三 | -| 验收标准 AC-1–13 | design 验收标准 GWT 表(编号与内容不动) | -| 开放问题 OQ1–5 | 本文开放问题区(编号不动) | -| 版本历史 v1 / v1.1 | design 版本历史(原行保留)+ 追加 v2 迁移行 | diff --git a/design/archive/gdd-2026-09-14/analysis/c3-difficulty-curve.md b/design/archive/gdd-2026-09-14/analysis/c3-difficulty-curve.md deleted file mode 100644 index 6b3803a0..00000000 --- a/design/archive/gdd-2026-09-14/analysis/c3-difficulty-curve.md +++ /dev/null @@ -1,213 +0,0 @@ -# C3 难度曲线与精英/Boss 设计推演 - -> 状态:concluded · 本文只装"为什么"——design 件(`design/gdd/c3-difficulty-curve.md`)只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 -> 出处说明:本文由 C3 GDD 两件套迁移建立(2026-09-14)——原 lean v2 全文的公式推导、数值锚定论证、候选取舍、体验锚点论证与已裁决争议按问题收纳于此;文末附录 A/B 为历史审计(评审史、registry/systems-index 回执、试玩批次记录),附录 C 为逐节去向映射(零丢失的可审计证据)。 - -## 问题:C3 为什么定位为"数值 owner 而非机制 owner"? - -### 广度分析 - -- 候选 A:运行时难度引擎——难度在运行时按公式计算全部敌人/板面数值。收益:曲线可任意平滑、单点改全局;代价:违反本项目"运行时零新增公式"硬约束,结算链路(B1 乘区 / B2 接口 / R1 直读)全要开口,切片已验证的"直填行值"工作方式作废。 -- 候选 B(采纳):设计期直填行值为主体 + DifficultyTable 修饰结构位预留。收益:运行时零公式、R1 floor 解析直读零新机制、切片 .tres 直接转正为 MVP 默认曲线;代价:曲线平滑度受行值粒度限制。 -- 候选 C:全修饰表驱动——基表只存基准、全部难度经 DifficultyTable 套乘。收益:曲线参数集中一张表;代价:MVP 就要建表、调参两次换算,且 Boss 大台阶用乘数表达别扭。 - -### 深度分析 - -DifficultyTable 的真实需求来自精英节点(按坐标施加全局修饰),不是来自基础曲线;MVP 空表结构位(键 (L,D)、乘数域 [0.1, 10]、施加点 = B2.spawn 实例化时、行值快照之前套乘)以零运行时成本把 B2 实例化条款"接口未定"的预留兑现掉。越域 clamp 至域界 + warning 是 registry 登记的显式例外——修饰乘数是合法配置、越界是组合事故而非配置事故,fail-fast 不适用;域界 = 玩法硬顶。Boss 不走修饰表:Dmax 直填行让"数值大台阶 + 专属行为环 + 本关最大板形"三件事在一行内可读、可断言(A1 第三轴登记约定的兑现)。 - -机制本体的归属边界:encounter 掷骰执行归 B1 编排、护甲克制矩阵机制归 B1(C3 投值)、供给控制器机制本体归 B4(C3 投参数)、敌种机制归 B2、变异机制框架归 A4(C3 只投内容行)——"谁拥有语义、谁投值"写进 design 系统范围两清单,实现者靠"不负责"清单判断票面。 - -### 综合判断 - -直填为主体、修饰为结构位,运行时零新增公式是全系统第一硬约束;全部数值 provisional 起步随 playtest 修正。 - -## 问题:曲线为什么是 f(L, D) 双轴 + Boss=Dmax 三段结构? - -### 广度分析 - -- 单轴(只按关卡序号线性加难):实现最简,但关内没有节奏起伏,Boss 无法成为"压轴"。 -- 双轴(L 大台阶 × D 小坡度 × Boss=Dmax):台阶感与坡度感分离,内容投放(新敌种/新行为环段/新变异)天然挂在台阶上。 -- 随机扰动(难度抖动):局内变化不可归因,产生"被坑"感而非"变险"感。 - -### 深度分析 - -体验锚点论证:P4 要求"越下越险的压迫节奏"——每层一个可感知台阶("这一层开始有雾了":新敌种登场/新行为环段/新变异解锁 + 基准数值跳升;L 轴台阶 + D 轴温和加压);但台阶必须可解释——跃升可归因于可见变化而非纯数字膨胀,后者产生"被坑"感而非"变险"感;可量化形态 = S/K 区间随 (L,D) 的漂移轨迹(绿→黄→红空间分布)。P1 要求"我变强了"可推导——首关基线明显吃紧但多数玩家能过(通关率目标带),后续关卡陡升使 C4 天赋提升产生可测量的通关期望改善,区间平移换算率(+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)把体感变成可推导结论。P3 要求压迫有顶点——Boss 房开门前是恢复点/囤刀决策压力顶点,供给稀缺性在此兑现价值。锚点时刻:第二层首遇熊地精——三拍行为环 vs 地精单拍攻击,难度跃升有具体面孔;击杀 Boss——"这层我算下来了"的完成感。 - -参考感受合成:Peglin 的地图难度爬升 × 杀戮尖塔的 Act 结构(普通→精英→Boss 三段节奏)→ 本作 = 关间大台阶 × 关内小坡度 × Boss=Dmax 关底压轴。 - -F1/F2 的域来自"台阶可感但不压垮推理"的夹逼:s_hp ∈ [0.05, 0.20](每档 +5%–20%)保证同敌种坡度温和;k_L ∈ [1.3, 1.6] 保证关间跳升明显但不失真。两条边界与先例:goblin 24hp 的 D1 理论值 ≈26 在切片中被"群×2(13hp ×2–3 只)"替代——数量是比单体质变更优先的深度表达(保持单拍环低威胁读数、总量受控);k_L 只适用于敌种延续场景——L1 酋长 150hp 直推 L2 D0 ≈210 不成立,新敌种登场基准按环复杂度重定(三拍环单位 hp 低于单拍环同关值:bugbear 40/18 < goblin 群总量但威胁更高;L2 锚行 30/7 为内容行非 k_L 直推)。 - -内容侧承诺"数值不是内容":每关至少一项新内容投放(新敌种或新环段——B2 投放节奏规则 OQ8 共担);投放断档 = 敌信息总量见底、学习曲线枯竭,C3 调参无法修补——这是流程投放检查项拦截的内容生产缺口;越界关卡(level 999 类)同理属内容生产缺口而非玩家可达态,冒险结构(C2)应在其内容覆盖范围内生成关卡序列。 - -### 综合判断 - -双轴 + Boss=Dmax 三段定稿;"台阶必须可解释"写进体验承诺;s_hp/k_L 域如上;多敌种同深度选择与投放节奏跟 B2/C1 共裁(MVP 每行集恰一敌种锁定,多敌种走预登记改键通道、本 GDD 预留不定义)。 - -## 问题:为什么用生存链区间模型替代关级供给带? - -### 广度分析 - -- 候选 A(退役):关级供给带——奖励供给 ÷ 敌方压力,比值 ∈ [1.1, 2.0]。收益:单指标直观;代价:其验算 0.54 判"短缺态",与实测 60% 通关率直接矛盾——方向指引反指(对偏易的游戏报"加供给")。 -- 候选 B(采纳,用户设计):生存链区间模型——每战 S/K 区间三档判定 + 关级通关恒等式 + 输出占比带。收益:直接建模"能不能过/赢得多惨",与 level_monte_carlo actuals 同构,偏差可定位到生存侧或击杀侧;代价:五项输出 × 三项输入必须逐项入账。 -- 候选 C:纯通关率仿真(只看通关率带)。收益:指标最少;代价:无法定位偏差来源,调参没有杠杆指向。 - -### 深度分析 - -0.54 反指的根因是漏项审计:原供给 180 只把 clear_blast 算一次(实际 ×清图数 3–4 = 120–160),漏掉伤害A/B 充能、attack_up 增量、RAP 刷新新板追加供给——逐项入账后"0.54 短缺"消失、关级恒等式闭合。教训:关级比值模型对漏项不敏感;区间模型按战拆解后每项都有 actuals 对账(输出侧五项:基础攻击/刀/clear_blast/A+B 充能/attack_up;输入侧三项:承伤/治疗/减伤)。 - -三档判定语义与阈值:绿(S_min > K_max)= 最坏也能过、与运气无关——教学位必须绿档;黄(E[S] ≥ E[K] + 1 且非绿)= 有失败分支、期望占优,margin ≥ 1 轮是最低阈值;红(S_max ≤ K_min)= 最好也打不过、配置事故——七步流程第③步扫描拦截、禁止入表。输出占比带 [15%, 40%]:<15% 奖励摆设、>40% 供给依赖(AC-14)。 - -口径两读数:公式包络(必过/必死结论)与 actuals p10–p90(日常判定)并存——与 B1 actuals p10 纪律同构;HP 持久化耦合各战区间,联合分布由 monte_carlo 裁决,不做解析近似。L1 五战手算(p10–p90 估算口径)给出形态带基准:D0 教学位绿、D1/D2 黄、D3 黄偏红、Boss 黄红边缘(旗覆盖率主导 vs 囤刀+甲B 对策)——与"≥1 绿 + 中段黄 + Boss 黄不红"的目标形态吻合。 - -### 综合判断 - -区间模型定稿并替代供给带(供给带的 [1.1, 2.0] 域与 0.54 读数只在本文留档);三档判定进入七步流程第③步扫描与 AC-4;输出占比带进入 AC-14。 - -## 问题:数值锚如何标定——通关率带、Boss 血量锚、真人系数、完美档? - -### 广度分析 - -- Boss 血量锚带演进:v1 预登记 [0.35, 0.55](当时"切片 0.81 越上界"读数)→ 试玩批次 1 / v3 数值批修订为 [0.5, 1.1](OQ2 采信用户"可上调"裁决,旧带与旧读数由本条替代)→ 现行带锚定稿 + 加难走廊 [1.1, 1.35] 预登记(L1 通关率压带首选杠杆,扫描终裁后落带;Boss 180–207 候选,真人实测 Boss 战时长后终裁)。 -- L1 基线通关率带:原 40–60% → 带锚定稿 [30, 50](v3 实测 60% 越上界,触发加难杠杆批:r_boss 走廊 + 群战上探 + 供给 decay 0.5→0.6 候选)。 -- 真人系数:v2 曾声明"真人预期低于模拟"→ 批次 1 证伪(真人 100% vs 模拟 80%,真人显著强于模拟者)→ 方向声明更正落地:带按模拟口径定义、真人系数批次 2 标定(OQ3)。 - -### 深度分析 - -F3 口径统一:Σ普通战斗hp期望必须含 unit_count 区间骰期望——L1 v3 Σ = 36(D0 [1,2]×24)+ 32.5(D1 [2,3]×13)+ 40(D2)+ 45(D3 [2,3]×18)= 153.5,Boss 150/153.5 ≈ 0.98 带内;旧验算 Σ=142 系固定数量口径与旧 Boss 值混算,由新口径替代(口径与击杀侧恒等式统一)。走廊验算:Boss 180 → 1.17、200 → 1.30,均落 [1.1, 1.35]。败北分布向 Boss 集中(4/6)符合压迫预期。 - -F5 区间机制解释(天赋列不是拍脑袋带):+100% atk → K 区间近似减半 → K_max ≈ S_min 转绿档 → ≥95%;C4 平移换算率 +10hp ≈ +1 轮(÷d̄≈8–10)、atk 翻倍 ≈ K 减半——区间位移机制承载通关率天赋列,C4 拿到的是换算率而非独立目标带。 - -完美策略档的结构性优势论证(OQ7 主项,2026-09-14 用户拍板落地测量仪:零盲挖/全标旗/卡死刷新技能轴上界):其结构性优势 = 零踩雷直伤 + 全标旗 weaken 顶格 + 快杀,使 47/50 血缓冲吞掉全部值域方差。区间批(奖励五行 power 区间 + 敌方 atk 区间 ±3)全部落地后复测(N=30):0 加成通关仍 100%、承伤 3.5→3.9、踩雷 0.00/局、+50%~+200% 恒 100%。结论:数值区间杠杆族对 ≤40% 验收线无效已实测坐实;承伤带与 F5 带对技能轴上界零分辨力(calibration_gap 定量读数)。剩余杠杆三选:承伤硬地板(不可减免平伤,B1/B2 域)/ weaken 饱和语义(全标旗收益递减,B3/B1 域)/ 极端区间宽度(毁基线与数字可读性锚——建议否决)。待用户裁决。 - -减伤墙批(2026-09-13,defense_scan 触发):实测墙轮 39%、真人局 12/12 轮零承伤满血通关——减伤墙过强定量坐实;裁决 defense_up magnitude −50→−30(叠满两层 = −60 帽)、石肤权重 24→16(attack_up 升池内最高行)——B3 侧行值批,C3 承伤带(F4)复验责任随批。F4 侧读数链:D0 goblin ×1(7atk 单拍环)每结算恒 7 × (1−0.22 平均减伤) ≈ 5.5/轮 → 裸 R_survive ≈ 50/5.5 ≈ 9 轮;E[beat_dmg] 的构成(heavy=2 拍别乘数、伏击 +3×层数帽 4、行为环确定性轮转)使入伤峰值/谷值可手算(峰值 = heavy 齐射尖峰 + 伏击满层、零减伤;谷值 = charge 拍 + 全减伤);weaken 覆盖是生存侧最大单一杠杆(P3 兑现点)。 - -### 综合判断 - -现行锚 = 通关率 [30,50](L1 基线)+ L2/L3+ provisional 带(随 OQ1 校准)+ r_boss [0.5,1.1](走廊 [1.1,1.35] 预登记)+ 承伤对照带 ≤20%/普通场、≤50%/Boss 场 + 通关余量 p90 ≤13 & p10 ≥3。全部 provisional 起步随 playtest 修正;扫描落带前 v3 值 provisional-pending-scan(OQ7)。 - -## 问题:遭遇随机化为什么用"区间 unit_count + encounter 封闭流"? - -### 广度分析 - -- 定值行(切片原状):局感确定、可被背板;关内深度表达只剩单体质变更一条路。 -- 区间 unit_count + 同敌种掷骰(采纳):数量是比单体质变更优先的深度表达(F1 Example 的延伸),且不触碰 B2"每行集恰一敌种"锁定。 -- 同深度第二敌种行:键冻结下同深度第二敌种行触发行集致命(B2 表结构校验),需改键走 D2 Rule 4 接口漂移——留给 C1 分支地图定稿时核对。 - -### 深度分析 - -随机通道约束:RngService encounter 封闭流(registry 流集合已登记;增流走代码 + P1 支柱评审);scope_event_binding = 每次战斗实例化恰一 scope;掷骰时点 = B1.begin_battle 实例化期(扫雷开始前);发生在挖掘决策域之外——P1 合规(推理不受随机污染);同种子全程可回放(流取号确定性不变)。消费方式 = B1 掷骰 → B2.spawn 以 override 参数接收实际数量——B2 零随机纪律保持(收到的即确定值)。 - -教学位豁免:新敌种首遇节点固定数量不加骰(D0 goblin ×1、D2 bugbear ×1 固定)——学习曲线不受骰气干扰。域 [unit_count, 3] 沿用 B2 上界锁定;unit_count_max 缺省 = 定值,旧行零迁移。期望总量对齐关级恒等式检算(F6 的数量骰输入项)。敌方 atk 区间 ±3 与数量骰同流(encounter 恰一 scope,数量骰先、atk 骰后),spawn 期整战持久——"每拍抖动"被否决(数字可读性锚);中点恒等原值,A3 条款①当量锚以中点口径维持。 - -### 综合判断 - -区间语义 + encounter 封闭流 + 教学位豁免 + 同种子可回放四件套定稿;区间宽度(±3 与奖励五行 power 宽度)均 provisional 归 C3 测量迭代;B1/B2/D2/registry 接口漂移回写完成(X-6~X-8,见附录 A)。 - -## 问题:调参为什么强制七步 + 四条约束边界 + 六组联动? - -### 广度分析 - -- 自由调参(改表即生效):速度最快,但敌 hp 与奖励供给单边移动会静默破坏平衡(registry 联动重算义务正是为此而设)。 -- 七步流程(采纳):改表值 → smoke_all 全绿 → level_monte_carlo 扫描(通关率带 + 三档判定 + 通关余量 + 输出占比)→ B4 登记常数与对账重制 → 对账复算(条款③⑤/预警⑥)→ README 调参日志登记;任一步 FAIL → 回滚或登记 OQ。 -- 只留对账复算(砍扫描步):扫描是唯一能把通关率/三档/余量/占比一起看全的步骤,砍掉即失去 provisional-pending-scan 的落带机制。 - -### 深度分析 - -四条边界的来历:条款③满配破线(unit_count>1 行须"降密度或降 m_amb"补偿——B1 F4 双轴约束,registry clause3_supply 登记;切片群战行 hp/atk 下调为合规先例);条款⑤清图支配性(约束包①需求对 clear_blast C=40 重推,缺口 6.1/51.8——登记非支配设计态;原 clear_knife C=8/16 模型由现行登记替代;OQ4 playtest 持续观测弃图率,批次 1 初步裁决 = 真人零弃图倾向、非支配设计态成立、C 量级不上调,但同步声明 P1 对冲弱化——本裁决弱化 A3 条款⑤对 P1 失败模式的经济对冲,弃图率观测加权监控);可推理率绝对锚 [0.85, 1] 不可下探(P1 生成端保证);期望表对照(复算 + README 登记偏离)。 - -第④步(B4 登记常数与对账重制)的依据是 B4 义务 #10:没有这一步,T_fog_min/K_dmg/N_draft/P_min/默认根行值调参会让 B4 AC-19 对账对 (knife_adv, attack_up_basic) 漂移检测、AC-6 分支 4、AC-18 重跑假失败——这就是 F7 从六步改七步的原因。第②步闸的实证是 d0.28 回退先例:d0.28/t0.87 → best inferability ≈0.81 降级告警 → 回退 0.25/0.88——密度与 target 是联动对(A1 求解器能力天花板内联动调参),禁止为难度牺牲 P1 度量达标。 - -期望口径双读数纪律:锚行读数(2.0×/2.6× 类)不得作为 unit_count=2 的放行依据——锚行口径与跨行期望口径必须双登记(B1 条款③闭合回执的历史:默认 unit_count=1 下 L1 ≈2.0×/L2 ≈2.6× 通过,跨行期望口径 ≈1.2×/1.5× 同向通过——双口径登记在案)。快杀退化(预警⑥:战斗结束未开资格格占比 >70% 警)处置 = 仪表监控 + 接受——低难度行被高天赋速杀是 Roguelike 成长兑现的合法形态,无需修复;区间形态钩子 = K_min < 2 观测位。 - -联动网络六组的由来:敌 hp ↔ 奖励供给是 registry 已锁的联动重算义务;unit_count ↔ 密度/m_amb 是条款③的直接推论;密度 ↔ target ↔ attempts 是 d0.28 三元组;ap_per_round ↔ RAP 体系 ↔ refresh 上限走跨字段校验闸(A3 所有权的措辞更正:A3 GDD 无调参权授予回执,联动评估归 C3、调参所有权归 A3);m_w ↔ B1 F0 锚对照表终值共裁 B4/B1(C3 提案通道);armor_type ↔ 伤害A/B 充能 ↔ 克制矩阵——敌种甲型变更须复算 Boss/普通战 K 区间。 - -### 综合判断 - -七步 + 四边界 + 六组联动定稿;"任一步 FAIL → 回滚或登记 OQ,禁止带病前进"与"每次修订强制走满"是流程硬规则;对账复算在第 5 步强制执行。 - -## 开放问题(原文全部 OQ,保留原编号) - -| # | 悬案 | 进展 | owner | 时机 | -|---|---|---|---|---| -| OQ1 | L2+ 曲线数值——本 GDD 定结构/流程/目标带;具体数值行随关卡内容扩展填充(内容与数值同批——C2 关卡序列定稿后) | 结构已定 | C3 随批 | L2 内容扩展时 | -| OQ2 | Boss 血量占比——v3 记录值更正 0.98(153.5 期望口径,带内 ✓);加难走廊 [1.1, 1.35] 预登记(Boss 180–207 候选);真人实测 Boss 战时长后终裁 | 走廊预登记 | C3 | F7 扫描 + playtest 批次 2 | -| OQ3 | 真人修正系数——批次 1 方向确认:真人显著强于模拟者(v2 真人 100% vs 模拟 80%);F5 方向声明已更正落地;真人系数待 v3 试玩采集定量 | 方向已定 | C3 + playtest | playtest 批次 2 | -| OQ4 | 条款⑤支配性真人观测——批次 1 初步裁决:真人零弃图倾向 → 非支配设计态成立、C 量级不上调 ✓(B1 约束包②采信);**P1 对冲弱化同步声明(B1 ② 条件):本裁决弱化 A3 条款⑤对 P1 失败模式的经济对冲,弃图率观测加权监控随之**;维持登记:单一样本 | 初步裁决 | C3 + B4 | 持续 | -| OQ5 | 精英节点形态——完整语义(独立节点/词缀/出现规则)= C1 分支地图定稿后的联动设计(A1 定稿强制重审随之触发) | 未设计 | C3 + C1 | C1 GDD 定稿 | -| OQ6 | 轮内刷新对难度模型的冲击——批次 1 初步读数:刷新零使用,根因是盲猜墙不足(inferability 0.88);杠杆预登记:密度联动上探(d0.28/t0.85——A1 回退先例风险);保持开放 | 初步读数 | C3 | playtest 批次 2 | -| OQ7 | **加难杠杆扫描执行 + 完美策略档测量**——杠杆候选(r_boss 走廊 180–207 / 群战上探 / decay 0.6)已预登记;执行 = 七步流程第③步 level_monte_carlo 扫描(三档判定 + 通关率带 + 通关余量 + 占比四表对照)。**2026-09-14 完美策略档落地(用户拍板)**:零盲挖/全标旗/卡死刷新技能轴上界测量仪(godot 本机可用已验证)。**区间批已落地并复测(同日拍板②——奖励五行 power 区间 + 敌方 atk 区间 ±3)**:完美档 0 加成仍 100%(承伤 3.5→3.9)——**数值区间杠杆族对 ≤40% 验收线无效已实测坐实;主项待裁决 = 结构性杠杆三选**(承伤硬地板〔不可减免平伤,B1/B2 域〕/ weaken 饱和语义〔全标旗收益递减,B3/B1 域〕/ 极端区间宽度〔建议否决——毁基线与数字可读性锚〕);落带前 v3 值 provisional-pending-scan | 完美档已测;区间批无效性已证;结构杠杆待裁决 | C3 | 用户裁决后 | - -### 迁移期发现的待拍板项(非原 OQ) - -- 状态头不一致:原 GDD 头为"状态 In Design",而 systems-index(2026-09-14 C3 design-review 修订批门禁增补记录)登记 C3 为 **Approved**(用户拍板免复评放行)。本迁移保留原文"In Design"未改,待 owner 确认后统一两处。 -- 交叉引用异常:原依赖表 B2 行写"多敌种同深度选择规则共裁(OQ7——C1 联动)",但现行 OQ7 悬案是加难杠杆扫描;与 C1 联动的精英/多敌种语义对应 OQ5。本迁移按原文保留"(OQ7——C1 联动)"未改,待 owner 裁决指向。 -- 版本号标注:原版本历史已有"v2"行(design-review 修订批),本次迁移行标注为"v2-两件套"以避免同号歧义——如需改号待 owner 拍板。 - -## 附录 A:对账与义务登记(历史审计) - -### 评审与复核史 - -- v1 solo 出稿(2026-09-12)→ v1-lean 格式迁移(2026-09-13)→ v2 /design-review 修订批(2026-09-14,lean 单会话):NEEDS REVISION 8 blocking 同日修订核销;专员/总监代理未咨询——**生产前人工复核保留(活义务,已随迁 design 版本历史行)**。 - -### 双向一致性核对回执(registry / systems-index 回执——已完成的历史登记) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| X-1 | systems-index 依赖表 C3 ← D2,B2;B1 块增补"C3 消费 B1 对账输出的事实依赖成立" | systems-index | ✅ | -| X-2 | "敌种 hp/atk/pattern 曲线数值、难度修饰 → C3" | B2 | ✅ | -| X-3 | "C3 = 条款③⑤约束输入方" | B1 | ✅ | -| X-4 | "权重/档位/威力曲线 + RewardConfigTable 参数归 C3" | B4 | ✅ | -| X-5 | "每行难度数值与曲线 → C3" | A1 | ✅ | -| X-6 | B1:begin_battle encounter 掷骰增补 + 扫描 scope 腿 + B1"零随机"边界扩界注记(encounter 流在结算步流之外) | B1 | ✅(修订批回写) | -| X-7 | B2:spawn override 参数、unit_count_max 字段语义与实例化记号调和、物种集 {goblin, bugbear, ogre_chief} | B2 | ✅(修订批回写) | -| X-8 | D2:EnemyTable schema +2 字段(unit_count_max、armor_type);SettlementTable +4 字段(damage_a_per_cell/damage_a_cap/damage_b_per_flag/armor_effectiveness) | D2 | ✅(修订批回写) | -| X-9 | B4:供给控制器机制承接 + clear_blast 换位 + K_dmg=0 禁区条款解除(保底语义迁移) | B4 | ✅(修订批回写) | -| X-10 | A4:elite/boss 标记字段落地时 warning 升闸(AC-11 未来腿) | A4 | ✅(义务登记——未来腿仍活,同步登记于 design 依赖表 A4 行) | - -说明:五条活契约(条款③ / 条款⑤ / 预警⑥ / unit_count 约束 / 期望口径双读数)不入本附录——它们仍在约束当前调参,落点为 design「依赖与输出 → 对账约束(活契约)」表。 - -## 附录 B:试玩批次记录(历史审计) - -| 批次 | 日期 | 数值基线 | 读数 | 裁决产出 | -|---|---|---|---|---| -| 批次 1(用户本人) | 2026-09-12 | v2 | 全部满血通关(清图为主/优先标雷/不用道具三策略均通)——基线难度不足定量坐实;Boss 血量 OK 或可上调;刷新零使用;零弃图倾向;治疗包零使用(不掉血伴生);伤害道具无特色(暂保留) | v3 数值批(atk 4/4/6/4/7 → 7/5/9/6/9;D0 24 保持防秒杀、Boss 130→150)+ DND 命名批(goblin/bugbear/ogre_chief——用户指令)+ 护甲克制批(armor_type none/a/b + 克制矩阵,数值 provisional)+ F3 带修订 + OQ2/3/4/6 读数;v3 扫描:基线 60%、败北向 Boss 集中 4/6、+200% 100%;下一批 = v3 真人试玩(OQ3 定量 + OQ2 终裁) | -| 减伤墙批(defense_scan 触发) | 2026-09-13 | v3 + 减伤墙批 | defense_scan 实测墙轮 39%、真人局 12/12 轮零承伤满血通关——减伤墙过强定量坐实 | defense_up magnitude −50→−30(叠满两层 = −60 帽)+ 石肤权重 24→16(attack_up 升池内最高行)——B3 侧行值批,C3 承伤带(F4)复验责任随批 | - -## 附录 C:去向映射(原文 lean v2 全文 → 两件套落点) - -| 原文节/表 | 落点 | -|---|---| -| 头部(状态/版本/承载支柱/一句话/复核注记) | design 头部 + 设计目的;复核注记 → 附录 A 评审与复核史("生产前人工复核保留"同步 design 版本历史迁移行) | -| 速览表(定位/拥有/不拥有/上游输入/下游输出/硬约束) | design 设计目的 / 系统范围两清单 / 依赖与输出主表 / 调参纪律规则与调参表引言(硬约束逐条) | -| 体验锚点表 + 参考感受合成 | design 设计目的承诺 1–4;锚点论证与感受合成 → 本文「双轴结构」问题深度分析 | -| 全局流程:难度曲线生成字符画 | design 核心循环(原样字符画) | -| 全局流程:F7 调参流程字符画 | design 调参纪律与状态 → 七步调参流程(原样字符画) | -| 出口分发表(5 行) | design 核心循环出口分发表(原样) | -| 核心规则 1–4(直填/双轴/投放节奏/切片转正) | design 基表行值与投放规则 1–4 | -| 核心规则 5–7(Boss/精英/scope=global) | design Boss / 精英 / 全局变异语义规则 1–3 | -| 核心规则 8(遭遇随机化)+ 细则表 + unit_count/RngService 枚举表 | design 基表行值与投放 → 遭遇随机化(规则 + 三张表原样) | -| 核心规则 9(调参约束内工作)+ 调参约束边界①–④表 | design 调参纪律与状态规则 1 + 调参约束边界表(原样) | -| MVP 行值总表 + 转正行集表 + 实测依据/v3/区间批/加难走廊四条注记 | design 基表行值与投放三张表 + 四条 bullet(原样) | -| 枚举:DifficultyTable 表 + schema 表 + unlock_level 门控序列表 | design Boss / 精英 / 全局变异语义三张表(原样) | -| 数值结论与推导定位声明 | design 难度模型公式节引言(原样) | -| F1 结论/公式/Variables/Example | design F1(结论 + 公式块含变量域 + Example bullet);域推导论证 → 本文「双轴结构」 | -| F2 结论/公式/Output Range/反例 | design F2(结论含 Output Range + 反例 bullet);论证 → 本文「双轴结构」 | -| F3 结论/公式/Variables/验算三行/口径更正 | design F3(结论 + 公式块 + 验算表);口径更正理由 → 本文「数值锚定」深度分析 | -| F4 结论/公式/Variables/验算两行 | design F4(结论 + 公式块含变量域 + 验算表);读数链论证 → 本文「数值锚定」深度分析 | -| F5 结论/目标带表/验算四行(含完美档扫描) | design F5(结论 + 目标带表 + 验算表);完美档结构性论证全量 → 本文「数值锚定」深度分析 + OQ7 | -| F6 结论/公式块/Variables/验算五行/漏项审计/0.54 反指 | design F6(结论 + 公式块 + 输入项表 + 验算口径表);0.54 反指与漏项审计 → 本文「区间模型」深度分析 | -| F7 结论/Variables(N 域/工具所有权)/验算(d0.28/第④步依据) | design 七步调参流程(字符画 + N 段落 + 流程锚点表) | -| 状态五态表 + 不变式 | design 调参纪律与状态规则 3 + 行值状态表(原样) | -| 边界情况表(10 行) | design 边界情况表(原样,两列化,依据内联) | -| 依赖上游 8 行 + 下游 4 行 | design 依赖与输出主表(方向列合并) | -| 双向一致性核对 X-1~X-10 | 附录 A 回执表(活义务同步 design 依赖行:A4 未来腿等) | -| 对账与义务登记表(5 行,活契约) | design 依赖与输出 → 对账约束(活契约)表(原样) | -| 呈现与 UI 契约(引言 + 5 行) | design 依赖与输出 → 呈现义务转注表(原样) | -| Tuning Knobs 引言 + 16 行表 | design 调参表(字段/域/默认/owner/联动与危险方向——原 16 行信息逐行并入,provisional 标注保留) | -| DifficultyTable schema 表 | design Boss / 精英 / 全局变异语义 → schema 表(原样) | -| 联动网络表(6 行) | design 调参纪律与状态 → 联动网络表(原样) | -| 验收标准 AC-1~AC-14 | design 验收标准 GWT 表(编号与内容不动) | -| 开放问题 OQ1~OQ7 | 本文「开放问题」区(原样,保留编号) | -| 试玩批次记录表(2 行) | 附录 B(原样) | -| 版本历史 4 行 | design 版本历史(4 行原样保留 + 追加 v2-两件套迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/d1-hud-framework.md b/design/archive/gdd-2026-09-14/analysis/d1-hud-framework.md deleted file mode 100644 index b036a144..00000000 --- a/design/archive/gdd-2026-09-14/analysis/d1-hud-framework.md +++ /dev/null @@ -1,224 +0,0 @@ -# D1 HUD 与界面框架 设计推演 - -> 状态:concluded(未闭合项见文末「开放问题」)· 本文只装"为什么"——`design/gdd/d1-hud-framework.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 - -## 问题 1:为什么 D1 必须作为独立的零玩法状态呈现层系统存在? - -### 广度分析 - -- 候选 A:不设独立呈现层系统,呈现义务散落在各玩法 GDD——收益:少一份文档;代价:27 项跨系统呈现义务没有单一兑付点,A2 的三事件流没有读者、B1 的流水协议没有呈现面,"自动战斗沦为无聊过场"(game-concept 已识别风险 #1)的防线无人承载。 -- 候选 B:呈现层自持部分玩法状态(如本地缓存棋盘、自判合法性)——收益:刷新链路短;代价:与核心双事实源,呈现失真(雾格显影 / 拒绝吞掉 / 格态混淆)直接杀死 P1"我算对了"的感知面。 -- 候选 C(采纳):独立 D1,零玩法状态、零写、零 RNG,只读经成文呈现面、写经组合根。 - -### 深度分析 - -垂直切片两起呈现层崩溃暴露"已定稿 AC 全覆盖 core、呈现层零测试承载"的系统性盲区:① 窗口载荷缺字段直接崩溃(信号参数无运行时类型检查);② battle_finished 后读已销毁对象。这两起不是偶发 bug,而是"呈现层没有成文契约"的结构性后果——信号载荷 schema、场景级测试、信号时点状态可见性必须升格为系统级硬性要求。 - -美术侧同理:art-bible §4.6 图标键契约已冻结(键与通道分配定稿、终稿美术归样张批),样张未制作不阻塞 D1 的前提,是呈现层以程序化占位先行并在契约层登记键位映射——这也只有独立系统文档能承载。 - -### 综合判断 - -D1 独立成系统,定位 Layer 4 Presentation、零玩法上游假设。design 件的系统范围、规则 1–4 / 17–20 与 27 项义务台账即本结论的落点。 - -## 问题 2:为什么界面只当翻译不当裁判、听消息只走中转、读数走白名单? - -### 广度分析 - -- 订阅形态候选:呈现层直订 A2/A3 事件(收益:链路短;代价:违反 ADR-0001,呈现层与玩法系统多点耦合,事件语义漂移直接打进视图)vs 只订 B1 步骤流 + runner 信号、其余经组合根转发(采纳)。 -- 刷新形态候选:纯事件驱动(代价:旗插拔/移动/AP/RAP/库存等动作零事件外发或零推送,纯事件驱动必然漏刷新)vs 命令式回执双通道(采纳:动作调用一返回,组合根立刻重查只读面刷新界面,不干等通知)。 -- 取数形态候选:自由读核心字段(代价:封装破碎、接口漂移不可追踪)vs 成文读数白名单、登记 registry `d1_presentation_surface`(采纳)。 - -### 深度分析 - -ADR-0001 明确"信号参数无运行时类型检查"——契约只能靠成文 schema + 消费侧逐字段断言兜底,这是规则 17 十三项载荷表双重用途(实现契约 + 消费断言)的直接成因。battle.md §Events Fired 的"呈现订阅 A2 三事件"表述与 ADR-0001 有措辞差,本系统按 ADR-0001 收窄为"经组合根转发或命令式回执"(冲突清单⑥,battle.md 正文不改动,复检批对齐)。 - -### 综合判断 - -规则 1–4、17、18 即本结论:零玩法数值字面量、零规则逻辑、零核心写调用(唯一发生在组合根)、零 RNG、零直订 A2/A3、禁回读核心生命周期状态。 - -## 问题 3:移动路径预览为什么是"合法性指示"而不是穿行动画? - -### 广度分析 - -- 候选 A:穿行动画轨道——收益:方向感强;代价:移动免费且高频,每次移动都付动画时间税,违反点击摩擦护栏(P4 ≤2 观测假设的承载面)。 -- 候选 B(采纳):悬停即画 `compute_move_path` BFS 路径蓝细线点迹(合法性指示)+ 执行时 ≤150ms 短滑。 -- 关联候选:点击远格自动"先移动再挖"复合意图——不采纳:移动免费高频,两击的摩擦符合观测假设;留 playtest 验证(A2 评估项留痕)。 - -### 深度分析 - -预览与执行必须同源(同一 `compute_move_path`,不可达返回空即预览不显示 + 禁止光标),否则"画出来的路"与"走出来的路"可能不一致,合法性指示反而成了谎言。F4 语义序仲裁退为防御性兜底,是因为单意图帧 + stop 终结当帧收集的纪律使生产面造不出会乱序的输入(联合清图让位条款生产面不可达)。 - -### 综合判断 - -规则 7、8 即本结论;短滑时长留痕 playtest 观测(battle.md OQ5),旋钮 = move_slide_ms,若反馈"移动太瞬"再议。 - -## 问题 4:棋盘格尺寸为什么是两档定值而不是一条闭式公式? - -### 广度分析 - -- 候选 A:单一闭式 floor(可用高度 ÷ N)——收益:一处公式;代价:固定边距下无法同时得出 36 与 45 两档(见深度分析)。 -- 候选 B(采纳,评审后用户裁决方案 A):cell(12)=36px、cell(10)=45px 两档定值(battle.md 拍板),公式退为装板期可行性校验器(违例 fail-fast)。 - -### 深度分析 - -反证:cell=36 要求可用高度 ∈ [432,443]、cell=45 要求 ∈ [450,459]——两区间不相交,任何固定 pad 的闭式都无法同时落进两个区间。两档值来源是 battle.md 拍板("格 36–45px 见方"两端),不是几何推导的产物;因此 F1 的正当形态是界限断言 + 可行性校验,而非闭式导出。 - -### 综合判断 - -design 件 F1 节即本结论:两档定值 + floor(min(D_w − pad_h, D_h − ap_bar_h − pad_v) ÷ N) ≥ cell(N) 且 cell(N) ∈ [30,45] 装板期断言;数字字号 = max(18, ceil(cell × 0.5))。 - -## 问题 5:结算明细为什么逐行念账、未生效行为什么不静默、极性为什么按键判? - -### 广度分析 - -- 明细形态候选:聚合摘要(收益:干净;代价:玩家无法把每一分收益对回自己哪一步扫雷决策,P2 规划延迟兑现的呈现半边断裂)vs 逐行流水 + 每行来源标注(采纳)。 -- 未生效行候选:静默吞掉(代价:voided 不提示 = 读感欺骗;零值行被吞 = 兑现不可对账)vs 聚合计数呈现 + 形状冗余(采纳——防逐行惩罚轰炸,且非色相独载)。 -- 极性判别候选:按 magnitude 符号(反例:负值增益存在)或按 pool 归属(反例:enemy_output 池两向并存)vs 键级极性表(采纳:attack_up/defense_up/weaken 有利、ambush 有害)。 - -### 深度分析 - -效果行 value 与 pool_value 必须两列分示、禁相加——否则"−130%×2 行 = −260%"的误读必然发生。P2 裁剪判据的最后半米由呈现层走完:行协议 13 类封闭枚举(B1 Core Rule 14)已经把归因字段备齐,呈现层唯一不能做的就是"替玩家省略"。 - -### 综合判断 - -规则 11、12 及其实现参照表即本结论;高光使用规则 = 事件型用独立高光行、属性型强调用行字段标记,庆祝不打在空兑现上(完美排雷首份即零兑付不发高光)。 - -## 问题 6:轮末道具窗口为什么在道具栏原地亮起、有库存恒弹? - -### 广度分析 - -- 候选 A:中央弹窗——代价:打断结算流的视线连续性,与"结算期原地展开明细"的双舞台常驻形态矛盾。 -- 候选 B:常驻库存条非模态——代价:窗口锚点的"至多选一件"承诺感消失,选用/跳过不成决策节点。 -- 候选 C:仅可用品触发——代价:usable_now 之外的库存信息(未选用件政策注记)失去例行曝光位。 -- 候选 D(采纳):E 区原位激活、MVP 有库存恒弹(battle.md 布局决策 D2);候选 B/C 归垂直切片留痕(B4 D1 义务②注记)。 - -### 深度分析 - -原位激活的配套纪律来自切片教训:窗口激活期间必须跳过常读条全量重建——全量刷新会冲掉窗口态(entry 36);空库存直接 skip 不弹窗、窗口标记照常登记(回放输入完整性归 B1),结算零停顿。去饱和 + 金橙色相偏移是 art-bible §2 明度恒定硬规则的合规化实例:锁输入的表达只经色相/饱和,不靠变暗。 - -### 综合判断 - -规则 13 即本结论:原位激活、至多选一件、提交窗口条目位置序(非库存句柄——切片缺陷④契约修正)、跳过恒在、政策注记常驻。 - -## 问题 7:零合法板为什么只做诚实提示? - -### 广度分析 - -- 候选 A:提示(采纳)——B1 上抛非法产物标记 → toast 诚实提示(非模态、不打断)。 -- 候选 B:补偿——补偿逻辑归 B1 域外,D1 无权发明玩法补偿。 -- 候选 C:确定性回退已知好种子——实现期 ADR 候选(A1 OQ2 关联),不是 MVP 面向玩家的形态。 - -### 深度分析 - -玩家永不卡死已由 A1 验收三分支保证,D1 面对的不是"救场"问题而是"诚实"问题:非法产物到达玩家眼前时,静默是读感欺骗,提示是体验债的诚实兜底(原"玩家不可见遥测域"口径由本条承接闭合)。 - -### 综合判断 - -边界情况表"零合法板"行即本结论:MVP 面向玩家的形态 = 仅提示(B1×3③ / A1 EC5,AC-19 注入腿承载)。 - -## 问题 8:体验锚点与美术解耦如何论证? - -### 广度分析 - -- 参考感受:Into the Breach 的格内信息分层(预告上格——威胁画在格子上)+ 杀戮尖塔的逐卡结算反馈。 -- 美术解耦候选:等终稿美术再开工(代价:样张批阻塞整个呈现层)vs 程序化占位先行(采纳:用代码按冻结色板与形状规则直接画出临时图形,终稿到位后原位替换、数据层零改动、零运行时换图)。 - -### 深度分析 - -P1 感知面:规则层的诚实(A2 数字恒真、三源拒绝)必须由呈现层原样送达——任何呈现失真(雾格显影 / 拒绝吞掉 / 格态混淆)= P1 的死亡体验。P2 呈现半边:逐行归因是"这个结果是我哪步扫雷带来的"的唯一兑现形态。P4 容器:挖掘期画面无杂音(能量 2/10,唯一在动 = 悬停呼吸微光)→ 结算期金橙光带逐行横扫(7/10)→ 清图金粒喷泉短促丰收(8/10)→ 失败暮蓝最静一拍(1/10),§2 能量档与明度恒定硬规则由 D1 的转场与反馈系统承载。高光节拍是 P2 爆发兑现节点(创意风险 #2 落点):完美排雷全屏喝彩 + 标中旗金框行 + H2 金框。 - -反向护栏:界面绝不替玩家思考(不预判合法点击以外的东西)、绝不静默改判(voided 不提示 = 读感欺骗)、绝不用装饰伪装逻辑差异(art-bible 原则三)——玩家对 D1 的正确感觉是"一块干净的玻璃":看穿它直接看到棋局与战果,玻璃本身不添乱。占位图同样过硬指标的理由:色板参数域从结构上保证(底足够亮、墨足够深),数字可读性 ≥4.5:1 对程序化占位同样适用;样张定稿 = 砖面形态与色板的冻结闸、终稿资产开工的前置,样张批不阻塞 D1 其余全部验收。 - -### 综合判断 - -design 件设计目的的五条体验承诺、规则 19、规则 22 与 Visual/Audio 执行锚点表即本结论。 - -## 附录 A:切片教训三条硬性要求落位表(entry 17——门禁评审核对项,缺项即 blocking) - -| # | 硬性要求 | 落位 | -|---|---|---| -| ① | 面向呈现的信号载荷成文 schema | 规则 17(13 项载荷表——A2 三事件/B1 行协议引用 + D1 自有遥测成文 + 零事件外发命令式刷新面成文) | -| ② | 场景级 headless 测试进 AC | AC-19 起场景级硬性块(真实实例化战斗屏场景 + 驱动完整对局 + 断言零脚本错误;载体 = 场景探针,ADR-0004 双载体、gdUnit4 deferred) | -| ③ | 信号时点状态可见性规则 | 规则 18(销毁前捕获 / 载荷自包含 / 禁回读核心生命周期态)+ AC-20 断言 | - -## 附录 B:覆盖矩阵(门禁评审用——编号沿用 design 件现行节名) - -| 类别 | 映射 | -|---|---| -| Core Rules | 1–4→AC-19/24/25 · 5→AC-1 · 6→AC-10 · 7→AC-6/7 · 8→AC-6 · 9→AC-4/5 · 10→AC-9 · 11→AC-12/15 · 12→AC-11 · 13→AC-13 · 14→AC-14 · 15→AC-4/11 · 16→AC-8/16/17 · 17→AC-24 · 18→AC-20 · 19→AC-15(键位)/样张引用 · 20→AC-25 · 21→AC-21 · 22→AC-23/26 | -| Formulas | F1→AC-2 · F2→AC-3 | -| Edge Cases | 全表→AC-4/6/8/10/11/13/14/16/17/21/22/23/15(拒绝与 voided→AC-8 及探针负例;零合法板→AC-19 注入腿;双雾区→AC-4/11 腿) | -| 义务台账 | 27 项→design 件「呈现义务台账逐项落位表」逐行 | -| 切片教训 | 3 项→AC-19/20/24 + 规则 17/18 | - -## 附录 C:发现冲突清单(列示待裁决——不改已定稿 GDD 正文与提案) - -| # | 冲突 / 待对齐项 | D1 侧处置 | -|---|---|---| -| ① | game-concept 视觉锚原则 1"暗色地牢底色" vs art-bible 明亮底色反转 | 在案(entry 41)——概念侧注记待概念层修订批;D1 全部取色按 art-bible | -| ② | B2 GDD 敌种键 {grub, ambusher} vs 切片 DND 更名 {goblin, bugbear, ogre_chief} | 键位映射表以 GDD 键集为锚(§4.6.4 冻结);切片更名随 B2/C3 修订批对齐 | -| ③ | B4 GDD 默认根 clear_knife vs 切片供给控制器批 clear_blast + active_inject 池 | 徽章键按 reward_id 冻结、池归属不影响键(§4.6.2 注记);clear_blast 键并列预留、启用随 B4 修订批 | -| ④ | 极性提案 §3.5 跨文档回写清单全部待实施批(B3 四行→七行、B4 schema 扩列、A2 OQ1 关闭、D1 义务条目正式登记〔未开格类型图标/极性视觉语言/负向文案族〕) | 本 GDD 已按 §4.6 冻结键预留槽位;义务条目登记随提案实施批入 systems-index D1 台账 | -| ⑤ | art-bible §4.6.3"全部未开格呈现类型徽章"(提案 R3)vs B4 Rule 8"未开格身份 MVP 不呈现" | D1 裁决:MVP 格面徽章只在已开格呈现(B4 Rule 8 为现行锁定规则);未开格预读随极性提案实施批(其机制前提 = cell_type/pool_tag 扩列)随批修订 | -| ⑥ | battle.md §Events Fired"呈现订阅 A2 三事件"表述 vs ADR-0001 订阅纪律(呈现层只订 B1/runner) | 本 GDD 按 ADR-0001 收窄(规则 2);battle.md 复检批对齐措辞(正文不改动) | -| ⑦ | A3 只读观测量(ap/rap/phase/last_round_end)缺轮内已用刷新次数——刷新按钮"本轮剩 N 次"读数无上游供给 | 接口漂移登记义务(OQ2):A3 随批补只读观测量;落地前按钮显示退化为"RAP−{rap_refresh_cost 表读值} · 每轮至多 2 次"静态文案 | -| ⑧ | 切片已实现的 B1/B2 呈现面 API 未在 owner GDD 登记契约:B1 面 `presentation_snapshot` / `is_battle_live` / `stock_count` / `query_reward_identity` / `submit_window_selection` + `settlement_snapshot` 信号、B2 面 `hero_unit` / `all_enemies`(registry `d1_presentation_surface` 已成文——owner=D1,切片事实转正) | OQ3:现行消费以 registry 条目为契约(D1 消费 = 步骤流判定行 + `presentation_snapshot()`,零阻塞);回 B1/B2 修订批补登记 API 面(接口漂移) | - -## 附录 D:审计注记(评审元数据,不入 design 正文) - -- 复核注记:solo 模式下 creative-director(体验锚点情绪定位——与 battle.md Purpose & Player Need 同源,design 件设计目的为其系统级转写)与 art-director(Visual/Audio 与 art-bible 一致性)未经咨询——生产前人工复核。呈现义务承载依据 = `design/ux/battle.md`(APPROVED,§13 台账 27 项经 ux-review 实存验证)+ `design/art/art-bible.md` §1–4。 -- 上游状态:A1–B4/B1 + D2 全部 Approved(C3 为 Designed 未经评审——D1 零玩法消费;battle.md APPROVED · art-bible §1–4 定稿)——项目首个零玩法上游假设的表现层系统。 -- 归属声明:屏级布局、组件形态、交互细节、动画时长的裁决权威 = `design/ux/battle.md`(APPROVED)——本 GDD 引用其裁决不重复论证,只做三件事:① 升格为系统级规则与 AC;② 补齐 spec 之外的系统级契约(信号载荷 schema / 订阅纪律 / 程序化占位 / 命名统一 / 遥测);③ 逐项落位 27 项门禁义务。 -- 命名统一核销 = session-state entry 35(AC-25 grep 断言承载);读接口白名单转正 = 封装收口批 entry 39/40;敌卡就地更新与窗口态 stomped 教训 = 切片 entry 36。 - -## 开放问题 - -| # | 悬案 | owner | 时机 | -|---|---|---|---| -| 1 | _draw 迁移复议(ADR-0003 Decision 3 的 D1 裁决登记):MVP 维持 GridContainer + 逐格控件(裁决依据:呈现层程序化占位、样张未定稿、雾纹理/终稿表现力需求未冻结、三探针与现形态耦合〔改造 = 隐藏成本〕)——样张定稿后按表现力需求(biome 色板/雾纹理/动效复杂度)复议二选一;若迁移,`Viewport.push_input` 端到端探针从加分项变必需项(ADR-0004) | D1 复议批 | 样张定稿后 | -| 2 | A3 轮内刷新次数读数(接口漂移登记):刷新按钮"本轮剩 N 次"需要 A3 暴露轮内已用刷新计数(现只读观测量 ap/rap/phase/last_round_end 未含)——A3 修订批补只读观测量 + AC 前言扩列;落地前按钮退化为静态文案"RAP−{rap_refresh_cost 表读值} · 每轮至多 2 次" | A3 | 正式实现接线批 | -| 3 | B1/B2 呈现面 API 契约登记(冲突⑧扩条):切片已实现的 `presentation_snapshot` / `is_battle_live` / `stock_count` / `query_reward_identity` / `submit_window_selection`(B1 面)+ `settlement_snapshot` 信号 + `hero_unit` / `all_enemies`(B2 面)均未在 B1/B2 GDD 登记——registry `d1_presentation_surface` 为现行契约载体;回 B1/B2 修订批补登记 API 面,独立信号需求随批裁决(接口漂移) | B1 / B2 | B5 GDD 前 | -| 4 | battle.md 订阅表述对齐(冲突清单⑥):ADR-0001 订阅纪律(呈现层只订 B1/runner)与 battle.md §Events Fired"A2 三事件呈现订阅"的措辞差——本 GDD 按 ADR-0001 收窄;battle.md 复检批对齐 | battle.md 复检 | 下次 /ux-review | -| 5 | Gamepad 焦点序(battle.md OQ8 继承):Partial 支持非 MVP——焦点环顺序待 gamepad 批次 | gamepad 批次 | gamepad 批 | -| 6 | 相邻域屏 spec(battle.md OQ9 继承):`design/ux/node-reward.md` / `design/ux/level-clear.md`——本 GDD 只锁出口锚点(节点奖励覆盖层 / 关卡结算屏的完整形态归后续 spec) | 后续 spec | 垂直切片后 | -| 7 | accessibility-requirements.md(battle.md OQ2 继承):正式分层(文本缩放/色盲模式/按键重映射)待该文档定稿——gate-check Pre-Production 缺口在案 | 该文档定稿批 | 文档定稿 | -| 8 | 键集扩容流程锚定:新 effect_id / reward_id / enemy_id / cell_type 上线 → art-bible §4.6 修订 + SettlementTable effect_pool_map 随批登记(接口漂移双登记——本 GDD AC-15 fail-fast 强制暴露漏登记) | art-bible / D2 修订批 | 键集扩容时 | -| 9 | 极性提案实施批的 D1 义务条目(冲突清单④):未开格类型图标 / 极性视觉语言 / 负向文案族按提案 §3.5 正式登记入 systems-index D1 台账(本 GDD 已预留键槽位与裁决⑤) | 极性提案实施批 | 提案实施批 | -| 10 | 明细带挖掘期常驻摘要(battle.md OQ6 继承):常驻(现方案)vs 结算后收起——playtest 观测回看频率后裁决 | playtest 后裁决 | 垂直切片 playtest | -| 11 | D5 教学挂靠(battle.md OQ13 继承):挖到雷=敌方优势 / 旗挡链 / 首次蓄力提示 / 囤刀闭环——toast 体系为落点候选,D5 GDD 批定 | D5 | D5 GDD 批 | -| 12 | TunePanel 退役时点(battle.md OQ10 继承):C4 天赋树落位批退役(规则 21 已标注);Playtest 诊断按钮保留 | C4 | C4 落位批 | - -## 去向映射(零丢失可审计证据) - -| 原文章节 / 表 | 落点 | -|---|---| -| 头部块(状态/版本/支柱/层级/一句话) | design 头部块 | -| 头部复核注记 / 上游状态行 | analysis 附录 D | -| 速览表(定位/拥有/不拥有/上游输入/下游输出/硬约束) | design 设计目的 / 系统范围 / 依赖与输出 | -| D1 的存在理由(四条) | analysis 问题 1 | -| 体验锚点表 + 直接承载/参考感受/反向护栏 | design 设计目的(承诺形态)+ analysis 问题 8(论证) | -| 全局流程(呈现刷新链路字符画 + 出口分发表) | design 核心循环 | -| 核心规则归属声明 | analysis 附录 D(权威优先句入 design 依赖与输出引言) | -| 规则 1–4(边界/订阅/读面/写通道) | design「呈现边界与数据通道」 | -| 规则 17 / 18 / 20(载荷 schema / 快照纪律 / 命名统一) | design「呈现边界与数据通道」;切片崩溃机理与 ADR 论证 → analysis 问题 2 | -| 规则 5 / 6 / 21 + 五区布局表 + 敌卡六件套 + 意图线索映射目录 + 战斗屏状态机 | design「战斗屏布局与组件」 | -| 规则 7 / 8 / 9 / 15 + 四种格态 / 光标语义 / hint_id / 拒绝与 voided 映射 | design「挖掘输入与棋盘可读」;穿行动画与复合意图取舍 → analysis 问题 3 | -| 规则 10 / 11 / 12 / 13 + 三张实现参照表 | design「信息与归因呈现」;逐行归因/极性判别/窗口候选论证 → analysis 问题 5、6 | -| 规则 14 / 16 / 19 / 22 + 终局反馈表 + Visual/Audio 锚点表 + 边界情况表 | design「提示·终局反馈·美术与可访问性」;占位解耦论证 → analysis 问题 8 | -| 枚举·ux 遥测行族 | design 规则 17 载荷表 #13(字段与值域在该行展开) | -| 数值结论与推导(F1 / F2 / 显式排除声明) | design「呈现几何与可读性判据」;F1 定值 vs 闭式论证 → analysis 问题 4 | -| 状态(战斗屏状态机 + 不变式) | design「战斗屏布局与组件·战斗屏状态机」 | -| 边界情况表(20 行) | design「提示·终局反馈·美术与可访问性·边界情况」;零合法板三形态选型 → analysis 问题 7 | -| 依赖表 + 索引分层注记 | design 依赖与输出 | -| 呈现义务台账逐项落位表(27 项,活契约) | design 依赖与输出 | -| 意图线索映射目录(B2×4① 成文载体) | design「战斗屏布局与组件」 | -| 切片教训三条硬性要求落位表(审计映射) | analysis 附录 A | -| 发现冲突清单(8 项) | analysis 附录 C(未闭合项同时以 OQ2/3/4/9 入开放问题) | -| Tuning Knobs(8 knob + 非 knob + 性能预算 + 交互 + 调参流程) | design 调参表 | -| Visual/Audio 要求 + Asset Spec 注记 | design「Visual/Audio 执行锚点」 | -| UI 要求(权威 spec / UX Flag / pattern 库 / accessibility / 场景探针) | design 依赖与输出「屏级 spec 与配套文档」 | -| 验收标准(测试口径 + AC-1–26) | design 验收标准(编号不变) | -| 覆盖矩阵(门禁评审用) | analysis 附录 B | -| 开放问题 OQ1–12 | analysis 开放问题(编号不变) | -| 版本历史(v1 / v1.0-lean / v1.1) | design 版本历史(原行全保留,追加 v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/analysis/d2-data-config.md b/design/archive/gdd-2026-09-14/analysis/d2-data-config.md deleted file mode 100644 index 815b8b93..00000000 --- a/design/archive/gdd-2026-09-14/analysis/d2-data-config.md +++ /dev/null @@ -1,196 +0,0 @@ -# D2 数据配置与数值表 设计推演 - -> 状态:concluded(未闭合项见文末「开放问题」)· 本文只装"为什么"——`design/gdd/d2-data-config.md` 只收本文的结论。 -> 修订时新增问题节,不删旧节(历史即依据)。 - -## 问题 1:为什么要有 D2——数值集中一处、schema 先行、单点发放? - -### 广度分析 - -- 候选 A:参数随各系统代码硬编码——收益:少一层间接;代价:调一次难度要改五处代码、战斗无法用固定种子复现、headless 自动化测试无从谈起。 -- 候选 B:集中数值表但允许多入口读取——代价:副本绕过校验,热重载换新值时副本不知情,单一事实源名存实亡。 -- 候选 C(采纳):数值表单一事实源 + ConfigDB 单点类型化读取 + schema 先行、数值回填。 - -### 深度分析 - -schema 先行使 D2 能在设计顺序第 1 位交付而不阻塞下游:结构(自定义 Resource 类,字段带类型/范围/默认/注释)由 D2 定死,数值由 owner 系统 GDD 按设计顺序回填——先有格子、后填数字。本 GDD 只定数据结构、注册表与校验模式,不替任何系统定平衡。 - -### 综合判断 - -design 件设计目的、系统范围与规则 1/2/3 即本结论:玩法数值零代码字面量、取数只经 ConfigDB、全部表两件套交付。 - -## 问题 2:为什么 fail-fast 无软回退、唯一软着陆只给 debug 热重载? - -### 广度分析 - -- 候选 A:软回退(出错用默认值或上一好值带病运行)——代价:错误数值上线比崩溃更伤(P1/P2 信任底线),且放行带病数值会使 CI 冒烟失去意义。 -- 候选 B(采纳):加载期与运行期一律致命中止;唯一例外 = debug 热重载校验失败时保留旧表停留 Ready——不杀运行中的调试会话。 -- 校验通道候选:单通道(测试侧无法断言致命路径——Godot 无进程内拦截 push_error/push_warning 的 API)vs 校验双通道 collect_only(采纳:游戏通道致命、测试通道收集不升级,诊断收集器承载冒烟断言与四元组去重状态)。 - -### 深度分析 - -release 构建的致命表现(引擎默认错误路径的实际行为)尚未验证,显式 deferred 到首次 release 导出 checklist——设计顺序第 1 位时无导出模板可依赖。headless 下走 `--script` 协议独立进程非 0 退出,因为同阶段无主场景可依赖,脚本须 extends SceneTree 以获得 quit(code)、autoload 须由脚本显式实例化。 - -### 综合判断 - -规则 6、校验双通道表、状态机 Failed 两路径与 EC16 即本结论;校验严格度不设 knob(fatal 写死)。 - -## 问题 3:难度行解析为什么 floor + warning、无兜底无外推? - -### 广度分析 - -- 候选 A:default 行兜底——代价:配置缺口被静默吃掉,难度断档不可见。 -- 候选 B:clamp / 线性外推——代价:超表成长语义是 C3 owner 公式的职责,D2 越权定义成长。 -- 候选 C(采纳):floor 到不超过请求坐标的最近已有行 + 非精确命中记 warning(四元组去重);实体键精确匹配不近似;越域请求由前置守卫致命拦截。 - -### 深度分析 - -核心判据:进度坐标可以就近近似,"是哪种敌人"不能近似——身份近似会静默改变遭遇构成、损害 P2 归因。warning 定位是开发期异常信号而非审计工具(防刷屏去重是刻意的);难度审计由离线曲线导出工具承担(headless 导出 resolve(level 1..N × depth 0..M) 矩阵供 diff,C3 期交付——排期倒挂见开放问题 #5)。depth 分量永不 ceil 的保证来自 EC15 锚行校验:防"入口天灾"(入口请求静默 floor 到深行造成难度突刺),写死开、非 knob,重议须走本 GDD 显式修订流程。 - -### 综合判断 - -design 件「难度行解析」的 R1 结论与表达式、missing_type 枚举(base_ceil 恒记规则由本分类推导)与 EC4/EC5/EC14/EC15 即本结论。 - -## 问题 4:流种子派生为什么是纯函数、为什么不用运行时 hash()? - -### 广度分析 - -- 候选 A:运行时 `hash()` 混合流名——代价:Godot 不承诺 hash 跨版本稳定,黄金向量与跨版本复现失去意义。 -- 候选 B:scope 自增值直接作种子——代价:同 master_seed 下不同流的同序号 scope 互相碰撞。 -- 候选 C(采纳):`( SALT_s XOR wrap64(master_seed + scope × GOLDEN_RATIO) ) AND 0x7FFFFFFFFFFFFFFF`——每流互异奇盐、黄金比例乘数、wrap64 自然回绕、掩码收尾。 - -### 深度分析 - -中间积本就越界(乘数 0x9E3779B97F4A7C15 > 2^63,scope=1 即回绕)——这是设计依赖的语义而非缺陷,故禁止 float 中间量(53 位尾数必丢精度)、禁止对中间量用 `%`(带符号取余语义易误用)、禁止"主动修复溢出";三个常量均 ≥2^63,GDScript 十六进制字面量按二补数解析为负,故统一用分段表达式书写。跨 master_seed 的全局单射由鸽笼原理数学排除,不做声明。INT64_MIN 致命而非归一化:abs 在 int64 对 INT64_MIN 恒等回绕,输出掩码抹掉 bit 63 使其与 0 静默别名(实测与 0 在全流种子逐一相等——掩码本身是规约的一部分);负 scope 同理会与 scope+2^63 经掩码别名,故 debug 断言中止。计数器永不重置、不随关卡/图序重置——否则不同关卡的同序号图会得到相同种子;set_master_seed 仅许全流计数器全零时调用——冒险中途重播种会静默清零计数器,击穿同冒险无碰撞前提与 D3 快照语义。 - -### 综合判断 - -design 件 R2 结论、公式、实现级规约三行、黄金向量表(AC-3 常量依据,经独立复算验证)即本结论;状态线独立不变式(reload 不触碰 RNG——若按状态机对称性在 reload 时重置 RNG 将击穿 AC-4)同理成立:派生只依赖盐/master_seed/scope,与表数据无关。 - -## 问题 5:RNG 为什么封闭三流、增流为什么要过 P1 评审? - -### 广度分析 - -- 候选 A:各系统自建 RandomNumberGenerator / `randomize()`——代价:不可复现,回放/审计/自动化测试全废。 -- 候选 B:流自由注册——代价:流复用破坏可复现隔离,未知名流静默产生。 -- 候选 C(采纳):封闭具名流(board_gen / reward_roll / encounter),增流 = 改代码 + P1 支柱评审(随机须有界、可见或可推理)——有意设卡。 - -### 深度分析 - -三流的 scope 事件绑定是各自消费者契约的一部分:board_gen = 每次生成新扫雷图(A1 换图时);reward_roll = 每次 board install 批(格奖励批 + 清图奖励批,B4 AC-1 为契约源);encounter = 每场战斗实例化恰一 scope(begin_battle 实例化期、扫雷开始前——unit_count 区间均匀骰在挖掘决策域之外,P1 合规;C3 遭遇随机化批增流,registry 已登记)。`derive_at` 纯函数不推计数器——预览取数不污染正式序列,杜绝预览类取数的平衡 Heisenbug。同帧多系统请求同一流允许(EC13):Godot 主线程玩法逻辑单线程假设成立,`open_stream` 各自取号按调用顺序串行生效,不引入锁。玩法随机(如结算浮动)D2 不预置——任何系统若需要,自带方案走增流通道并通过 P1 评审(原 R4 显式排除裁决:玩法平衡公式与玩法随机都不在 D2,归 owner 系统 GDD)。 - -### 综合判断 - -规则 5、封闭流表、取数入口表与 EC12/EC13 即本结论;combat_var 类玩法随机预置流不设基础设施。 - -## 问题 6:debug override 链为什么是这五条边界? - -### 广度分析 - -- 覆盖位置候选:各系统自读 override 源——代价:gameplay 可见 override 来源、多点校验漂移;采纳 = 覆盖判定与存储内聚 ConfigDB(规则 2 单点)。 -- key 空间候选:任意路径含进度表行寻址(如 `difficulty.(2,0).hp`)——v1 收窄为仅单行全局表字段,行寻址语法登记为后续扩展。 -- release 形态候选:运行时碰巧不生效——采纳 = 结构性不存在(不加载、不注册任何 override 源,恒等是结构保证)。 - -### 深度分析 - -override 值类型与范围复用 schema 校验逻辑——防止 debug 会话注入越界值污染平衡基线(EC11);未知 key 同样 warning + 忽略。debug 谓词做成可注入形式(`OS.is_debug_build()` 之外引入 feature 标签闸,例 `sim_release`),AC-8 的模拟以此为基础;"release 不加载 override 源"的结构保证验证本身 deferred 到首次 release 导出 checklist(AC-18)。override 仅为运行时状态,永不回写 .tres。 - -### 综合判断 - -design 件 R3 结论与边界五条即本结论。 - -## 问题 7:体验锚点论证——"玩家永远不该注意到的地基"凭什么撑 P1/P2? - -### 广度分析 - -- D2 无专属玩家幻想:P1"我算对了"的掌控感来自 A1/A2 可推理设计,P2 的延迟兑现感来自 B1 可见结算;D2 只提供三种消极保障。 -- 手感稳定("改数字不改代码"):全部影响手感的数字集中一处可调 + 热重载即改即验——"测试数据驱动平衡"的开发方式,任何"这轮玩起来不对劲"都能快速修正且不引入新毛刺。 -- 公平可信("同决策必同结果"):可复现是开发侧信任底线(回放/审计/自动化测试),不等于玩家侧可推理;玩法随机零预置(走增流通道 + P1 评审)。 -- 难度可信(P4,"越下越险由结构保证"):数值表天生带(关卡序号, 节点深度)两维——难度曲线可审计、可回溯,而非散落各处的魔法数字。 - -### 深度分析 - -难度第三轴"精英/Boss 修饰"已定稿难度 = f(关卡序号, 节点深度, 精英/Boss 修饰)(game-concept),但修饰语义归 C1/C3——D2 只做 DifficultyTable 的 elite_/boss_ 前缀命名空间预留与 Boss=Dmax 行约定,不定义任何修饰数值、不预写修饰枚举;两键定不了精英性的节点形态(如分支地图同深度并存精英与普通节点)允许改键,按接口漂移修订规则回写(与 MetaTable 同等豁免待遇);A1 OQ6 是 C1 定稿时的强制重审门。DifficultyTable 乘数域 [0.1,10] 已 registry 预登记;越域 clamp+warning 是 registry 登记的显式例外——组合事故非配置事故,非 fail-fast 场景。 - -### 综合判断 - -design 件设计目的四条承诺、规则 4 轴归宿表与 DifficultyTable 占位行即本结论。 - -## 问题 8:已裁决争议与数值锚定论证汇总 - -### 广度分析 - -- 单行全局表先例链:ActionEconomyTable 立先例 → HeroTable / RewardConfigTable / SettlementTable 沿用(无成长语义的表允许只放一行);MetaTable 为元进度轴豁免,C4 可改键。 -- weaken = −65(值域 [60,85]——B1 F0 裁决,条款 2 锚闭合);defense_up = −30(减伤墙批 C3 投值,叠满两层 −60 帽——B3/registry 同批)。 -- HeroTable atk = 6 原型锚(provisional 归 C3);atk = 0 加载拒绝——"0 基线 × 百分比增益恒零"死锁自 schema 层杜绝(基础攻击恒存在,消费面 = 主角战斗段先手攻击)。 -- RewardConfigTable 标定:active_p0 = 0.4(供给控制器注入概率初值,首件之后每张新板——E[战斗获取] ≈ 1 标定目标,归 C3);active_decay = 0.5 指数递减 0.4→0.2→0.1→…(加难杠杆候选 0.6 随 C3 OQ7 扫描);p_min = 8(默认根最低刀 power——K≥1 供给闸刀力下界 floor_supply_missing);k_dmg = 0 = F5 断言关闭——刀保底语义由供给控制器战斗首件保证取代,no_damage_row 后闸托底。 - -### 深度分析 - -两处溯源缺口在案:EnemyTable MVP 行值(goblin 18HP / 4ATK 等)出自原型 REPORT、出处待查(义务 #5);HeroTable max_hp MVP 值出处待查(义务 #6)。provisional 值在 owner 定稿前不视为平衡事实;定稿后删除调参表清单对应条目,值的事实登记归 owner GDD 与 registry——已定稿占位参考值(标中旗 / 清图奖励 / 状态四行 / 奖励池等)已随各 owner 定稿清退。 - -### 综合判断 - -数值事实留 design 调参表与 registry,锚定论证收于本节;胜场成长机制去留(+25% HP / +1 ATK——反雪球问题)仍待 C3 裁决(义务 #7,在案未闭合)。 - -## 附录 A:评审与审计元数据 - -- 评审:lean 门禁 systems-designer / qa-lead;full 评审 + 同日 re-review 含 game-designer / creative-director,CD-GDD-ALIGN 终裁 Approved——评审日志 `design/gdd/reviews/d2-data-config-review-log.md`。 -- 双向一致性核对明细(与 systems-index 依赖分层表核对一致):A1←A4,D2 · B2←D2 · B4←D2 · B1←A3,B2,B3,B4,D2 · C2←C3,D2 · C4←D3,C2,D2 · C3←D2,B2 · Foundation 含 D2;C2 / B1 / B4 / C4 ← D2 四条边已补入索引依赖分层表;B4←D2 边已按 B4 定稿收窄——A2 事实经 B1 转化零直接接口、B3 为验收锚关系非运行时边。 - -已闭环对账义务(历史审计,design 不再列): - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| 1 | ActionEconomyTable 跨字段校验(任一动作成本 ≤ ap_per_round)条件性夹具登记 | A3 | 已登记(schema 类别承载,随 A3 冒烟) | -| 2 | VariationTable 跨字段校验 hide_numbers⇒safe_nonzero 夹具 variation_mask_constraint | A4 | 已激活 | -| 3 | StatusEffectTable effect_id 悬空引用校验(条件性夹具——首个含引用字段的 owner 回填时补) | B3 / B4 | 已激活(B4 defense_up 首引,夹具 b4_dangling_effect) | -| 12 | 双向一致性四条边补入索引依赖分层表(C2 / B1 / B4 / C4 ← D2) | systems-index | 已完成 | - -## 开放问题 - -| # | 问题 | owner | -|---|---|---| -| 1 | headless 测试载体终稿:MVP 用 `--headless --script` 冒烟(本 GDD 决策);gdUnit4 是否在 Technical Setup 引入并迁移冒烟用例 | Technical Setup 阶段(systems-index 门禁增补记录项) | -| 2 | 编辑器内表文件热重载自动化(当前仅 debug 键触发;低优先) | 未指派 | -| 3 | 数值表显示名的本地化 | D6 | -| 4 | C4 MetaTable 并入 ConfigDB 还是独立 autoload(倾向并入) | C4 GDD | -| 5 | 难度曲线导出工具(R1 审计的离线载体):headless 导出 resolve 矩阵脚本,C3 期交付——排期倒挂:BoardGenTable 可推理率曲线自 A1(第 5 位)起回填,A1 定稿前须有临时抽查载体(入 systems-index 门禁记录) | C3 GDD 登记排期 | -| 6 | systems-index 树形概要行仍写"九张表单一事实源",与本 GDD 现行十张表 schema 目录(AuxItemTable 转正后)不一致——索引行归 systems-index 维护批修订,本件不代改 | systems-index 维护批 | - -## 去向映射(零丢失可审计证据) - -| 原文章节 / 表 | 落点 | -|---|---| -| 头部块(状态/版本/支柱/层级/一句话) | design 头部块;评审行 → analysis 附录 A | -| 速览表(定位/拥有/不拥有/上游/下游/硬约束) | design 设计目的 / 系统范围(含硬约束行)/ 依赖与输出 | -| 存在理由·策略·定位三行 | design 设计目的 + analysis 问题 1、7 | -| 体验锚点表 | design 设计目的四条承诺;论证 → analysis 问题 7 | -| 全局流程(三链路字符画 + 出口分发表) | design 核心循环 | -| 核心规则 1 / 2 | design「统一取数与调试覆盖」规则 1 / 2 | -| 核心规则 3 / 4 + 表形状 / 轴归宿两表 | design「表结构与回填」 | -| 核心规则 5 + 流表 / 取数入口表 | design「随机数服务」 | -| 核心规则 6 / 7 / 8 + 错误两类表 | design「加载·校验·热重载」 | -| 规则 6 实现参照——校验双通道表 | design「加载·校验·热重载·校验双通道」 | -| 枚举·十张表目录 / 未回填占位表 / MVP 内容行 | design「表结构与回填」三个子节 | -| 枚举·RNG 流 | design「随机数服务·封闭流与取数入口」(与规则 5 流表去重合并,内容一致) | -| 枚举·missing_type | design「难度行解析·missing_type」 | -| 枚举·致命错误类别 | 并入 design 规则 6 错误两类表(段序违例/池映射悬空/p_perfect 越域三覆盖项并入加载期行) | -| 枚举·override key 空间 | 并入 design R3 边界②(key 形态与支持域内容完全重合) | -| 数值结论与推导 R1(结论/推导/变量/Example/去重键) | design「难度行解析」(结论 + 表达式 + 变量 + 验算);取舍与审计论证 → analysis 问题 3 | -| 数值结论与推导 R2(结论/公式/实现级规约/变量/黄金向量) | design「随机数服务·R2 流种子派生」;机理与候选论证 → analysis 问题 4 | -| 数值结论与推导 R3(结论 + 边界五条) | design「统一取数与调试覆盖·调试覆盖链」;候选取舍 → analysis 问题 6 | -| 数值结论与推导 R4 显式排除 | design 系统范围不负责清单 + 规则 5 增流通道;论证 → analysis 问题 5 | -| 状态(状态机表 + 不变式) | design「加载·校验·热重载·状态机」 | -| 状态·RNG 生命周期 / 快照三行 | design「随机数服务·RNG 生命周期与快照」 | -| 边界情况 EC1–EC16 | design「加载·校验·热重载·边界情况」(编号不变) | -| 依赖表 + 三行注记 | design 依赖与输出;双向一致性核对明细 → analysis 附录 A | -| 登记与对账义务 #4–#11(在案) | design 依赖与输出·登记与对账义务表 | -| 登记与对账义务 #1 / #2 / #3 / #12(已闭环) | analysis 附录 A | -| 呈现与 UI 面 | design「呈现与 UI 面」 | -| Tuning Knobs·D2 自身 knobs + 交互 / 清退注记 | design 调参表·D2 自身 knobs | -| Tuning Knobs·九张表逐表字段行 | design 调参表·表 schema 逐表字段行 | -| 验收标准·测试口径 + AC-1–AC-18 | design 验收标准(编号不变) | -| 开放问题 1–5 | analysis 开放问题(编号不变);#6 为本次迁移新登记的跨文档不一致 | -| 数值锚定论证(weaken/defense_up/atk/active_p0/p_min/k_dmg 等) | analysis 问题 8(数值事实本身留 design 调参表与 MVP 内容行表) | -| 版本历史全部行 | design 版本历史(原行全保留,追加 v2 迁移行) | diff --git a/design/archive/gdd-2026-09-14/b1-settlement.md b/design/archive/gdd-2026-09-14/b1-settlement.md deleted file mode 100644 index ea8d02a2..00000000 --- a/design/archive/gdd-2026-09-14/b1-settlement.md +++ /dev/null @@ -1,692 +0,0 @@ -# B1 战斗结算规则(Combat Settlement Rules) - -> **状态**:Designed · **版本**:v2 · 2026-09-14 -> **一句话**:B1 把每轮扫雷的结果逐行兑现为战斗结果,并判定胜负。 -> **推演件**:`design/gdd/analysis/b1-settlement.md`(本文件只收结论,理由在那里) -> **承载支柱**:P2 主("扫雷的因、战斗的果"的兑现面)· P3(雷的双面兑付)· P1(条款③掌控感的经济侧验收) - -## 设计目的 - -战斗域编排与结算中枢、轮次生命周期唯一 owner。少了它,扫雷每一格的结果没有战斗兑付面,"扫雷的因、战斗的果"无从兑现。 - -1. 玩家能在结算明细里逐行看到每行来自哪格/哪旗/哪雷(P2"都是我算出来的");无来源行 = 断言失败。 -2. 挖掘决策的风险不等式与"推到底"支配性由本系统闭合签字(P1"挖下去值得")。 -3. 敌方伏击行与标中旗削弱行同框、同呈现语言(P3"赌桌不是陷阱")。 -4. 完美排雷双份兑付、标中旗行高光("完美被加倍兑现")。 - -## 系统范围 - -负责: - -- 轮次编排:战斗开始序列、每轮七段结算、出口分发(继续/换图/挖掘期刷新/战斗结束/关卡结束) -- 结算触发与段序;伤害消费侧语义(池合成、clamp、溢杀、死亡判定时机) -- 明细流水协议(13 类行 + 字段分层)——呈现/回放/导出共读的唯一数据源 -- 统一当量换算(F1)、乘区/地板/取整语义(F2)、clamp/溢杀/死亡判定数值边界(F3)、条款③⑤闭合判据与配对口径(F4/F5)、伤害A/B 充能与甲效结算(F6)、明细行协议的数值字段 -- 上游义务账本(B3×8 / B2×6 / A2×3 / B4×6);A3 条款①②③⑤闭合签字 - -不负责: - -- 单位状态、hp 递减与 floor 0、Dead 翻转、指针冻结(B2) -- 状态实例 L×m 合成——B3 原样输出不 clamp,B1 只做池 clamp 收口(B3) -- 奖励行值/权重/tier/C 量级与差异化分支(B4/C3);库存内容(B4) -- 行动价目与 RAP 经济(A3);棋盘规则、雷密度/可推理率/雾负担 actuals 分布(A1/A2) -- 敌我表值曲线 atk/hp/cap/unit_count/pattern(C3,B2 行值供给) -- 呈现与交互形态(D1/B5)、音频(D4)、教学(D5) -- 全部 provisional 数值调参(C3);m_w 终值(B4/B1 锚 owner 共裁);P_perfect 数值(C3) -- 清图总预算"够不够"的判、战斗长度/轮数曲线、遭遇构成(A1/A3 契约、C1/C3) - -## 核心循环 - -``` -begin_battle(encounter) - │ ① set_reload_gate(true) [D2] 调试门置位 - │ ② notify_battle_start() [B3] 容器开域 - │ ③ encounter 骰 [RngService] unit_count 区间均匀骰定本战实际数量(封闭流,恰一 scope) - │ ④ spawn(L, D, hero_hp, n) [B2] 行值快照实例化(n = 实际数量 override;定值行 n = unit_count) - │ ⑤ install_board + roll_board [A2/B4] 恰一次;资格格清单 = S ∖ R₀ - │ ⑥ notify_round_start() [A3] → Active - ▼ -RoundActive(挖掘期,B1 只缓冲事件流) - ▼ -轮末触发:Waiting 相位编排点(只读 A3 相位观测量,不依赖事件到达序) - ▼ -①授予段 ──── cell_revealed 批 → flag_judged 批 → 清图奖励(仅 cleared 轮) - ▼ -②道具使用窗口 ─ 玩家至多选一件或跳过(全流程唯一玩家输入点) - ▼ -③增益/减益段 ─ query_active 双侧读值 → 语义映射 → 效果明细行 - ▼ -④道具段 ───── 伤害道具:恒定表值打 default_target;治疗包:clamp 回复 - ▼ -⑤战斗段 ───── 主角先手攻击(D_hero 三分量——F3⓪/F6)→ 逐存活敌(行主序):query_attack → apply_damage → advance - │ ※ hero hp=0 → 立即短路,剩余敌不作用,直入 ⑦ - ▼ -⑥衰减段 ───── decay_round() 恰一次(含末轮;先兑付后衰减的时序契约) - ▼ -⑦判定段 ───── hero hp=0 → 失败 │ 存活敌=∅ → 胜利 │ 否则 → 下一轮 -``` - -| 结局 | 触发 | 动作序列 | 约束 | -|---|---|---|---| -| 继续 | 判定=下一轮 | `notify_settlement_done(same_board)` → `notify_round_start()` | 同图续轮 | -| 换图 | cleared 轮 | `retire_board` → `retire_mapping` → A1 `generate` → `install_board` → `roll_board` 恰一次 → `notify_settlement_done(new_board)` → `notify_round_start()` | stopped/ap_exhausted 恒 same_board,违约 fail-fast | -| 挖掘期刷新 | 玩家经 D1 发起 | A3 `request_refresh` 扣费 → 换图全序(无结算段、无 round_end、轮次不终结) | RAP 不足→拒绝上抛;**每轮 cap 2(RoundStart 重置)**——与 A3 `refresh_cap_per_round` / registry `rap_rules` / D1 同口径,非"每图";刷新图无清图奖励 | -| 战斗结束 | 判定=胜/负 | `retire_mapping` → `despawn_all` → `notify_battle_end` → `notify_combat_end` → `set_reload_gate(false)` | 库存不清(关内延续) | -| 关卡结束 | 上层显式调用 | `clear_inventory()` 恰一次,清空前快照计数返回 | victory/defeat 皆然 | - -## 编排与触发 - -### 状态 - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| Uninit | 冷启动 / 清理完成 | 唯一出口 `begin_battle` | -| BattleSetup | `begin_battle` 受理 | 战斗开始序列;任一步拒绝 = fail-fast 上抛 | -| RoundActive | `notify_round_start` | 不干预挖掘,只缓冲事件流 | -| RoundWaiting | 轮次结束事务达成 | 执行七段结算;窗口段为唯一玩家输入点 | -| BattleOver | 判定段产胜负 | 战斗结束序列 → Uninit | - -编排不变式: - -- 同一时刻至多一个结算事务在飞(窗口为事务内暂停点非并发入口)。 -- 段序恒全序执行(战斗段短路是段内规则非跳段)。 -- 全部跨系统调用集中在 B1——任一下游被 B1 以外调用 = 架构违约(AC-43 静态扫描域)。 - -### 规则 - -- **规则 1**:B1 一家发起战斗域全部跨系统调用,B2/B3/B4 相互零直调,绕过 = 架构违约;结算本体三约束 = 零随机、零 UI 依赖、禁 await。唯一随机例外 = 战斗开始 encounter 骰(unit_count 区间均匀骰、封闭流恰一 scope,在结算步骤流之外,可回放性不受影响);将来结算本身若需随机数,必须走数据层新增增流通道并过评审(通道定义见 D2 Rule 5 与 D2 流枚举 encounter)。 -- **规则 2**:每轮挖掘结束、回合状态机进入轮末等待相位时,B1 自动发起一次整轮结算;触发只读 A3 相位读数与 last_round_end 标记,不依赖事件到达序;事件订阅 vs 相位轮询留实现期 ADR。 -- **规则 3**:挖掘期挖格/插旗事件不立即兑奖,按轮进缓冲区,轮末按 A2 事件规范序统一转化;每条事实从记录到授予恰好处理一次——B3 不去重、B4 幂等仅兜底,正常路径不重复发奖不漏发。 -- **规则 4**:每轮结算严格按 ①授予→②道具使用窗口→③增益/减益→④道具→⑤战斗→⑥衰减→⑦判定 全序执行;核心相对次序 = 增益/减益先于道具、道具先于战斗;段序结构冻结(改须走 GDD 修订,不属于调参);窗口每次选择是回放输入的一部分;段序常量存 SettlementTable `segment_order`,加载期恒等断言。 -- **规则 16**:结算用到的全部数值(当量、clamp 界、乘数、段序常量)都在 SettlementTable,B1 代码零数值字面量,调数值只改表不动代码;战斗开始 B1 落下热重载闸门、战斗结束抬起(B1 是唯一调用方),战斗中途的热重载请求被闸门拒绝。 - -设计意图:编排唯一 + 触发只读相位 + 段序冻结,是可回放性与跨系统归因的结构前提。 - -## 授予与高光 - -### 规则 - -- **规则 5**:授予段把挖掘期缓冲的事实分三批兑换,每格受理、每雷转化、每旗判定恰好一次:①挖格批——踩雷格逐颗转化为敌方伏击强化,带奖励资格的安全格按类别分流兑付;②旗判定批——判中 → 敌方削弱当轮生效(每颗雷资格只兑一次),判空 → 零兑付只记"标旗未中"归因行;③清图批——清图奖励恰好发一次,全板零误标且有标中 → 追加第二份同身份兑付。兑付数值读 D2 表值、无新公式。 -- **规则 6**:挖开雷格时 B1 向 B2 请求一次伏击授予计划 `ambush_grant_plan(mines_r, cap)`,恰一次调用;granted = min(mines_r, cap),超出的雷不生效只记"溢出未生效"行(含来源);伏击聚成一个池,同一结算多个敌人攻击读同一池值——共享、不均分也不消耗;伏击只活一轮,轮末随衰减清零。 -- **规则 7**:道具使用窗口是全流程唯一玩家输入点;窗口清单 = B4 库存投影 + B1 逐件可用性守卫预判;玩家至多选一件或跳过,空库存可整体不弹窗;完整选择序列(含跳过)记入回放;一次提交多件 → 只受理第一件、其余退回并记编排违例诊断。 -- **规则 13**:授予段埋两个强制高光检查点(见下表),条件满足必须兑现;呈现分工 = 事件型高光(完美排雷)发独立高光行,属性型强调(标中旗、清图奖励)用行字段标记。 - -| 窗口里看到 | 能否选用 | -|---|---| -| 伤害类道具 | 恒可选(结构前提 = 窗口只在仍有存活敌的轮打开) | -| 治疗包 | 满血禁选;未满血可选 | -| 空库存 | 可整体不弹窗,按跳过记 | - -### 规则 5 实现参照——三批转化 - -| 批 | 输入 | 转化 | 产出 | -|---|---|---|---| -| cell_revealed | `kind=mine` | 调 `ambush_grant_plan(mines_r, cap)`,事件规范序逐颗 `apply_effect(ambush, source={mine_hit, origin_cell, round_index})` | 伏击池 L;溢出颗产"溢出未生效"行(含来源) | -| cell_revealed | `kind=safe ∧ reward_eligible` | 按 category 分流(见下方奖励分流表) | 每格受理恰一次(B4 幂等仅兜底) | -| flag_judged | `hit=true` 且该雷实例资格未消费 | `apply_effect(weaken, source={flag_hit, origin_cell, round_index})` + 资格消费入集合 | 标中旗兑付行(highlight=`flag_hit`) | -| flag_judged | `hit=true` 且资格已消费 | 去重跳过(资格以雷格实例为键、跨轮累积;换图后新实例自然重置) | 零新增行(+debug 诊断可选) | -| flag_judged | `hit=false` | 零兑付;每雷实例一次去重(A2 逐轮重报零新增行,防惩罚轰炸) | "标旗未中"零值行(source=`flag_miss`、highlight=`perfect_broken`) | -| cleared 轮 | — | `grant_clear()` 恰一次;完美板(零误标 ∧ ≥1 标中)追加第二份同身份兑付(走既有授予通道) | 清图奖励行;完美高光行 | - -### 规则 5 实现参照——奖励分流 - -| category | 兑付方式 | 拒绝语义 | -|---|---|---| -| buff | `apply_effect`(入池,结算段生效) | 满层 → "奖励未生效"行(可聚合计数),无折算 | -| instant_aoe | 全体存活敌各 `power` 点(逐个 apply_damage、受击即死) | 当场兑付,不进库存不出窗口 | -| instant_heal | 主角回复 `power`(clamp) | 满血 → "奖励未生效"行零兑付 | -| damage_item / heal_pack | `stock()` 入关卡域库存 | 窗口选用时兑付 | - -- `reward_eligible=false`(initial 通道)格不入奖励库——B1 判定只读 reward_eligible、`channel` 字段零特判;连锁批量授予溢出 = 显式接受(无转换补偿)。 -- 标错惩罚未上线——标旗未中行是归因痕迹非惩罚;预留语义走接口漂移补(A2 实测后)。 - -### 规则 13 实现参照——高光兑现节点(强制检查点) - -| 节点 | 判定 | 兑付 | 呈现 | -|---|---|---|---| -| #2 完美排雷(perfect_sweep) | 板级谓词:本板自 install 起全部 flag_judged 中 hit=false 计数 = 0 ∧ hit=true ≥ 1(雾内插旗计入误标、零特判;计数随 install 重置) | 清图奖励身份第二份兑付:道具类 → `stock(同源身份快照)` 第二次;buff 类 → `apply_effect(同身份)` 第二次(满层拒绝照旧);`grant_clear` 本身仍恰一次;当量 = power × P_perfect ÷ 100(载体域 {100, 200}) | 独立高光行,value = 实际有效兑付(首份 + 第二份被接受部分)、禁记名义值;首份即零兑付 → 高光行不发(完美谓词仍成立) | -| #3 标中旗高光 | hit=true 且资格未消费(授予段判定) | weaken 当轮即兑付(dur=1 本就当轮生效)——chord 缺席的节拍缺失以"当轮兑付 + 明细强调"组合补偿 | 兑付行 highlight=`flag_hit` 字段标记;深度形态(即时 HUD 动画)归 D1/垂直切片 | - -设计意图:每格事实恰一次兑付 + 双高光强制检查点,是"扫雷的因"在战斗里可见可归因的兑付面。 - -## 合成、道具与战斗 - -### 规则 - -- **规则 8**:增益/减益段把主角与敌人身上活跃效果一次性合成——从 B3 读两侧活跃效果,按 SettlementTable 语义映射换算成各自修正池并池内加算,供道具段与战斗段使用;每条效果按授予流水逐条记明细行并标注来源授予;敌方侧减益作用于全体存活敌人(side-wide)。 -- **规则 9**:道具段执行窗口选中件:伤害道具按表恒定值打默认目标(顺位最前存活敌人),不吃任何池修正;治疗包按表值回复、超出上限 clamp(归 B1 执行);满血使用治疗包 → 拒绝、不消耗;施加时已无存活目标 → 照常消耗、记"已消耗未生效"行(存活判定读 B2 存活集)。 -- **规则 10**:战斗段主角先攻击一次(D_hero 三分量——F3⓪/F6),再按行序逐个存活敌人行动:每个敌人依次走 query_attack → apply_damage → advance 三步、恰好推进一次,主角不在推进范围;已死敌人不再行动;主角中途倒下 → 剩余敌人全部停手、直接跳到判定段;伏击池共享读值、多敌攻击互不消耗。 -- **规则 11**:衰减段调用一次 `decay_round()`,把到期临时效果移除并记衰减行;每轮恒定恰好一次,末轮也照跑——"先兑付清图奖励、后衰减"的时序契约由段序保证;容器已空时衰减返回零属合法结果(零明细行)。 -- **规则 12**:判定段防御性顺序——先判主角是否倒下(倒下即失败),再判存活敌人是否清空(清空即胜利),都不满足回发"继续"进下一轮;判定结果写成终局判定行(同时是胜负画面的数据锚)。 - -设计意图:先合成后动刀、主角先手、hero 先判——三步防御性次序让任何结局都可归因。 - -### F2 percent→乘数换算与合成地板(B3 义务③收口) - -**结论**:池内加算 → 每池独立 clamp [−100, +100] → 池间乘算 → floor 单一取整(结构性非 knob);免伤轮(D'=0)是合法设计态——不调 apply_damage、产零值伤害行;Output Range D' ∈ [0, ∞) 整数、零负值分支,MVP 实际域 [0, 20](B2 参考带)。 - -``` -结算语义映射(effect_pool_map,effect_id 为键): - attack_up → hero_offense(只乘主角先手攻击基础分量)· defense_up → hero_defense - weaken → enemy_output · ambush → flat 附加(后置加法、不入乘区) -敌→主单伤害实例(每结算、逐攻击行为): - P_pool = Σ(同池实例 L×m);P_pool ← clamp(P_pool, −100, +100);M_pool = 1 + P_pool ÷ 100(域 [0, 2]) - D' = floor( D_raw × M_hero_defense × M_enemy_output ) - (整数域 = D_raw × (100+P_h) × (100+P_e) ÷ 10000 向下取整) - D_raw = query_attack(u, L, m_amb).total(charge 拍 = 0;乘区作用于含伏击分量的全裸伤害) -``` - -| 例 | 合成值 | 池 clamp 后 | 乘数 | 读法 | -|---|---|---|---|---| -| weaken AP 界(L=8 × m_w,修订后 65) | −520% | −100 | **0** | 该结算全体存活敌输出归零;第 3–8 层边际瞬时当量 = 0(地板吸收)——明细行如实显示合成值与终值两端 | -| weaken 表界(L=16 × m_w) | −1040% | −100 | **0** | 同上——地板规则不区分越域来源,越域深度仅入合成值显示与诊断计数 | -| defense_up 叠满(L=2 × m_d,现行 −30) | −60% | −60(域内,未触地板) | **0.4** | 该结算 hero 承伤按 0.4× 结算——免伤轮不再由 defense_up 单侧可达 | - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 裸伤害 | D_raw | int | [0, ∞) | B2 F2 total 分量(charge 拍恒 0) | -| 池合成值 | P_pool | int(pp) | 越域可达 ±1040(修订后);clamp 后 [−100, +100] | B3 原样输出 → B1 clamp 收口 | -| 池乘数 | M_pool | 有理数 | [0, 2] | 1 + P_pool/100 | -| 终值 | D' | int | [0, D_raw × 4](结构上界,MVP 不可达) | floor 取整 | - -归口:B3 管 L×m 原样输出不 clamp;B1 管池归属映射、clamp、乘区次序、取整方向;C3 管池值强度评估。 - -### F3 伤害合成、clamp/溢杀与死亡判定(B2 义务③成文) - -**结论**:三分支全序(主角先手 → 逐敌循环 → 道具段)+ 负值分支禁令(零负伤害/负治疗/负当量)+ 死亡判定:Dead ⇔ hp=0(无负 hp 中间态)、受击即死、hero 死亡战斗段短路、判定段 hero 先判;Output Range 双向伤害 D ∈ [0, ∞)、hp ∈ [0, max_hp]、零转移零存续。 - -``` -⓪ 主→敌(战斗段段首,主角先手攻击——基础攻击恒存在〔HeroTable.atk 域 [1,999]、0 加载拒绝〕): - 目标 = B2 default_target()(固定顺位最前存活敌——与道具段同源) - D_hero_raw = HeroTable.atk ×(1 + attack_up 载荷) + F6 充能分量 - D_hero = 三分量逐项 floor 后相加(基础分量经 hero_offense 池 clamp 地板——F2);D_hero = 0 → 零值伤害行 - D_hero > 0 → apply_damage(target, D_hero);hp 归 0 → Dead(受击即死) - 明细行 source_class = hero_attack;存活敌清空 → 敌方循环空转(零行动行),径入衰减段 -① 敌→主(逐存活敌,行主序;调用序钉死 query_attack → apply_damage → advance): - D_raw = query_attack(u, L, m_amb).total(L = 本结算伏击池读值;charge 拍 = 0) - D' = F2 换算;D' = 0 → 不调 apply_damage,产零值伤害行(分量二元组 + 终值 0) - D' > 0 → apply_damage(hero, D');hp' = max(hp − D', 0) - 溢杀部分(D' − 受击前 hp)丢弃——无存续、无转移、无负 hp 态 - hero hp' = 0 → 战斗段立即短路(剩余敌不作用、不产行动明细行) -② 主→敌(道具段,窗口选定件——至多一件,单件制): - D = power(恒定表值,不吃任何 percent 修正;零乘区);目标 = B2 default_target()(死亡后顺延) - apply_damage(u, power);hp 归 0 → Dead;溢杀丢弃、不转移下一敌 - 施加时已无存活敌 → 照常消耗(Used 不可逆)+ "已消耗未生效"明细行 -③ 负值分支禁令:任何公式分支不得产生负伤害/负治疗/负当量——percent 池地板 [−100, +100]、 - flat 值 ≥ 0、hp ∈ [0, max_hp]、治疗 clamp 上界 max_hp(hp' = min(hp + power, max_hp))、 - apply_damage 入参 n ≤ 0 = B2 API 拒绝 + 诊断 -④ 死亡判定数值边界:Dead ⇔ hp = 0(无负 hp 中间态);时机 = 受击即时(敌)/ 战斗段短路(hero); - 判定段 = 防御性优先级 hero 先判(双死结构不可达的纵深防御) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 裸伤害 | D_raw | int | [0, ∞) | B2 F2 total;分量二元组 {baseline, attach} 进伤害行(P2 归因) | -| 乘区终值 | D' | int | [0, ∞) | F2 输出;floor 取整 | -| 目标 hp | hp | int | [0, max_hp] | B2 单位状态;递减与 floor 由 B2 承载 | -| 道具威力 | power | int | [1, 999] | RewardTable 授予时快照(恒定) | -| 溢杀量 | — | int | [0, D') | 丢弃(明细行 value = D'、击杀标记布尔——不记溢出量) | - -归口:B2 管递减/floor 0/Dead 翻转/指针冻结;B1 管本式全序、调用序、零值行、溢杀丢弃语义、死亡判定时机。 - -### F6 伤害A/B 充能与护甲克制结算(机制与结算归 B1,四字段数值投值归 C3) - -**结论**:伤害A/B 为挖掘期充能、战斗段主角先手攻击一次性消费的 flat 附加分量——池内加算、不吃任何 percent 修正、逐分量查 `armor_effectiveness` 甲效表后 floor 相加;充能池单轮生命周期(挖掘期累积 → 本轮战斗段消费 → 轮末归零,跨轮零存量);Output Range D_hero ∈ [0, ∞) 整数、零负值分支。 - -``` -累积(B1 facts 缓冲承载——零新事件、零特判): - A 池 = min(本轮 cell_revealed{kind=safe} 事件数 × damage_a_per_cell, damage_a_cap) - (initial/chain/dig 全通道同待遇;cap=0 = 不封顶结构位;damage_a_per_cell=0 = 机制关闭合法极端) - B 池 = 本轮 flag_judged{hit=true ∧ 资格未消费} 事件数 × damage_b_per_flag - (与 weaken 兑付同源判定、每雷实例一次去重;无 cap 字段——标中旗吞吐由 AP 预算天然限界) -消费(战斗段主角先手攻击,单结算一次性清池): - base = floor( atk × (1 + clamp(P_hero_offense, −100, +100)/100) ) - dmg_a = floor( A 池 × 甲效[dmg_a][target.armor_type] ÷ 100 ) - dmg_b = floor( B 池 × 甲效[dmg_b][target.armor_type] ÷ 100 ) - D_hero = base + dmg_a + dmg_b - 甲效表键集 {base, dmg_a, dmg_b} × {none, a, b} 结构冻结;armor_type 映射归 EnemyTable - 轮末:A/B 池清零(与 decay 段同拍——跨轮零存量) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| A 池 / B 池 | — | int | [0, damage_a_cap] / [0, ∞) | 本轮充能池读值(B1 自持,公开可读——P2 还原面) | -| 伤害A 三参数 | damage_a_per_cell / damage_a_cap | int ≥ 0 | 默认 1 / 8(provisional 归 C3) | SettlementTable knob;cap=0 = 不封顶 | -| 伤害B 参数 | damage_b_per_flag | int ≥ 0 | 默认 2(provisional 归 C3) | SettlementTable knob | -| 甲效值 | e | int percent | {50, 100, 150}(现行默认矩阵取值域) | armor_effectiveness 查表;base 行恒 100 | - -- cap 截断腿:连锁轮 A 池溢出零充能、无"溢出未生效"行(充能非奖励、无兑付语义),截断仅入诊断计数。 -- P2 归因:明细行 = hero 伤害行分量二元组 {baseline = 基础分量, attach = dmg_a + dmg_b 合计}(A/B 拆分经充能池公开读值可还原);A 池来源 = 开格、B 池来源 = 首次标中旗(与 weaken 同判定批)。 - -## 当量换算与条款闭合 - -### 术语表 - -| 术语 | 白话定义 | -|---|---| -| 乘区 | 伤害公式里相乘的各段修正(本作两段:主角减伤池 × 敌方削弱池) | -| 池 | 同一侧百分比修正的加总桶 | -| 地板 | 数值不许越过的下界——本节地板 = 池最低 −100 百分点,即乘数最低 0 | -| 免伤轮 | 主角该结算受到的伤害为 0 的结算 | -| 充能池 | 伤害A/B 的单轮加法分量来源——开格/首次标中雷按表值累积、战斗段主角先手攻击一次性消费、轮末清零 | -| 溢杀 | 一刀超出目标剩余 HP 的部分——直接丢弃,不转移到下一个敌人 | -| 当量 | 统一价值单位,1 当量 = 1 点主角 HP 的期望净变化 | -| 瞬时口径 | 只数一个结算里兑现的价值(裁决口径) | -| 全寿命口径 | 乘上它存活的结算次数(仅作派生量,不作锚) | -| 残余盲猜端 | 图上推理不出、只能赌的那一小块 | -| 完美排雷(P_perfect) | 一张板上没插错一面旗、且至少标中一面时,清图奖励翻倍的乘数 | -| 挖穿计价 | 把残余盲猜区全部安全格挖完时平均会踩到多少雷——按雷与安全格在池中均匀随机交错计算,不是每挖一格按初始比例独立重赌 | - -### F0 当量归一口径(weaken 锚裁决) - -- **结论**:采用"每结算瞬时当量"口径(每 AP 总暴露分支排除);m_w 值域 [60, 85]、默认 −65;地板交叉层数 = ⌈100/m_w⌉ = 2(值域全域恒 2);B4 参照零漂移,B3 仅行值域修订(registry 回写)。 -- 连带:F2 越域界 = AP 界 8×m_w / 表界 16×m_w(合成值 B3 原样输出、B1 池 clamp 收口);单结算 weaken 池 HP 当量上界 = min(L×m_w, 100)/100 × D_inst(该结算实际裸伤害敞口)。 -- 修订效果量(provisional @ D_ref=12):腿一 7.8 vs 6.0 HP/结算(attack_up 当量,+30%,严格大于 ✓);腿二 7.8 vs E_dig 4.5 HP(+73% ✓);池内字面最低档读法(defense_up 3.6)裕度 2.17×。 - -### F1 效果档位当量对照表(A3 条款①) - -**结论**:单一线性换算全四源共用(分源改率 = 条款①契约违约);E(·) 单位 = 主角 HP 点;Output Range E ∈ [0, +∞)、全表零负值(percent 池饱和后边际 E = 0);weaken 修订后每旗 7.8 HP > defense_up 6.0(条款②腿一通过)。 - -``` -flat / 道具类(刀、治疗包、ambush): E = 值本身(ambush 按 k 个攻击拍线性展开) -percent 类(每结算、每层): E_inst = |L × m| ÷ 100 × D_exp(对照表取参考敞口 D_ref) -完美乘数(显式 ÷100,运行时真实双份载体): E_clear(perfect) = power × P_perfect ÷ 100 -时长(显式乘子,非分源改率): E_life = E_inst × 兑付结算数 -D_ref = SettlementTable.equivalence_ref_damage(单行全局 knob,provisional 默认 12) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 参考敞口 | D_ref | int | [1, 999] | SettlementTable 配置值(D2 回写义务,本 GDD owner);provisional 12;变更触发全对照表 + 条款③⑤重跑 | -| 层数 | L | int | [1, max_stack] | B3 实例字段(授予快照) | -| 行值 | m | int | percent ∈ [−100,100]∧≠0 / flat ≥ 1 | StatusEffectTable 行值快照 | -| 兑付结算数 | — | int | [1, duration_settlements] | 剩余结算次数轨迹;对照表按满寿命取 | -| 道具威力 | power | int | [1, 999] | RewardTable 行值快照(恒定表值——已锁) | -| 攻击拍数 | k | int | [0, unit_count] | 该结算存活敌中 attack/heavy 拍单位数(B2 F4 供给,确定性可算) | -| 完美乘数 | P_perfect | percent | **{100, 200}**(域外加载致命) | SettlementTable 配置值;provisional 200(换算入账恒 ÷100) | - -| 行 | 源(source_class) | 类别 | 换算式 | E_inst(每结算/层) | 全寿命 E | 注 | -|---|---|---|---|---|---|---| -| defense_up_basic | safe_cell | buff → defense_up | E_inst = 0.30 × D_ref;E_life = ×duration 1 | **3.6** | **3.6** | 池内字面最低档 buff 当量(减伤墙批 −30 现行值) | -| attack_up_basic | safe_cell | buff → hero_offense | E_inst = 0.50 × D_ref | **6.0** | 6.0 | **锚对照实物(条款②参照对象——registry 回迁口径)**;消费面 = 主角战斗段先手攻击基础分量(F3⓪) | -| spark_aoe | safe_cell | instant_aoe | E = power | —(当场兑付) | 4 | 全体存活敌各 4 点 | -| heal_minor | safe_cell | instant_heal | E = min(power, max_hp − hp) | — | ≤ 4 | clamp 后真实当量;面值 4 = 上界读法 | -| knife_t1 | 注入池(active_inject) | damage_item | E = power | —(库存轨迹量) | 8 | 供给控制器注入——非单格期望摊入 | -| knife_adv | 注入池(active_inject) | damage_item | E = power | — | 16 | 雾档升级刀 | -| heal_pack | 注入池(active_inject) | heal_pack | E = min(power, max_hp − hp) | — | ≤ 12 | 注入池稀缺强治疗 | -| clear_blast | clear_default | instant_aoe | E = power ×(perfect 板 ? P_perfect ÷ 100 : 1) | —(当场兑付) | 40(完美板 80——**真实双份**) | 条款④⑤载体(F5 消费) | -| weaken | flag_hit | debuff → enemy_output | E_inst = m_w/100 × D_ref | 修订后 65 → **7.8** | 7.8(dur=1) | 修订值域/默认见 F0 | -| ambush | mine_hit | 敌方增益(flat) | E = m_amb × k | k=1 → 3;满配 k=3 → 9 | 同左(dur=1 单结算自然边界) | 量纲已定稿(registry `ambush_unit_definition`) | -| 伤害A 充能 | safe_cell(开格——SettlementTable knob,非 RewardTable 行) | flat 附加分量 | E = min(开格数 × damage_a_per_cell, damage_a_cap) × 甲效/100 | 每轮 ≤ 8 × 甲效/100(对甲A 12 / 无甲 8 / 对甲B 4) | 同左(单轮充能单轮消费) | 充能规格见 F6;逐分量查表后 floor | -| 伤害B 充能 | flag_hit(首次标中——与 weaken 同判定批) | flat 附加分量 | E = 首次标中雷数 × damage_b_per_flag × 甲效/100 | 每雷 2 × 甲效/100(对甲B 3 / 无甲 2 / 对甲A 1) | 同左 | 同 F6;"标中旗双收益线"归 W12③ 对账清单 | - -- 锚两腿:weaken 修订后每旗 7.8 > attack_up 6.0(严格大于 ✓,裕度 +30%);7.8 ≥ E_dig 4.5 ✓;池内字面最低档 defense_up_basic 3.6 读法裕度 2.17×——三读法均通过。 -- 结构性边界:腿二可满足上界 = m_w=100 ↔ 相对每结算百分点档 ≈1.96:1(percent 瞬时档被 schema 域封顶);处置 = C3 板形参数与 m_w 联动约束,非数值修订可解。 -- 归口:B1 管本表与换算维护、D_ref 与 P_perfect 承载;B4 管行值/权重/tier/C 供给;C3 管全部 provisional 数值;B3 管 L×m 合成原样输出。 - -### F4 条款③挖掘风险不等式闭合(B1 单一闭合 owner;B2 义务④兑现) - -**结论**:现行值链(duration=1 × m_d=−30 × C3 v3 曲线 d0.25/t0.88)下两参考板形破线(锚行口径 L1 ≈0.48× / L2 ≈0.47×;期望口径 0.60×/0.58× 同向);满配 unit_count=3 深度破线(≈0.16×);旧"通过"回执退役为历史记录;破线升格 C3 默认曲线级约束;actuals p10 交付后强制重跑。 - -``` -配对口径:决策单位 = 单格挖掘;评估点 = 残余盲猜端最坏点(信息端平凡通过,一并登记) -主式:P(安全) × V_safe > P(雷) × V_mine -适用域守卫:(1 − ι) × |S| < 1(残余盲猜集为空)⇒ 主式不评估、信息端平凡腿接管(P(雷) 式在空池退化,禁代入) -P(雷) = |M| ÷ (|M| + (1 − ι) × |S|) (残余盲猜端上界) -P(安全) = 1 − P(雷) -V_safe = E_life(最低档安全格 buff) = (|m_d|/100) × D_ref × duration_d(现行值链:0.30 × 12 × 1 = 3.6) -V_mine = k_max × m_amb = unit_count × m_amb(默认行值 1×3 = 3;cap 溢出使第 cap+1 颗雷边际当量 = 0) -信息端检查(平凡腿):P(安全) = 1 → V_safe > 0 恒成立 -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 实际雷数 | \|M\| | int | [1, W×H−9] | A1 产物指标/行参数推导 | -| 安全格数 | \|S\| | int | ≥ min_safe_count | 同上 | -| 可推理率 | ι | float | [0.85, 1] | **actuals p10(A1 F4 报告 C)**——未交付前以行 target 代 = 判式面的保守代理;重跑义务(对账清单 #6) | -| 防御行值/时长 | m_d / duration_d | int / int | −30 / 1(provisional——减伤墙批/两级奖励批现行值) | StatusEffectTable defense_up 行 | -| 参考敞口 | D_ref | int | [1, 999] | provisional 12 → V_safe = 3.6 | -| 伏击量纲/单位数 | m_amb / unit_count | int | 3(provisional)/ [1,3] | B2 行值 | - -| 板形 | ι(target 代 p10) | P(雷) | 左臂 = P(安全)×3.6 | 右臂 = P(雷)×3 | 裕度 | 判定 | -|---|---|---|---|---|---|---| -| L1(v3:10×10 d0.25,\|M\|=23,\|S\|=77) | 0.88 | 23/32.24 ≈ 0.713 | 1.03 | 2.14 | **≈0.48×** | **✗ 破线** | -| L2 腿(v3:12×12 d0.25,\|M\|=34,\|S\|=110) | 0.88 | 34/47.2 ≈ 0.720 | 1.01 | 2.16 | **≈0.47×** | **✗ 破线** | -| 满配语境(unit_count=3,V_mine=9,L1 板) | 0.88 | 0.713 | 1.03 | 6.42 | **≈0.16×** | **✗ 破线(深度)** | - -- 结论①:现行值链下两参考板形破线——旧"通过"回执(≈2.0×/2.6×,系 duration=2 / m_d=−50 / v1 曲线旧输入产物)失效;信息端平凡腿不变。 -- 结论②:满配语境 unit_count=3 深度破线(≈0.16×)——原 C3 调参约束维持并升格(见④)。 -- 结论③(敏感性):buff 饱和的结构性零兑付使 V_safe 名义值高估——按 0.6 折减(provisional)复算 L1:左 0.62 vs 右 2.14 → 裕度 ≈0.29×(更薄);折减系数与饱和率随 playtest 重校。 -- 结论④(破线升格——曲线级约束):约束升格为**默认曲线的 V_safe 侧杠杆重议**——候选杠杆 = m_d 回调 / duration 恢复跨轮 / D_ref 联动上调 / 板形侧密度×ι 联动对 / m_amb 下调;全部处"禁独立调参"联动网络(m_w↔D_ref↔m_d↔duration_d),修正方向须 C3 提案 + B1 闭合对账共裁。 - -### F5 条款⑤清图 vs 弃图支配性闭合(B1 单一闭合 owner) - -**结论**:条款⑤未闭合——挖穿残余池计价下主判式两态为负(L1 仅完美双份翻正 +11.3,非完美态被支配),实现率折减与多敌语境更差;"推到底"的支配性只在残余集小时自然成立;判据函数角色 = C3/B4 调参约束生成器,AC-40 断言输出与登记约束包一致。 - -``` -主判式(决策点 = "确定格挖完";策略对 = 推到底清图 vs 停手攒 RAP 刷新): - Δ_clear = [R_res + C_eff] − [X_res + Δr × s_ref] ≥ 0 - n_s = (1 − ι) × |S|(适用域守卫:n_s < 1 ⇒ 主判式不评估、信息端平凡腿接管) - E[踩雷] = |M| × n_s ÷ (n_s + 1)(均匀交错模型;n_s 增大时趋近 |M|) - R_res = n_s × E_dig - C_eff = C × (perfect ? P_perfect ÷ 100 : 1)(C = 清图奖励当量 = power 恒等〔clear_blast = 40〕) - X_res = E[踩雷] × V_mine(V_mine 同 F4) - Δr = ⌈(n_s + E[踩雷]) ÷ AP_r⌉(安全格 + 踩雷格均耗 AP;雾态增量叠算见注) - s_ref = D_ref(同一 D_ref,单一换算) - E_dig = (20×6.0 + 16×3.6 + 16×4 + 15×4) ÷ 67 ≈ 4.5 HP(格子池加权;刀/强治疗已移出格子池入注入池不摊入) -显式假设登记:停手侧 RAP 机会收益按零计价(零价假设对"推到底"偏利一分;本假设下 verdict 已为负) -保守地板式:C_eff ≥ X_res + Δr × s_ref -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 残余盲猜安全格 | n_s | float | [0, \|S\|] | (1−ι)×\|S\|;**域守卫:n_s < 1 ⇒ 主判式不评估**(零赌博板形不误判) | -| 挖穿期望踩雷 | E[踩雷] | float | [0, \|M\|] | 均匀交错模型 \|M\|×n_s/(n_s+1) | -| 清图奖励当量 | C | int | ≥ 1(A3 条款④) | B4 供给(clear_blast power=40,provisional) | -| 完美乘数 | P_perfect | percent | **{100, 200}** | SettlementTable 配置值;provisional 200(换算入账恒 ÷100) | -| 单格奖励期望 | E_dig | float | (0, ∞) | 格子池加权推导(现行 4.5;评审口径带 ≈4.3–5.1;实现率折减敏感性同 F4③) | -| 轮行动点 | AP_r | int | [1, 32] | A3 ActionEconomyTable(默认 8) | -| 雾负担比 | fog_burden_ratio | float | [0, 1] | A1 产物指标(付费格分母口径)——雾态 Δr 修正输入 | - -| 板形 | n_s | E[踩雷] | X_res | Δr(代价) | R_res | Δ_clear(C=40 / 完美 80) | 判定 | -|---|---|---|---|---|---|---|---| -| L1 无雾态(v3:10×10 d0.25,ι=0.88,\|M\|=23,\|S\|=77) | 9.24 | 20.8 | 62.3 | 4(48) | 41.6 | **−28.7 / +11.3** | ✗ / ✓ | -| L2 腿(v3:12×12 d0.25,ι=0.88,\|M\|=34,\|S\|=110) | 13.2 | 31.6 | 94.8 | 6(72) | 59.4 | **−67.4 / −27.4** | ✗ / ✗ | -| L1 × 满配语境(unit_count=3,V_mine=9) | 9.24 | 20.8 | 186.8 | 4(48) | 41.6 | **−153.2 / −113.2** | ✗ / ✗ | -| L2 腿 × 满配语境 | 13.2 | 31.6 | 284.5 | 6(72) | 59.4 | **−257.1 / −217.1** | ✗ / ✗ | - -- 实现率折减口径(E_dig′ = 2.70 provisional):L1 = −45.3 / −5.3;L2 = −91.2 / −51.2——同向更差(完美翻正腿亦被折减吞没)。 -- 雾态增量:链不可达雾格全价 AP 抬高轮数——Δr 增量 = \|U\| × dig_ap_cost ÷ AP_r(v3 曲线复算 (29.99 + 4) ÷ 8 = 4.25 → 上取整 5,较无雾基线 Δr=4 **+1 轮**);actuals fog_burden_ratio p50/p90 交付后重跑(对账清单 #6)。 - -| 项 | 约束 | 裁决方 | -|---|---|---| -| ① C 量级上调整向 | 保守地板需求 L1 ≥ 110.3 / L2 ≥ 166.8(v3 曲线重推;现值 C=40 / 完美 80——缺口 **70.3 / 126.8**;原 46.1/91.8 需求系 v1 曲线旧值链产物,退役为历史记录);任何上调与护栏 B 口径联动复核 | B4/C3 | -| ② 或裁"清图非严格支配"为设计态 | 与 A4 定价硬约束②同向;如裁设计态,A3 条款⑤注记的 P1 对冲弱化须同步声明,弃图率雾板分层观测加权监控 | C3(①②二选一) | -| ③ 多敌联动 | 满配语境深度为负与 F4 破线同向——unit_count > 1 行的放行判据 = 条款③⑤在全部登记行组合下同时成立(判据自动收紧至曲线级重议——与 F4 结论④并案) | C3(双条款并案) | -| C3 裁决回执 | **② 采信(非支配设计态)+ 计价基元换位重推**:clear_default 槽 clear_knife→clear_blast(instant_aoe 当场兑付全体存活敌,C = power = 40)——缺口重推 = 46.1−40 = **6.1**(L1)/ 91.8−40 = **51.8**(L2,v1 曲线口径);C 量级不上调 ✓;P1 对冲弱化同步声明已落 C3 OQ4、弃图率加权监控持续;actuals 交付后按 clear_blast 语义强制重跑(AC-40 同批口径,registry clause5_dominance.c3_ruling) | C3(已裁——①②二选一落定) | -| B1 重算批重推回执 | v3 曲线 × E_dig=4.5 重推:主判式 L1 −28.7/+11.3(完美翻正)、L2 −67.4/−27.4、满配 −153.2/−113.2 与 −257.1/−217.1;保守地板需求 110.3/166.8(缺口 70.3/126.8);**裁决② 维持**(非完美态负、完美态 L1 翻正、L2 全负——真人零弃图初裁 OQ4 不受读数漂移影响);护栏 A/B 读数挂旧值链——W2 复核随 C3 收口批三选一落档 | B1(重算回执登记) | - -| 护栏 | 判据 | 读数 | 突破条件 | -|---|---|---|---| -| A 雾板净当量优势带(B4 pricing_constraints③ 的 B1 判据) | 每链不可达雾格净优势 = (E_fog − E_dig) − s_ref ÷ AP_r | 登记读数 (11.1 − 7.2) − 1.5 = **+2.4 ∈ (0, 3]**(v1 曲线/旧格子池口径);重算批方向性复核:E_dig 修正 4.5 + 雾池构成变更 → 读数 ≈ **−1.1 < 0,越下界**(雾纯税化风险);E_fog 正式重推随 W2 批 | E_fog > 11.7 → C3 雾池联动禁区,禁独立调参(判据式不变——阈值随重推复核) | -| B 防钓鱼——退化板刷清图奖励 | 上界判据 = ⌈(\|S\|_min − \|R₀\|_max) ÷ AP_r⌉ × s_ref ÷ 2 ≈ ⌈(50−20)/8⌉ × 12 ÷ 2 = **24**(D_ref 口径——与敌 DPS 无关,读数不受 v3 换锚影响) | 登记双读数(v1 曲线口径):D_ref 口径上界 24 → C_eff = 16 ≤ 24 ✓ / DPS 严格读数上界 ≈8 → C_eff = 16 越(clear_knife C=8/完美 16 口径);**W2 复核事项**:C 提至 clear_blast 40/完美 80 后对两上界越线 1.7–10×——三选一裁决(上界改判/接受+强化监控/回调 C)随 C3 收口批落档 | 结构承载 = A1 min_safe_count + 布雷数下限 + A2 R₀≠S 三闸(B1 侧判据为对账复核,非运行期校验) | - -- 护栏 B 输入登记:\|S\|_min = min_safe_count 是 A1 行级 knob,调参按当期行集重算、禁写死 50;\|R₀\|_max = 20 系参考带经验值、无登记供给方 → 登记 A1 产出义务 R₀ 规模分布上界(F4 报告 C 扩列,缺口预检 9);DPS 严格读数参照系 v1 曲线 atk 值,v3 atk 上探后正式重推随 W2 批。 -- P_perfect 默认值:×2(SettlementTable.p_perfect = 200,provisional,调参所有权 C3;运行时载体域 {100, 200})——现参数下唯一使 L1 翻正的杠杆(+8.0);非完美态仍负 → C 量级上调约束不因 P_perfect 消解;上界受护栏 B 约束(完美加成不得触碰钓鱼线)。 - -设计意图:两个不等式判据函数是 C3 调参的约束生成器——把"挖下去值得/推到底不吃亏"从口号变成每笔调参必须重跑的对账。 - -## 明细流水协议 - -### 规则 - -- **规则 14**:结算过程中每一件事写一行明细流水;行型封闭为 13 类、不允许私自增加;每行带公共字段,各行型再补特有字段;这份流水是界面呈现、回放对账、数据导出共读的唯一数据源契约;任何一行找不到来源 = 断言失败(宁炸勿混)。 -- **规则 15**:结算完全可回放——同样的随机种子加同样的输入(事件序列 + 窗口选择序列),跑出的步骤流逐行相同;成立前提 = 零随机、确定性输入、数值全部来自表值快照、attempt 重试不额外取随机流号;录像回放、断言复测、切点续玩都建立在它之上(切点见 AC-34)。 - -### 明细行类型(封闭枚举,13 类) - -| 行类型 | 特有字段 | 产出点 | 说明 | -|---|---|---|---| -| 效果行 | `effect_id` `pool_value` | 增益/减益段 | value=该次授予贡献值;pool_value=池合成值(防 −130%×2 行误读为 −260%) | -| 伤害行 | `target` | 道具段 / 战斗段 | 分量二元组 + 减伤终值 + 击杀标记 | -| 治疗行 | — | 道具段 | clamp 后真实回复量 | -| 道具行 | `target` | 授予段 / 道具段 | 入库 / 生效 / 语境注记 | -| 奖励未生效行 | 聚合计数 | 授予段 | 满层拒绝、满血、雾板等合法例外 | -| 已消耗未生效行 | — | 道具段 | 施加时已无存活敌(Used 不可逆) | -| 使用被拒行 | — | 道具段 | 满血治疗包守卫 | -| 溢出未生效行 | — | 授予段 | 伏击/奖励族同名协议 | -| 标旗未中行 | highlight=`perfect_broken` | 授予段 | 零值归因行;每雷实例一次去重 | -| 蓄力行 | — | 战斗段 | charge 拍零作用 | -| 衰减行 | — | 衰减段 | 移除数 k(呈现聚合归 D1) | -| 判定行 | — | 判定段 | 胜负 / 继续 | -| 高光行 | — | 授予段(清图) | 完美排雷;value=实际有效兑付,禁记名义值 | - -公共字段(13 类全必有):`type` `source_class` `origin_cell`(板级行可空)`round_index` `display_name` `value` `highlight?`。断言:无来源行 = 失败(AC-42)。新增行类型/新字段均为输入的确定函数——回放逐行相等断言语义不受损。 - -### source_class(封闭枚举) - -| 值 | 来源 | -|---|---| -| safe_cell / flag_hit / mine_hit / clear_default | B3 既有四源 | -| 道具/判定扩展 | B4 交付语义 | -| enemy_action | 敌方行动行(伤害/蓄力) | -| flag_miss | 标旗未中零值行 | -| hero_attack | 主角先手攻击伤害行 | - -新增值 = 接口漂移,须同步 `source_label_map` 键集。 - -### highlight(可空枚举) - -| 值 | 含义 | -|---|---| -| `flag_hit` | 标中旗削弱兑付行强调 | -| `clear_reward_h2` | 清图奖励行强调 | -| `perfect_broken` | 本板完美谓词已破的归因锚 | - -新增值 = 接口漂移。 - -设计意图:13 类封闭行型 + 无来源即炸,让"合并到看不出来源"的呈现优化在数据层就过不了断言。 - -## 边界情况 - -| 条件 | 行为 | -|---|---| -| 末图清图即胜利(cleared 与 battle_over 同结算) | 授予段先兑付清图奖励(含完美判定)→ 窗口当轮可选用 → 道具段照常 → 战斗段空转(无行动行)→ 衰减照常执行 → 判胜 → battle_over 清理;未选用件随 clear_inventory 消亡 + 反馈行(依据:B4 E15) | -| 战斗段 hero hp=0 | 立即短路——剩余敌不作用、不产行动明细行,径入判定段判负;短路后衰减段照常执行(结算完整性优先)(依据:Core Rule 10) | -| 判定时 hero 与最后敌同时 hp=0 | 结构不可达(我方伤敌均先于敌方行动兑付);防御规则 = hero 先判 → 判负(纵深防御)(依据:Core Rule 12) | -| 减伤/削弱合成后 D'=0 | 不调 `apply_damage`(B2 对 n≤0 拒绝),改产零值伤害行(分量二元组 + 终值 0)——免伤与零输出必须可见(依据:负值分支禁令) | -| 伤害超过目标剩余 hp(溢杀) | 溢出丢弃——无存续、无转移、无负 hp 态;行 value=D'、击杀标记为布尔(不记溢出量)(依据:F3) | -| 敌为 charge 拍而本轮踩雷 | 伏击授予照常执行(授予段先于战斗段);query_attack 返回零作用 → 本结算伏击池全部蒸发(dur=1 轮末清零);战斗段零伤害;明细 = 授予行 + 蓄力行("这轮踩的雷白喂了"可对照)(依据:B2 EC8) | -| 全体存活敌同拍 charge | N 行蓄力行、零 apply_damage、hero 承伤 0——合法状态非错误(依据:B2 EC) | -| 伏击池 L=0 时敌攻击 | D_raw = 纯基线 atk(分量二元组 {atk, 0})——零伏击是 L=0 的自然读值非缺失分支(依据:B2 F2) | -| 同窗提交多件 | 仅首件受理生效,余件零调用 + 编排违例诊断;满血使用守卫保留为纵深防御(跨结算场景仍可达)(依据:Core Rule 7 / AC-16) | -| 治疗包 power 超过当前缺血 | hp' = min(hp + power, max_hp) 部分回复、不拒绝(满血 = 零收益拒、超量 = 部分收益——两分支语义互斥)(依据:F3) | -| 选定刀施加时已无存活敌 | 照常消耗(Used 不可逆)+ 逐件"已消耗未生效"明细行(零效果判定读 B2 存活集);单件制下不可达、逻辑保留为防御分支;战斗段照常空转推进(依据:B4 E10 / AC-20) | -| 窗口打开时库存为空 | 跳过恒合法;呈现面 D1 可整体不弹窗;结算段序零停顿继续(依据:B4 E8) | -| 挖掘期刷新 RAP 不足 | `request_refresh` 返回 false、状态不变 → `refresh_board` 原样上抛拒绝(刷新拒绝不是编排错误,是玩家决策的合法结果)(依据:A3 EC13) | -| 同轮多次刷新成功(cap 内) | 每次成功独立走 `refresh_board` 全序(retire → generate → install → roll_board 恰一次/图)——挖掘期当场连刷合法;每次 generate/roll_board 消费新 scope;第三次提交 → cap 拒绝(依据:A3 EC15) | -| stopped/ap_exhausted 轮 | 出口分发恒 same_board(本编排无刷新提交面);回发 new_board = B1 违约(绕过 RAP"支出唯一")→ fail-fast 上抛(依据:A3 Rule 11) | -| 换图生成产物带非法产物标记 | 编排不拒绝产物(玩家永不卡死),上抛玩家侧呈现请求(数据面 = 非法标记;提示/补偿/回退形态归 D1);A2 `install_board` 若拒绝(不变式违例)= 程序级错误 → fail-fast(非玩家域)(依据:A1 EC5) | -| battle_over 清理序列中某调用被拒 | debug 诊断 + 编排纪律修复;幂等守卫(各侧 false + 诊断)兜底,不中断清理序列剩余步骤(防半清理态跨战斗泄漏)(依据:编排纪律) | -| 战斗中表热重载请求 | `set_reload_gate(true)` 已置位 → D2 门拒绝返回 false(依据:D2 EC8) | -| 衰减段调用时容器已空 | `decay_round()` 返回 0——合法结果、零明细行或聚合零计数(依据:B3 EC13) | -| 清图槽身份为 buff 且授予时已满层 | 零兑付 + "奖励未生效"行(合法例外);完美板高光行降级不发(完美谓词仍成立,当量入账 = 实际兑付 0);若仅第二份被拒(首份已落地)→ 高光行照发、value = 首份当量 + "奖励未生效"行一条(依据:B4 E11 / Core Rule 13#2) | -| 完美排雷谓词在 RAP 刷新图上 | 刷新图不产生清图奖励(无兑付点)→ P_perfect 不触发;板级 flag 计数随每次 board install 重置(跨图不累积)(依据:Core Rule 13) | -| 板内既有标中又有误标 | 完美谓词不成立 → 正常兑付(无高光行)+ 本轮首个误标判定产"标旗未中"零值行(highlight=`perfect_broken`;重复上报去重)——零误标是全有或全无谓词、无部分完美档(依据:Core Rule 5.2) | -| 多敌(unit_count=3)同结算攻击 | 行主序逐敌执行循环、共享同一 L(池共享不消耗);任一敌作用后 hero 死亡 → 短路中止剩余敌(顺位即威胁序的可观测面)(依据:Core Rule 10) | -| 道具段击杀造成死亡即不动手 | 该敌 Dead 后战斗段 `query_alive` 已不含它——不出现行动行(缺席即指针冻结的明细面);抢杀兑付 = 击杀标记进流水(感知数据前置)(依据:Core Rule 9) | -| 零威胁组合(行 atk=0 ∧ cap=0) | 战斗可胜但零风险 = 内容态配置错误(hero atk=0 已被 HeroTable 域下界结构杜绝,战斗恒可定局);护栏 owner = 实现期 ADR/D2 跨字段校验;B1 观测锚 = 战斗轮数异常遥测(进 C3/OQ 清单)(依据:B2 OQ9 并案) | -| 结算开始时 hero hp=0 | 结构不可达(hp=0 只产生于战斗段 → 短路直入判定段);防御断言:窗口打开前置检查 hero 存活,违反 = debug 断言(编排违例显式暴露)(依据:编排自守) | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | 状态 | -|---|---|---|---|---| -| 上游 | D2 | hard | SettlementTable schema 承载(B1 回填 owner)+ ConfigDB 读取 + `set_reload_gate()` 唯一调用方;零结算随机流(流封闭不变) | Approved | -| 上游 | A3 | hard | F1 五条款下游契约(B1 = 条款①②③⑤闭合 owner)+ `refresh_board` 挖掘期刷新编排 + `notify_settlement_done`/`notify_combat_end` 回发 + `last_round_end` 读取 | Approved | -| 上游 | A2 | hard(订阅) | 三事件流订阅(facts 缓冲;A2 唯一回边的订阅端)+ `install_board`/`retire_board` 调用方 + Waiting 相位观测量 = 结算触发条件;事件到达序不承载语义 | Approved | -| 上游 | B2 | hard | 单位接口全调用面(spawn/query_*/apply_damage/advance/default_target/ambush_grant_plan/despawn_all)+ B2 义务①–⑥ | Approved | -| 上游 | B3 | hard | 状态容器五 API 全调用面 + B3 义务①–⑧;weaken 锚红警裁决 owner(F0 检查点) | Approved | -| 上游 | B4 | hard | 奖励/库存十 API 全调用面 + B4 义务①–⑥(roll_board 恰一次 / 关卡末清库快照计数 / usable_now 组装) | Approved | -| 上游 | A1 | 间接 hard 接线 | `generate(L, D)` 换图编排调用方 + actuals 分布 p10 对账输入(F4 报告 C)+ attempt 边界非 scope 事件 + EC5 零合法板 B1 半边上抛 | Approved | -| 上游 | A4 | 对账锚(零运行时接口) | 条款⑤三腿入账(雷险消解/信息双向/AP 腿)+ 两方向性护栏 + 雾格零特判(B1 无变异分支) | Approved | -| 上游 | C1/C2 | provisional | encounter 上下文 (L, D, hero_hp) 供给(begin_battle 入参);跨战斗 HP 持久性;战斗触发 | 未设计——MVP 冒烟直供(入参封装隔离) | -| 下游 | D1 | hard(数据供给,未设计——第 10 位) | 结算明细流水 = 统一数据源契约(规则 14 行协议);承接呈现义务台账:A2×6 / B2×4 / B3×4 / B4×5 / B1 新增 ×3(高光行强调、完美排雷呈现、EC5 零合法板提示)——缺项即 blocking,随 D1 GDD 门禁评审核对 | — | -| 下游 | B5 | soft(垂直切片) | 结算步骤流 = 战斗动画回放脚本源;溢出行/origin_cell 玩家可读形态(B3×B5×2 数据源) | — | -| 下游 | D4 | soft(Alpha) | 音频挂点 = 明细行类型流(B4 音频挂钩点事件源) | — | -| 下游 | D5 | soft(Alpha) | 教学口径数据源(来源标注/RAP 清零/库存清空/满层溢出/蓄力拍贪雷——经 B1 流水兑现) | — | -| 下游 | C3 | soft(provisional) | 条款③⑤对账结果 = 调参约束输入(unit_count>1 破线约束 / 保守地板缺口 / 护栏 A/B 突破条件);P_perfect/D_ref 调参所有权 | — | - -- 双向一致性核对(systems-index 依赖分层表):B1 ← A3,B2,B3,B4,D2(第 3 Feature 层)· D1 ← A2,A3,B1 · B5 ← B1,D1 · D4 ← A2,B1 · D5 ← A2,A3,B1 · A2 事件面 referenced_by 含 B1(订阅边)。 -- C3 消费 B1 对账结论的事实依赖成立——C3 GDD 定稿时须回写索引(对账输出 = 调参约束清单,非运行时接口)。 -- B1 是项目首个全部玩法上游均已 Approved 的系统(除 C1/C2 外),无 provisional 上游假设。 - -### 呈现数据面义务(B1 无自有渲染面,呈现归 D1/B5) - -| 编号 | 数据面义务 | 归属/呈现 | -|---|---|---| -| 1 | 结算明细屏 = MVP 战斗本体:数据源 = 规则 14 流水行协议;每行 `value` 数值在暗色底上须高对比(明细屏是 MVP 数字密度最高的屏) | 屏级布局/节奏/滚动形态归 D1/B5 | -| 2 | 行类型区分 = 形状+色相双通道:未生效四类行(奖励未生效/已消耗未生效/使用被拒/溢出未生效)必须携带形状冗余(icon/划线等),防色弱玩家把"没生效"误读为普通行 | D1/B5 | -| 3 | 高光行数据面:perfect_sweep 高光行、标中旗 `highlight` 标记、清图奖励行 H2 强调标记——B1 只锁行字段;未生效类行按聚合计数呈现(数据可聚合字段已入协议) | 强调形态归 D1;`target`/`effect_id` 是多敌归因呈现与 icon/极性映射的直接数据源 | -| 4 | 零值伤害行可见性:免伤轮/零输出轮的零值行不得被"零值不显示"优化吞掉(归因链断点) | D1/B5 | -| 5 | 音频挂钩点(D4,Alpha)= 明细行类型流:道具(入库)/效果/伤害/判定/高光行 + 负反馈聚合(未生效类行数 >0 时单次结算至多一次——防逐行惩罚轰炸) | 挂点事件源归 B1 流水 | -| 6 | 道具使用窗口载荷 = B4 `query_inventory` 投影 + B1 组装的 `usable_now` 预判字段(满血治疗包禁选);选择序收集/跳过/窗口时机指示/触发政策归 D1;窗口选择序列 = 回放输入事件;窗口期输入与棋盘不竞争(单意图帧先例) | D1 | -| 7 | 结算明细屏数据锚 = 终局判定行(胜负画面的数据锚) | D1 | -| 8 | UX Flag:本系统有 UI 贡献(结算明细屏 + 道具使用窗口)——Phase 4 运行 /ux-design 为其创建 UX 规格先于编写 epics,引用 design/ux/[screen].md 而非本 GDD | systems-index 备忘(Phase 5d) | - -## P0 最小闭环 - -1. `begin_battle(encounter)` 六步开战斗:gate 置位 → 容器开域 → encounter 骰 → spawn → install+roll 恰一次 → round_start。 -2. 挖掘期 B1 只缓冲 A2 三事件流,玩家挖格/插旗/停手。 -3. 轮末 Waiting 相位自动触发七段结算(触发只读相位与 last_round_end)。 -4. 授予段三批兑现:雷→伏击、安全格→奖励分流、旗→削弱/标旗未中行、清图→奖励(完美双份)。 -5. 窗口段玩家至多选一件道具或跳过(唯一输入点,选择入回放)。 -6. 增益合成 → 道具 → 战斗段主角先手 + 逐敌还手 → 衰减恰一次。 -7. 判定段:hero 先判负 / 敌清空判胜 / 否则回发 same_board 进下一轮;cleared 轮换图续轮。 -8. 胜负 → battle_over 清理序列(库存关内延续)→ 明细流水回流 D1 呈现与回放对账。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | flag_miss 标错惩罚源路径(候选"敌方伏击 +1":flag_judged{hit=false} 转化 + B3 source_class 新枚举 + 惩罚重复性裁决) | A2 OQ1 实测采纳后才上;当前标旗未中行仅为归因痕迹(缺口预检 12 / OQ8) | -| P1 | 深度高光形态(#3 标中旗即时 HUD 反馈动画/音画同步;旗落格高亮/姿态反馈) | MVP 已落数据面标记 + 当轮兑付;形态随 art-bible 与战斗表现美术测试定(OQ7) | -| P1 | EC5 零合法板玩家侧呈现形态(提示/补偿/回退三选一;"确定性回退已知好种子"候选归实现期 ADR) | B1 数据面已就绪,形态归 D1 裁决(OQ5) | -| P1 | C1/C2 真实遭遇供给接线(begin_battle 入参改真实遭遇上下文 + 跨战斗 HP 持久性) | C1/C2 未设计,MVP 冒烟直供(缺口预检 5 / OQ6) | -| P2 | 回放切点续玩端到端(快照恢复驱动) | 生效条件 = D3 实现(AC-34 deferral) | -| P2 | 真 A1 端到端集成冒烟(换图 generate 真实集成、attempt 重试语义、非法产物真分布) | 生效条件 = A1 实现落地(缺口预检 10) | - -## 调参表 - -### SettlementTable schema(单行全局,B1 回填 owner——Rule 4 豁免:单行全局常量/结构表,HeroTable/ActionEconomyTable 先例) - -| 字段 | 类型/域 | 默认 | owner | 说明 | -|---|---|---|---|---| -| equivalence_ref_damage(D_ref) | int [1, 999] | 12 | C3(provisional) | 当量参考敞口(F1);变更触发全对照表 + 条款③⑤对账重跑(联动义务,禁独立调参) | -| p_perfect | percent **{100, 200}** | 200 | C3(provisional) | 完美排雷清图奖励第二份兑付触发(100 = 仅高光无第二份、200 = 真实双份交付);非整数倍数乘数无运行时载体,域外加载致命;上界受护栏 B 约束(双读数 24 / ≈8——裁决归 C3) | -| segment_order | StringList | [grant, item_window, buff_debuff, item, combat, decay, verdict] | ✗ 结构冻结 | 段序骨架的零字面量载体;加载期校验恒等于拍板段序,违例致命(防实现乱序静默漂移) | -| source_label_map | Dictionary(source_class → 文案键) | 封闭枚举全覆盖 | ✗ 结构冻结 | source_class → D1 呈现文案映射键(P2 归因呈现侧数据源);键集 = B3 source_class ∪ {道具/判定扩展, enemy_action, flag_miss, hero_attack};新增键 = 接口漂移 | -| effect_pool_map | Dictionary(effect_id → pool) | attack_up→hero_offense · defense_up→hero_defense · weaken→enemy_output · ambush→flat_attach | ✗ 结构冻结 | 效果语义映射(F2);新 effect_id 上线须随批登记映射,悬空 effect_id = 加载期致命(引用型字段 dangling_ref_policy) | -| pool_clamp_lo / pool_clamp_hi | int(pp) | −100 / +100 | ✗ 结构冻结 | percent 池地板域(F2);乘数域随之 [0, 2] | -| round_direction | enum {floor} | floor | ✗ 结构冻结 | 乘区取整方向(F2——单一取整规则,结构性非 knob) | -| damage_a_per_cell | int ≥ 0 | 1 | C3(provisional) | 伤害A 开格充能/格(护甲克制批——充能与结算归 B1 战斗段) | -| damage_a_cap | int ≥ 0 | 8 | C3(provisional) | 伤害A 单轮充能封顶(0 = 不封顶——防连锁轮失控) | -| damage_b_per_flag | int ≥ 0 | 2 | C3(provisional) | 伤害B 标雷充能/首次标中雷(每雷实例一次去重) | -| armor_effectiveness | Dictionary {base, dmg_a, dmg_b} × {none, a, b} | 特化 ×150 / 无甲 ×100 / 对位 ×50 | 键集 ✗ 结构冻结 / 数值 C3(provisional) | 伤害类型 × 护甲克制矩阵——主角攻击三分量各自查表后 floor 相加;敌种甲型映射归 EnemyTable.armor_type | - -- 加载校验:effect_id 主键唯一(ConfigDB 既有);effect_pool_map 键 ⊆ StatusEffectTable 活行集(跨表悬空致命——B4→B3 首引激活先例同款);segment_order 违例致命;p_perfect ∈ {100, 200}(载体域,域外加载致命;100 = 完美必须 ≥ 不加倍的机制语义下界)。 - -### Knob 表 - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| equivalence_ref_damage | 12 | 全当量表膨胀 → 条款③左臂虚高、锚裕度失真(重跑强制) | 当量坍缩 → weaken 锚第二腿破线(m_w ≥ 60 下界的前提失效) | -| p_perfect | 200 | 载体域封顶 200(C 量级上调走 B4 clear 池 knob,须与护栏 B 口径联动复核:防钓鱼线 D_ref 读数 24 / DPS 严格读数 ≈8) | =100 → 第二份兑付不触发(完美仅剩高光行、无实质增量——情绪奖励感最弱档,机制空转) | - -- 非 knob(结构冻结,修订走 GDD 流程非调参):段序骨架、乘区结构(两池乘算)、floor 取整、池 clamp 域、明细行协议、零随机、结算触发 = Waiting 相位、调用序(query_attack→apply_damage→advance)、衰减恒执行。 -- Knob 交互:D_ref × m_w × m_d × duration_d(锚两腿与条款③ V_safe 共用 D_ref——defense_up.magnitude/duration 已纳入"禁独立调参"联动网络;B4/B1 共裁 m_w、C3 投 m_d 时须同步核对 D_ref 并重跑条款②③⑤);p_perfect × C(clear 池当量)——护栏 B 联动;D_ref × 条款⑤ s_ref(同值引用——改 D_ref 即改结算强度参考,两条款重跑);damage_a/b × armor_effectiveness × EnemyTable.armor_type——C3 联动网络 #6(敌种甲型变更须复算 Boss/普通战 K 区间)。 -- 调参所有权:全部 knob provisional 归 C3;每次调参须重跑 F1 对照表 + 条款②③⑤预检并同步 registry(接口漂移义务——B2/B4 同款条款);actuals p10 交付后的强制重跑义务见对账清单 #6。 - -### 边界参数总表 - -| 参数 | 边界 | 默认 | 出处 | -|---|---|---|---| -| percent 池 clamp | [−100, +100] pp,每池独立收口 | — | F2 | -| 池乘数域 | [0, 2](= 1 + pp/100) | — | F2 | -| m_w(weaken 行值) | [60, 85] | −65 | F0 裁决(瞬时当量口径) | -| 地板交叉层数 | ⌈100/m_w⌉ = 2(值域内恒 2) | — | F0 | -| P_perfect 载体域 | **{100, 200}**,域外加载致命 | 200(×2 双份交付) | 规则 13 | -| D_ref(当量参考敞口) | [1, 999] | 12 | SettlementTable | -| HeroTable.atk | [1, 999],0 加载拒绝 | 6 | 2026-09-11 拍板 | -| 伤害 D' | 整数 [0, ∞),零负值分支 | — | F3 | -| D' = 0 | **不调** apply_damage,产零值伤害行 | — | 负值分支禁令 | -| 取整 | floor,单一规则(结构性,非 knob) | — | F2 | -| 溢杀 | 丢弃,不转移、无负 hp 态 | — | F3 | -| 治疗 | hp' = min(hp + power, max_hp) | — | F3 | -| 伤害A 充能 | 单轮池 ≤ damage_a_cap(0 = 不封顶);轮末清零 | 1/格 · cap 8 | F6 / SettlementTable | -| 伤害B 充能 | 首次标中雷每雷一次去重;无 cap(AP 预算天然限界);轮末清零 | 2/雷 | F6 / SettlementTable | -| 甲效矩阵 | 键集 {base, dmg_a, dmg_b} × {none, a, b} 结构冻结;逐分量查表 floor 后相加 | 特化 ×150 / 无甲 ×100 / 对位 ×50 | F6 / SettlementTable | - -## 验收标准 - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | Core-Battle 全集成冒烟:`godot --headless --script`(脚本 extends SceneTree 以获得 quit(code);ConfigDB/RngService autoload 由脚本显式实例化) | -| 真假声明 | 真 A3(相位机全 API)+ 真 B2/B3/B4(class_name 直引实例化;多敌腿复用 `enemy_multi_unit` 夹具根)+ 真 A2 规则引擎(板走既有登记规格 b_spawn/b_flag/b_batch/b_chain/b_fog/b_mine_walk;挖掘/插拔/停手经 `settle_batch` 真驱动——冒烟扮演 D1 提交意图) | -| A1 桩 | 程序构造产物桩:换图 generate 调用点按登记序列返回 schema 坐标级程序构造板;每次调用经 `open_stream("board_gen")` 取号恰一次(与真 A1 取号契约同构,scope 轨迹断言真实);attempt 重试不重开 scope 的语义归真 A1(deferral);真 A1×A2×B1 端到端集成冒烟与 A1×A2 双包含端到端同槽(生效条件 = A1 实现落地) | -| C1/C2 | provisional:`begin_battle(encounter)` 入参冒烟直供(encounter 坐标复用 B2 行集登记 (L_g,D_g)/(L_a,D_a);hero_hp 按腿直供 max_hp/低值/缺血压值) | -| D1/B5 断言面 | 未设计 → 步骤流捕获列表(主断言面)+ 回发捕获(notify_settlement_done/notify_combat_end)+ set_reload_gate 调用捕获;窗口选择与刷新意图 = 冒烟扮演 D1 经 B1 提交面注入 | -| A2 事件载体 | 事件外发载体(signal vs 回调)归实现期 ADR——依赖真 A2 事件流驱动的 THEN 子集在 ADR 落地前为纸面契约;备选 = A2 半真(事件注入面直喂 facts 缓冲 + A3 真,断言口径不变);本节优先真 A2 全集成,半真仅为 ADR 前过渡载体 | -| 被测面 | `begin_battle(encounter)` · 窗口选择提交面 · 刷新意图提交面(refresh_board 挖掘期刷新编排)· 结算事务(内部触发,经 A2/A3 驱动到达);段序断言 = 步骤流行序(授予类行 < 窗口标记 < 效果行 < 道具行 < 伤害/蓄力行 < 衰减行 < 判定行——全序断言) | -| 只读观测量 | A3 ap/rap/phase/last_round_end · B2 query_alive/query_beat/query_attack/default_target · B3 query_active(六归因字段+快照载荷)· B4 query_identity/query_inventory · RngService 公开 scope 计数器(board_gen/reward_roll 双流——roll_board/generate 恰一次的观测面)· 诊断收集器 | -| 期望值纪律 | 全部 knob 按当前 ConfigDB 表读值推导、不写死;记号:D_ref(equivalence_ref_damage)/ P_pf(p_perfect)/ m_w(weaken.magnitude)/ m_d/D_a/M_a(defense_up)/ m_amb(ambush.magnitude)/ c_r(所在行 cap)/ a_g/h_g(goblin)/ a_e/h_e/m_e/u_c_f(bugbear)/ M_h(HeroTable.max_hp)/ A_h(HeroTable.atk)/ p_i(RewardTable.power)/ AP_r | -| 结构定值断言 | 合法集:segment_order = 拍板序、pool_clamp_lo/hi = −100/+100、round_direction = floor、effect_pool_map 四键、armor_effectiveness 键集 {base, dmg_a, dmg_b} × {none, a, b}、行类型封闭枚举 13 类、公共字段 + 行类型特有字段分层、source_label_map 键集封闭(含 enemy_action/flag_miss/hero_attack) | -| SKIP 与生效前提 | 依赖修订后基线的腿(如 m_w ≤ −51 使 2 层即越域;m_d=−30 使 defense_up 叠满脱离地板边界读法)前提不满足时输出显式 SKIP 防 CI 静默、不假失败;registry 对账 AC(AC-41)在回执落地前失败 = 裁决未兑现的正确信号(不写软口径)——现行回执在案(F0 裁决批 + 重算批),AC-36/41 按现行值链断言 | -| 登记常数 | A2 板登记常数与 B2 行集登记坐标直接复用不重制;B1 新增 σ 登记轨迹(身份依赖腿——如"双治疗包""刀全灭敌""清图槽身份",master=42、经 derive_at 测试通道推导、预推进按 B4 时序口径)+ 登记构造序列(板 × 意图序 × 期望行数);登记后第二人独立推导复核,失效处置 = 先复核登记、无误即实现缺陷;每用例先 `reset_diagnostics()` | -| 夹具策略 | 默认根 b1_default = D2 全表清单 + SettlementTable 默认行(D_ref=12 / P_pf=200 / 拍板段序 / source_label_map 封闭全覆盖 / effect_pool_map 四键 / clamp −100/+100 / floor / 充能三参数 1·8·2 / 甲效矩阵默认值);致命根 ×3 独立进程:b1_segorder_bad(段序置换)/ b1_poolmap_dangling(ghost_effect 键)/ b1_pperfect_oob(p_perfect=99);SettlementTable schema 程序构造承载域校验全谱;板 = A2 既有板规格复用;行为夹具根经 `--data-root=` 注入(仅 debug、不入 data/tables/);各 AC 声明其板/根、用例间无顺序依赖 | -| 致命类收窄 | 恰三行致命 manifest(独立 headless 进程、游戏通道):segorder_violation → ≠0 · poolmap_dangling → ≠0 · pperfect_oob → ≠0;负空间声明(编排自守 fail-fast 断言——new_board 违约守卫、窗口打开前置 hero 存活断言、一事件双转化守卫、单一结算事务在飞——违规路径不可由公开 API 构造)不经冒烟断言、不入 manifest,行为级证据 = 正腿断言 + AC-43 静态扫描;其余致命类别由 D2 AC-2 同类别 loader 级夹具承载 | -| out-of-scope | D1 呈现全域(生效条件 = D1 义务台账 A2×6/B2×4/B3×4/B4×5/B1×3 登记,缺项即 blocking)· B5 消费与可读形态 · D4/D5 音频教学(数据源 = 本节流水行)· C3 全部 provisional 数值(每次调参重跑 AC-35/36/37/39/40/44 对账族——D_ref × m_w × m_d × duration_d 禁独立调参)· A1 actuals p10 重跑 · 条款⑤护栏 playtest 观测面(弃图率雾板分层/速杀退化/零伤害死局遥测——B1 仅供遥测锚)· m_w 修订终值 · flag_miss 惩罚源路径 · C1/C2 真实供给 · 深度高光形态 · 事件外发载体 ADR · attempt 重试细节 | - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | `b1_default` 经 `--data-root` 注入干净加载 | 冒烟脚本读 SettlementTable | 八字段在位:segment_order ≡ 拍板序 `[grant, item_window, buff_debuff, item, combat, decay, verdict]`(结构定值恒等断言);effect_pool_map 四键逐一 = 定稿映射;clamp −100/+100、round_direction=floor;D_ref 仅域断言 [1,999]、P_pf 域断言 {100,200};source_label_map 键集 ⊇ B3 source_class ∪ {道具/判定扩展, enemy_action, flag_miss, hero_attack};同根跑 B4/B3/B2 默认根加载零跨表冲突诊断 | 规则 16 / schema 定稿 | -| AC-2 | segment_order 置换根 `b1_segorder_bad`(如 item_window 与 combat 互换) | 独立 headless 进程游戏通道加载(collect_only=false) | 进程非 0 退出且错误清单含 segment_order 类别(防实现乱序静默漂移的进程级落点) | 规则 16/4 | -| AC-3 | 映射含 `ghost_effect` 键根 `b1_poolmap_dangling` | 独立进程游戏通道加载 | 非 0 退出、错误含跨表悬空类别(引用型字段 dangling_ref_policy) | 规则 16 | -| AC-4 | SettlementTable schema 类直引实例 | `validate()` 作用于 p_perfect ∈ {99, 150, 1000} | 各含域错误类别(载体域 {100,200}——非整数倍数无运行时载体);p_perfect = 100 与 200 零诊断;腿 2:`b1_pperfect_oob` 独立进程加载 → 非 0 退出(manifest `pperfect_oob`) | 规则 16/13 | -| AC-5 | 全新 B1(Uninit)+ 真 A3(Idle)+ 真 B2/B3/B4 全新实例 + A1 桩登记首板 b_spawn + master=42 | `begin_battle(encounter)` | 步骤流/调用捕获全序恰一次:set_reload_gate(true) → B3 notify_battle_start → **encounter 骰(unit_count 区间定本战实际数量——遭遇随机化增补)** → B2 spawn(override 数量)→ A2 install_board + B4 roll_board → A3 notify_round_start(phase=Active);**encounter scope = +1**、reward_roll scope = +1、board_gen scope = +1(各恰一 scope);query_alive(enemy) = 本战实际数量个行值快照单位(默认根 unit_count=1 定值行骰退化为 u_c);A2 事件捕获含初始展开批;B3 query_active 双侧空 | 编排专章战斗开始序列 / 规则 16① / B4 义务⑥ / C3 修订批 X-6 | -| AC-6 | 构造至 A3 Waiting 且 last_round_end 可用(stopped 轮——经真 A2 `settle_batch([stop])` 到达) | 腿 1:结算事务受理;腿 2:装载层置换 {flag_judged 批, round_end} 两组到达先后分别驱动(捕获-重放,不增设 B1 注入 API) | 腿 1:触发判定只读 A3 相位与 last_round_end(事件捕获序 = A2 管线序,结果正常);腿 2:两遍结算步骤流逐行相同(到达先后不承载语义) | 规则 2 / A2 义务① | -| AC-7 | b_flag 满构造结算(挖掘 ≥1 奖励格 + 插 (1,4) hit 旗 + 停手收轮;σ 登记使奖励格含道具类身份) | 结算事务解析 | 步骤流行序全序断言:授予段行 < 窗口标记(open——段界锚)< close/skip < 效果行 < 道具行 < 伤害/蓄力行 < 衰减行 < 判定行;任一段缺行以段界锚与行类型域断言序(空段合法);窗口标记恒存在(零选择 = skip 恒登记);segment_order 表值经 AC-2 恒等拍板序——实现读表驱动非硬编码 | 规则 4 / B4 义务① / 规则 14 | -| AC-8 | b_batch 部分挖掘后 stopped 收轮、结算完成(判定行 = 继续) | 出口分发 | 回发捕获恰一条 notify_settlement_done(same_board) → A3 notify_round_start(Active、ap=AP_r 硬重置、rap 保留);A2 板状态延续(旗集/已开集不变);board_gen/reward_roll scope 计数器零变化 | 编排专章继续腿 / A3 Rule 5 | -| AC-9 | b_flag 登记构造轮(挖掘 n 格含 m₀ 雷格 + 插 f 旗含 h₀ hit) | 轮末结算;同轮事件批重复投递(装载层故障注入) | 每格受理恰一次:B4 grant 恰 n_safe 次、B2 ambush_grant_plan 恰 1 次、apply_effect(weaken) 恰 h₀ 次、apply_effect(ambush) 恰 granted 次;处理序 ≡ A2 cell_revealed/flag_judged 行主序(B3 义务①落地);重复投递 → 步骤流与容器终态 = 单次投递结果(缓冲去重);B3 不去重、B4 幂等仅兜底(诊断零"重复受理") | 规则 3/5 / B3 义务①② / B2 义务② / B4 义务② | -| AC-10 | σ 登记挖掘格身份含 buff 类与道具类各 ≥1(腿 1);b_spawn install 后首轮(初始展开 35 格已发生——channel=initial、reward_eligible=false)(腿 2) | 授予段解析 | 腿 1:buff 格 → apply_effect(effect_id, source={safe_cell, origin_cell, round_index})(六归因字段逐一 = 调用实参);道具格 → stock(item)(库存逐件来源 {cell, round} 可归);即时类当场兑付:instant_aoe = 逐存活敌 apply_damage(u, power) + 单条伤害行(target=all_enemies + count 字段)、instant_heal = clamp 回复 + 治疗行(满血 → "奖励未生效"行零兑付)——零 stock 零窗口;B4 只定"给哪行"、层数语义归 B3 合并(同轮双 buff 格 → 单实例 L=2);腿 2:grant/stock/apply_effect 捕获全零(R₀ 不入奖励库);channel 字段零特判(同板 chain/dig 格正常入库成对照) | 规则 5.1 / A2 义务② | -| AC-11 | σ 登记使同轮/邻轮 defense_up 达 M_a 层满 | 第 M_a+1 层授予受理(B3 apply 返回 false) | 产"奖励未生效"行:零折算、携带可聚合计数/批次字段、source 归因完整;B3 容器逐字不变(拒绝原子);连锁批量授予溢出 = 显式接受(b_chain 13 格批量腿:溢出件逐件入行、零转换补偿) | 规则 5.1 / B4 义务② / B3 义务⑧邻接 | -| AC-12 | b_flag 插 (1,4) hit 收轮(腿 1);续轮再停手(A2 重报 {(1,4), true})(腿 2);拔 (1,4) 重插再收轮(腿 3);AC-28 换图后新板同坐标旗靶(腿 4);插 (0,3) miss 旗收轮(腿 5) | 结算 | 腿 1:apply_effect(weaken, source={flag_hit, (1,4), round_index}) 恰一次 + 效果行携带 highlight 标记 + 资格消费入集合;腿 2:零 weaken 兑付、零明细行(重复兑付从未发生)+ debug 诊断可选、资格集合不变;腿 3:仍零兑付(资格以雷格实例为键);腿 4:兑付恢复(新实例资格重置);腿 5:"标旗未中"零值行恰 1 条(source=flag_miss、value=0、highlight=perfect_broken、聚合计数)+ 续轮重报零新增行(每雷实例一次去重)+ 换图新板重新产行 | 规则 5.2 / A2 义务③ / 规则 13 | -| AC-13 | b_spawn 挖尽未开 8 格触发 cleared + σ 登记清图身份(腿 1);σ 登记清图身份 = defense_up 且已满层(腿 2);AC-28 场景 refresh 图(腿 3) | 结算授予段 | 腿 1:grant_clear() 恰一次(同批次重调幂等兜底——诊断零新增)、兑付分流同 AC-10(source=clear_reward)、当轮窗口即可选用;腿 2:零兑付 + "奖励未生效"行 + 完美板高光行捕获零次(首份即零兑付不发高光;完美谓词仍成立,对账入账 = 实际兑付 0);对照腿:仅第二份被拒(首份落地)→ 高光行在案且 value = 首份实际当量 + "奖励未生效"行一条;腿 3:refresh 图 grant_clear 捕获零次(roll 照常、兑付不调) | 规则 5.3 / B4 义务③ / B3 OQ4 | -| AC-14 | b_flag 登记构造轮:单轮挖掘雷格 mines_r = 6(登记走位序列;cap = c_r = 4 表读值) | 结算授予段 | ambush_grant_plan(6, c_r) 恰 1 次 → {granted=4, overflow=2}(守恒);前 4 颗(事件规范序)逐颗 apply_effect(ambush, source={mine_hit, origin_cell, round_index})(B3 伏击池 L=4);overflow 2 颗逐颗产"溢出未生效"行(含来源 + 聚合计数);战斗段各敌伤害行 attach 分量 = 4×m_amb(池读值即时性);轮末衰减行 k 含伏击实例(dur=1 蒸发);重复投递判别同 AC-9 | 规则 6 / B2 义务②⑥ / B3 义务⑧ | -| AC-15 | 战斗中 hero 满血 + σ 登记库存含治疗包(腿 1);扮演 D1 强制提交满血治疗包(腿 2);提交多件 [刀₂, 刀₁] / 单件 / 零选择(腿 3);无库存轮(腿 4) | 结算到达窗口段 | 腿 1:窗口清单 = query_inventory 投影 + B1 组装 usable_now(治疗包 false——B1 读 B2 hero hp 判定,B4 诊断零"血量查询"新增);伤害道具恒 true(窗口打开时存活敌 ≥1);腿 2:"使用被拒"行 + 包 InStock 不变(use 未调);腿 3:多件 → 仅首件受理(违例诊断、刀₂生效刀₁不消耗);单件 → 生效;skip → 窗口标记 close/skip、段序零停顿、库存不变;腿 4:窗口标记照常 skip(呈现政策归 D1——数据面 = 窗口清单空) | 规则 7 / B4 义务④前半 / D1 义务②对侧 | -| AC-16 | begin_battle hero_hp = M_h − 2 + σ 登记库存含治疗包 ×2(power = p_i) | 窗口提交 [包₁, 包₂] | 仅包₁受理生效(治疗行 hp' = min(M_h−2+p_i, M_h)——部分回复钳满)、包₂零调用(InStock 不变)+ 编排违例诊断("窗口至多选用一件");满血守卫保留为纵深防御(跨结算场景仍可达:本结算被拒后下一结算窗口再判) | 规则 7/EC / B4 义务④ | -| AC-17 | 同轮两次 weaken 授予(互异 origin_cell)(腿 1);defense_up 行与 weaken 行同轮(腿 2);`enemy_multi_unit` 根同轮 weaken L=1(腿 3) | 增益/减益段解析 | 腿 1:效果行恰 2 条(按 apply_effect 调用流水展开、非按容器单实例),每行 origin_cell 逐一 = 授予值、effect_id=weaken、value = 该次授予贡献值(L×m_w 投影)、pool_value = 池合成值(两行各 −65 贡献、pool_value = −130——合成值不入 value 字段);腿 2:效果行 pool 字段经 effect_pool_map 自 effect_id 派生 = hero_defense / enemy_output;腿 3:全体存活敌伤害行均含减伤合成且 target 逐一可归(side-wide 多敌兼容读法) | 规则 8 / B3 义务③⑤⑦ | -| AC-18 | 同结算 weaken L=1 存活 + σ 登记库存含刀(腿 1);`enemy_multi_unit` 根 + σ 登记刀 ×3(每结算至多一件、跨结算序列)(腿 2);hp=2 残敌 + p_i=4 刀(腿 3) | 道具段 | 腿 1:伤害行 value = p_i 恒定、零乘区(分量字段无池修正项——"不吃任何 percent 修正"的行级判别);腿 2:每条伤害行 target = default_target() 返回(顺位最前存活敌)、击杀标记出现于目标 hp ≤ p_i 的件、[0] 死后下一结算顺延 [1]→[2]、击杀标记共 3 个;query_beat 冻结(指针冻结进流水);后续结算战斗段 query_alive 不含它、零行动行;腿 3:死、行 value = p_i、击杀标记布尔、无溢出量字段、零转移(下一件打 default_target 后继) | 规则 9 / B2 义务⑤ / B4 义务④ | -| AC-19 | hero 满血 + 库存治疗包(腿 1);AC-20 场景敌已全灭 + 满血 + 提交治疗包(对照腿) | 提交选择 | "使用被拒"行、零 use 调用(不烧包);满血守卫 = 表局部判定(max_hp 对比)、敌全灭构造下仍拦截(守卫不读存活集的不对称可判定形式);clamp 部分回复见 AC-16 | 规则 9 / B4 义务④ / EC | -| AC-20 | 单件制 + 窗口结构推论(窗口打开时存活敌 ≥1 ∧ 单件恒打顺位最前存活敌) | 负空间声明(违约路径不可由公开 API 构造) | 窗口提交的刀恒有目标——"已消耗未生效"行在单件制下不可达;零效果判定逻辑保留为防御分支(读 B2 存活集),恢复多件制时本 AC 随批复活;击杀标记断言由 AC-18 腿 2 承载 | 规则 9 / B4 义务④ / EC | -| AC-21 | encounter=(L_g,D_g) 单 goblin(腿 1);(L_a,D_a) 连续结算(腿 2);全结算 advance 捕获(腿 3);`enemy_multi_unit` 根(腿 4) | 战斗段解析 | 腿 1:调用捕获序 = query_attack → apply_damage → advance(每存活敌恰一次 advance)+ 衰减行前完成;腿 2:beat 轨迹 = p_e 序、每结算 advance 恰 1;腿 3:advance 捕获实参 ∈ 敌句柄集、零 hero 句柄(B2 对 hero 句柄拒绝为兜底);腿 4:行动/伤害行序 = 生成序且每行 target 字段可归至对应单位 | 规则 10 / B2 义务① | -| AC-22 | b_mine_walk 单雷轮(L=1)+ goblin attack(腿 1);登记构造轮 L_amb=2 + weaken L=1 同轮(腿 2);b_flag 双 hit 旗同轮(weaken L=2;非平凡前提 m_w ≤ −51——F0 修订回写后恒满足,不满足时 SKIP 标记)(腿 3);defense_up 叠满同结算 P_pool = 2×m_d(腿 4) | 战斗段攻击拍 | 腿 1:伤害行携带 {baseline=a_g, attach=m_amb, 终值}、source_class=enemy_action、target = 受击单位句柄;L=0 轮 attach=0(自然读值);腿 2:D' = floor(D_raw × (100+P_e)/100 × …) 按表读值推导;腿 3:效果行显合成值 2×m_w 与终值两端、伤害行 value=0、apply_damage 捕获零次、B2 hero hp 不变、诊断零新增;weaken dur=1 轮末蒸发(下轮恢复常态伤害);腿 4:现行 −30 下 P_pool = −60 域内、乘数 0.4 无 clamp 腿——D' = floor(D_raw × 0.4 × …) 按表读值推导(免伤轮现行可达路径 = 腿 3 weaken 饱和;地板恰边界读法 P_pool = −100 由 F2 判据函数输入断言承载——AC-37) | 规则 10 / F2 / F3 / B3 义务③ / EC | -| AC-23 | (L_a,D_a) 结算 1 attack 后结算 2 构造挖雷 ×1(L_amb=1)(腿 1);`enemy_multi_unit` 根同步轮转至 charge 拍(腿 2) | 战斗段(charge 拍) | 腿 1:蓄力行(数字兑现面)+ query_attack 读值零作用 + 零伤害行、hero hp 不变;授予段伏击授予行在案(先授予后蒸发对照);轮末衰减清池(下轮 attach=0);腿 2:恰 u_c_f 条蓄力行、零 apply_damage、hero 承伤 0(合法状态非错误) | 规则 10/EC / B2 EC8 对侧 | -| AC-24 | `enemy_multi_unit` 根 + begin_battle hero_hp = 4 直供 | 首结算战斗段(敌[0] attack 分量 ≥ 4) | 敌[0] 伤害行后 hero hp=0 → 短路:敌[1]/[2] 零行动行、零 advance 捕获、径入衰减段(照常)→ 判定行 = 战斗失败(hero 先判防御腿——双死结构不可达不构造,判定行次序字段可读);battle_over 序列触发 | 规则 10/12 / EC / B2 义务③ | -| AC-25 | `enemy_multi_unit` 根 + 登记轮 L_amb = 2(双雷) | 战斗段逐敌解析 | 敌[0]/敌[1]/敌[2] 伤害行 attach 分量均为 2×m_amb(共享、非均分/消耗——每敌 query_attack 读同一 L);中途无池写捕获 | 规则 10 / B2 F2 | -| AC-26 | 任一 AC 场景(腿 1);末图清图胜利结算(AC-13 腿 1 场景 + 敌已全灭构造)(腿 2);全 dur=1 上轮清空后的结算(腿 3) | 结算 | 腿 1:衰减行恰 1 条/结算(k 记入行值)、decay_round 调用捕获恰 1 次;腿 2:判定行 = 胜利之前衰减行在案(先兑付后衰减时序契约;battle_end 全清兜底使两序同终态、次序钉死为段序);腿 3:衰减行 k=0(合法零行/聚合零计数) | 规则 11 / B3 义务④⑥ | -| AC-27 | 敌全灭结算(腿 1);失败(腿 2);继续(腿 3) | 判定段 | 腿 1:判定行 = 战斗胜利 → battle_over 序列(AC-31);腿 2/3:见 AC-24/AC-8;判定行公共字段 + 终局行在案(胜负画面数据锚) | 规则 12 | -| AC-28 | b_spawn cleared 判定 + A1 桩登记板序列 [板₂](程序构造、坐标级登记)(腿 1);桩登记返回带非法产物标记板(腿 2) | 出口分发 / install | 腿 1:调用捕获全序恰一次:A2 retire_board → B4 retire_mapping → A1 generate(board_gen scope +1——attempt 重试零额外取号)→ A2 install_board → B4 roll_board(reward_roll scope +1——每图恰一次)→ notify_settlement_done(new_board) → notify_round_start;新板资格格 roll 照常、grant_clear 零调用;完美计数随 install 重置;腿 2:install accepted(编排不拒产物)→ B1 上抛玩家侧呈现请求(回发捕获含呈现请求事件 + 数据面 = 非法标记,形态归 D1);A2 install 拒绝(不变式违例)= fail-fast 上抛(程序级非玩家域) | 编排专章换图腿 / B4 义务⑥ / EC | -| AC-29 | Active 且 rap ≥ rap_refresh_cost(腿 1);同轮第二次提交(腿 2);第三次提交(腿 3);rap < cost(腿 4) | 扮演 D1 经 `refresh_board` 提交刷新 | 腿 1:A3 request_refresh → true、rap=0、phase 不变(无结算段、无 round_end)→ 换图全序恰一次(A2 retire → A1 generate → A2 install → B4 roll_board;board_gen/reward_roll scope 各 +1);同轮续挖可证新图;腿 2:第二次完整编排;腿 3:拒绝(resource_face——refresh_cap_per_round=2);腿 4:false、状态不变(非编排错误) | 编排专章 / A3 Rule 11/EC13/EC15 | -| AC-30 | stopped 轮与 ap_exhausted 轮(各构造)(腿 1);cleared 轮(腿 2) | 出口分发 | 腿 1:notify_settlement_done(same_board) 恰一条、new_board 回发零次、retire/generate/roll 捕获全零(本编排无刷新提交面);fail-fast 守卫半 = 自守 debug 断言(内部违约路径不可由公开 API 构造——负空间,契约源 = registry action_economy.rap_rules,存在性由 AC-43 扫描域 + 代码评审承载);腿 2:cleared ⇒ new_board 恰一(AC-28 全序——两腿合成契约全貌) | 编排专章 / A3 rap_rules / 强制检查点③ | -| AC-31 | 判定行 = 胜/负任一(腿 1);末层 victory 或 defeat(腿 2);清理序列注入重复调用(诊断注入构造)(腿 3) | battle_over 序列 / `level_clear()` / 清理中 | 腿 1:捕获全序恰一次:B4 retire_mapping → B2 despawn_all(query 双侧空)→ B3 notify_battle_end(query 双侧空)→ A3 notify_combat_end(phase=Idle、rap=0)→ set_reload_gate(false);clear_inventory 不在 battle_over 序列中(缺席本身为断言腿:battle_over 后 query_inventory 逐字不变);腿 2:clear_inventory 恰一次 + 返回清空前快照计数("剩余道具 ×N 随关卡结束清空"反馈行数据面;折算结构位归 C2);此后 stock/use → false + 诊断;腿 3:debug 诊断 + 序列剩余步骤照常完成(幂等守卫兜底 false);后续 begin_battle 正常受理(防半清理态泄漏尾腿) | 编排专章 battle_over/level_clear 腿 / B4 义务⑤ / EC | -| AC-32 | AC-5 战斗开始序列完成后(gate 捕获 = true 在案)(腿 1);AC-31 battle_over 完成后(腿 2) | 经 ConfigDB `reload()`(debug 构建) | 腿 1:返回 false、ConfigDB 值不变、config_reloaded 不发("战斗中真的被置位"由编排真调用承载);战斗中经测试通道换根直调 load_tables(collect_only=true) 读值不受门约束(通道区分);腿 2:reload() → true 且 config_reloaded 恰一次 | 规则 16 / D2 EC8 / 强制检查点① | -| AC-33 | 两套全新全栈实例(同 master=42、同根、同板登记序列、同 encounter);判别腿:仅窗口选择序列不同(同意图) | 同一意图序列 + 窗口选择序列驱动两遍(定长场景:含挖掘/连锁/插旗/停手/窗口选用/刷新换图至少各一) | 两遍步骤流逐行相同(行数/行序/全字段含 value 与归因——target/effect_id/pool_value 均为输入的确定函数,逐行相等断言域含之);判别腿:仅窗口选择序列不同 → 步骤流在窗口标记处分歧、其前逐行相同(窗口选择序列确为回放输入);确定性来源行为面:B1 全程零 RNG 调用(AC-43)+ 表值快照 + attempt 非 scope 事件 | 规则 15 / 强制检查点② / D2 AC-15 | -| AC-34 | AC-29 腿 2 连环刷图场景 | 任一结算回放切点取快照(master_seed + 双流 scope 计数器 + 意图序列 + 窗口选择序列) | 无在飞流实例跨界(切点时刻双流计数器 = 已完成 install 数);续玩快照恢复驱动 = 端到端集成冒烟 deferral(生效条件 = D3 实现) | 编排专章回放切点 / 规则 15 | -| AC-35 | b_flag 构造零误标 ∧ ≥1 标中(仅插 (1,4) hit 旗)→ 挖尽 cleared(腿 1);同构造 + 插 (0,3) miss 旗(腿 2);全板零旗 cleared(腿 3);AC-28 换图后新板零 flag_judged(腿 4);b_fog 雾内插旗(腿 5) | 清图兑付 / 结算 | 腿 1:高光行在案(value = 实际有效兑付当量)+ 清图奖励身份第二份兑付捕获恰一次(道具类身份 → stock 恰 2 次 / buff 类身份 → apply_effect 恰 2 次——玩家实得两件;grant_clear 本身仍恰 1 次;等价入账 = power × P_pf ÷ 100 记号推导);腿 2:无高光行、正常兑付 + "标旗未中"零值行在案(highlight=perfect_broken)(全有或全无谓词、无部分完美档);腿 3:无高光行(hit=true = 0 不满足谓词);腿 4:完美谓词域 = 本板自 install 起(跨图不累积——构造前板含误标 + 换图后新板零误标有标中 → 新板 cleared 触发高光,重置判别正腿);刷新图本身零 grant_clear 无兑付点;腿 5:雾内插旗计入误标(hit=false)→ 破完美(无变异分支) | 规则 13 / EC×2 | -| AC-36 | 默认根 + 登记构造(每活行一 B3 实例:defense_up L=1 / weaken L=1 / ambush L=1×k=1;clear_blast 经 grant_clear 快照) | 结算兑付读值(query_active 快照载荷 / grant_clear power)经统一换算式 E(·)(SettlementTable D_ref 读值) | E_inst 结论与登记对照表一致(F1 重算回执版):E_defense = \|m_d\|/100 × D_ref、E_attack = 0.50 × D_ref、E_weaken = \|m_w\|/100 × D_ref、E_ambush(k=1) = m_amb、E_clear = power ×(perfect ? P_pf ÷ 100 : 1)(真实双份——完美板两件实得、总当量 = 2×power;单一线性换算——各行共用同一 D_ref 读值);锚两腿断言:E_weaken > E_attack ∧ E_weaken ≥ E_dig 推导值(登记常数——重算批回执值);attack_up 活行:hero_offense 池映射在位 ∧ 主角先手攻击伤害行 hero_offense 消费点在案(F3⓪ 基础分量——规则 10 / F3 对账;attack_up 活行口径) | F1 / 规则 13 / B3 义务⑤ | -| AC-37 | F2 闭合判据函数(语义映射 → 池加算 → clamp → 乘区 → floor)+ 登记构造 | 以登记构造跑 F2 三例读法(weaken AP 界 8×m_w / 表界 16×m_w / defense_up 叠满 2×m_d——全表读值记号) | 判据结论逐一与 F2 表一致:两越域例 clamp 后 M=0;叠满例 M = 1 + 2×m_d/100 域内(现行 −60 → 0.4,无 clamp 腿);地板恰边界读法(M=0 未越域)以判据函数对 −100 输入断言承载;地板交叉层数 = ⌈100/\|m_w\|⌉ = 2(表读值推导);取整方向 = floor 单一规则(半值例断言);行为级交叉锚 = AC-22 腿 3 | F2 / B3 义务③ | -| AC-38 | F3 判据函数(三分支全序 + 负值禁令 + 死亡边界)+ 登记例(goblin L=2 → weaken → floor 3 记号 / knife_adv p_i vs hp=6 残敌 / D'=0 分支) | 以登记例跑判据 | 结论与 F3 一致:零负值(任意输入组合判据函数输出域 ≥ 0——参数化扫描)、Dead ⇔ hp=0 零负 hp 中间态、hero 先判优先级;行为级交叉锚 = AC-18/20/22/24 | F3 / B2 义务③ | -| AC-39 | F4 闭合判据函数 + 登记常数(C3 v3 行值总表:10×10 d0.25 → \|M\|=23/\|S\|=77、12×12 d0.25 → \|M\|=34/\|S\|=110;ι = 行 target 代 p10 乐观代理;m_d/D_a、m_amb、D_ref 全表读值/登记推导) | 对 L1/L2 两板形与满配语境(unit_count=3)跑配对主式 | 结论与登记一致(双口径断言——重算批回执):L1 裕度 ≈0.48× ✗ / L2 ≈0.47× ✗(锚行口径;期望口径 E_dig=4.5 → ≈0.60×/0.58× 同向破线——双口径登记)/ 满配语境 ≈0.16× 深度破线 ✗ → C3 曲线级约束输出(V_safe 侧杠杆重议——联动网络,F4 结论④);适用域守卫腿:登记构造 n_s < 1(残余集为空)→ 主式不评估、信息端平凡腿接管;信息端平凡腿 P(安全)=1 → V_safe > 0 恒真;registry clause3_supply 重算回执存在性断言;A1 actuals p10 交付后强制重跑 | F4 / B2 义务④ / 强制检查点条款③ | -| AC-40 | F5 闭合判据函数(修后模型:n_s = (1−ι)×\|S\|、E[踩雷] = \|M\|×n_s/(n_s+1)、X_res = E[踩雷]×V_mine、Δr = ⌈(n_s+E[踩雷])÷AP_r⌉、C_eff = C×(perfect ? P_pf ÷ 100 : 1))+ 登记常数(v3 曲线板形同 AC-39 / ι / E_dig 格子池加权推导 / C=clear_blast power / P_pf / AP_r / fog_burden_ratio 登记代表值) | 主判式对 L1 无雾态/L2 两板形 × {unit_count=1, unit_count=3} 四态组合 × {完美/非完美} 分支跑 | 结论与登记约束包一致(重算批回执):L1 −28.7/+11.3、L2 −67.4/−27.4、L1 满配 −153.2/−113.2、L2 满配 −257.1/−217.1——条款⑤未闭合(verdict = 未证明的约束生成器;L1 完美翻正腿在案);实现率折减腿(E_dig×0.6)读数在案(L1 −45.3/−5.3、L2 −91.2/−51.2);保守地板需求输出(L1 ≥ 110.3 / L2 ≥ 166.8);停手侧 RAP 零价假设登记存在性(判据函数输入分解可读);护栏 A/B 行断言 = 登记存在性 + 旧值链待重推注记(护栏 A 方向性复核 −1.1 越下界 / 护栏 B C=40 越线——W2 三选一裁决随 C3 收口批,本 AC 不断言其数值);A4 三腿入账核对(雷险消解/信息双向/AP 腿)逐腿在输入分解中可读;全条为对账断言——非 playtest | F5 / 强制检查点条款⑤ | -| AC-41 | 默认根加载 | 脚本解析 `design/registry/entities.yaml` | ① status_effect.anchor_warning 含 F0 裁决回执注记(瞬时口径 / 值域 [60,85] 默认 65 / 交叉层数 2 / attack_up 参照回迁口径重跑兑现——重算批注记);② weaken 值域修订注记 + clause3_supply.direction_precheck 闭合回执注记(含 2026-09-14 重算回执——现行值链破线读数);③ clause5_dominance 注记存在(含 C3 裁决 + 重算回执);④ settlement_table 条目存在且十二字段名与 SettlementTable schema 逐一相等(pool_clamp_lo/hi 两字段 + 充能三参数与 armor_effectiveness——W3 字段);⑤ knob 活值(D_ref/P_pf/m_w/m_d)不作定值对账 | F0(registry 对账形态)/ 规则 16 / 对账清单 | -| AC-42 | 全部 AC 场景步骤流捕获全集(冒烟汇总断言) | 逐行校验 | type ∈ 封闭枚举 13 类(封闭枚举即负空间:新增行类型 = 接口漂移);每行公共字段 type/source_class/origin_cell/round_index/display_name/value/highlight? 全在(origin_cell 板级行可空;highlight 可空枚举 {flag_hit, clear_reward_h2, perfect_broken});行类型特有字段:伤害行/道具行(生效)携 target、效果行携 effect_id + pool_value 且 value = 单次授予贡献值语义;source_class 值域 ⊆ source_label_map 键集 ∪ 判定/道具扩展 ∪ {enemy_action, flag_miss}(新增 = 接口漂移的表侧闸);无来源行 = 断言失败(P2 兜底的机器可判定形式);未生效四类 + 标旗未中行各携带聚合计数/批次字段(非空) | 规则 14 | -| AC-43 | B1 文件集(编排器/判据函数/步骤流/冒烟脚本/夹具规格)与全项目非 tests/ 文件集 | 静态扫描 | ① 零 randomize()/RandomNumberGenerator/自建 RNG;② 零 extends Control/Node2D、零 .tscn preload + AC-5 headless 实跑通过(合成判定);③ 结算路径 await 零命中(逐字面 warning 级 + 人工复核);④ 编排唯一性单向扫描:全项目非 tests/ 文件集中 B2/B3/B4 API 符号命中文件 ⊆ B1 文件集;⑤ D2 AC-14 人工三要素字面量扫描(行为级硬证据 = AC-22/36/39/40 全表读值推导 + AC-41 registry 对账);⑥ A2/B3/B4 相互直调零命中 | 规则 1 / 编排不变式③ | -| AC-44 | b1_default + 登记构造轮(挖掘 ≥10 安全格〔含连锁——cap 腿 >8〕+ 首次标中旗 2 枚 + 目标甲型三腿:goblin none / bugbear a / ogre_chief b;attack_up 授予 ×1 腿与非授予腿对照) | 结算战斗段主角先手攻击(表读值记号:da/ca/dbf/甲效矩阵) | 三分量读法逐腿与 F6 一致:A 池 = min(开格数×da, ca)、B 池 = 首标数×dbf;base = floor(atk×(1+P_offense/100))、dmg_a/b = floor(池×甲效/100)、D_hero = 三分量相加(表读值推导不写死);甲效三腿读数 = 特化 ×1.5 / 无甲 ×1.0 / 对位 ×0.5(甲B 对策 = dmg_b 腿——C3 联动网络 #6);attack_up 零泄漏腿:P_offense 变更只移动 base、A/B 分量逐字不变;敌方侧 percent 池零作用(hero→敌方向);cap 截断腿:15 格轮 A 池 = ca(截断入诊断计数、零明细行);轮末清零腿:下一结算 A/B 池 = 0;明细行 {baseline, attach} 分量可还原(充能池公开读值) | F6 / W3 / C3 联动网络 #6 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按 v2 骨架重排(设计目的/系统范围/核心循环/领域章节/依赖与输出/P0 闭环/P1·P2 后置/调参表/验收标准)——设计推演(F0–F6 推导、候选取舍、体验锚点论证)与审计元数据(复核注记/对账登记义务清单/AC 覆盖矩阵/缺口预检/开放悬案)迁出至 `design/gdd/analysis/b1-settlement.md`;规则/数值/AC/EC/依赖零变更,AC 编号沿用 | -| 跨评审 B1 重算批 | 2026-09-14 | /review-all-gdds 🔴-1 后半(registry 同批重登回执):**F0/F1/F4/F5 按现行三输入重推**(duration=1〔两级奖励批〕、m_d=−30〔减伤墙批〕、C3 v3 曲线 d0.25/t0.88 换锚——原 A1 参考行退役)——**条款③两参考板形翻为破线**(锚行 ≈0.48×/0.47×、期望口径 E_dig=4.5 → 0.60×/0.58×;满配 ≈0.16×),旧"通过"回执(≈2.0×/2.6×)退役为历史记录、破线升格 C3 曲线级约束(V_safe 侧杠杆重议——禁独立调参联动网络);E_dig 重推 7.2→4.5(格子池加权,注入池不摊入)· 条款⑤四态重推(L1 −28.7/+11.3 等;保守地板需求 110.3/166.8,C3 裁决②维持)· **F1 对照表按现行行集重登**(两级行值 8/16/40 + 注入池 + clear_blast;attack_up 死行注记清除——与 Core Rule 10 先手攻击对账;锚对照实物改 attack_up 行〔registry 回迁口径重跑兑现〕)· **F6 充能与护甲克制结算规格**(W3——累积时点/单轮 cap/不吃 percent/逐分量甲效查表 floor + AC-44 + F1 对照两行)· W6 挖掘期刷新改**每轮 cap 2**(RoundStart 重置——A3/registry/D1 同口径)· defense_up.magnitude/duration 纳入禁独立调参联动网络 · AC-22/36/37/39/40/41 改写 · 护栏 A/B 读数挂旧值链注记(W2 复核随 C3 收口批)· 悬案 9/缺口预检 3·7 闭合 · 核心规则表增依据列(lint R8 引用列迁移) | -| C3 修订批回写 | 2026-09-14 | /design-review C3 修订批(X-6 回执,registry 同批):战斗开始序列增 **encounter 掷骰步**(RngService 封闭流恰一 scope——unit_count 区间骰定本战实际数量,spawn 增 override 参数 n)· Core Rule 1 零随机扩界注记(实例化骰在结算步流之外,可回放性不受影响)· AC-5 增 encounter scope 腿 · SettlementTable +4 字段(damage_a_per_cell / damage_a_cap / damage_b_per_flag / armor_effectiveness——护甲克制批转正,机制与结算归 B1、C3 投值)· 条款⑤ C3 裁决回执行(约束包② 采信 + clear_blast C=40 缺口重推 6.1/51.8)· 敌种键更名 goblin/bugbear(DND 批对齐) | -| v1.1-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;散文/枚举/边界情况/AC 转表格;流程转字符画;公式、Variables 与验算数据全保留;语义与 Rev 1 及后续拍板批对齐,零规则变更 | -| D4 修订 | 2026-09-12 | 刷新决策前移挖掘期:新增"挖掘期刷新"出口(refresh_board 编排——request_refresh 扣费 → 换图全序,无结算段、轮次不终结),原 Waiting 期刷新代理调用弃用 | -| 2026-09-11 拍板批 | 2026-09-11 | 主角先手攻击(hero_attack 来源 + F3⓪)、两级奖励裁决(instant_aoe/instant_heal 当场兑付)、道具窗口单件制(>1 件 = 编排违例取首件)、库存关内延续(battle_over 不清库、新增关卡末 level_clear 清库编排) | -| Rev 1 | 2026-09-10 | design-review 8 项 blocking 核销:完美排雷落真实双份交付载体 + 高光行有效兑付语义/零兑付降级;条款⑤计价模型重推为挖穿残余池口径、verdict 翻转 → C3/B4 约束包 + 多敌验算腿 + ι→1 域守卫 + 护栏 B 输入登记与双读数;流水协议 target/effect_id/pool_value 字段分层 + enemy_action/flag_miss 来源枚举;hit=false"标旗未中"零值行(每雷实例一次去重);P_perfect ÷100 换算成文 + 载体域收窄 {100,200};AC-18 腿 2 改写;F4 V_safe 标签更正 + 期望口径敏感性读数;clamp 统一八字段——明细见 reviews/b1-settlement-review-log.md | -| v1 | 2026-09-10 | 一次会话定稿:F0–F5 + 43 条 AC + 23 条上游义务落位;F0 归一口径裁决(每结算瞬时当量,m_w 值域 [60,85]/默认 −65)与高光双落(完美排雷 / 标中旗标记)即定 | diff --git a/design/archive/gdd-2026-09-14/b2-enemy-system.md b/design/archive/gdd-2026-09-14/b2-enemy-system.md deleted file mode 100644 index 06e50e03..00000000 --- a/design/archive/gdd-2026-09-14/b2-enemy-system.md +++ /dev/null @@ -1,362 +0,0 @@ -# B2 敌人系统(Enemy System / 战斗单位系统) - -> **状态**:Approved · **版本**:v2 · 2026-09-14 -> **一句话**:定义战斗双方是谁、多强、带什么词条、如何受伤与死亡——雷的代价的收件人。 -> **推演件**:`design/gdd/analysis/b2-enemy-system.md`(本文件只收结论,理由在那里) - -## 设计目的 - -B2 是战斗域单位层(Layer 2 Core · MVP):持有 EnemyTable/HeroTable 回填权,承载主角与敌人共用的战斗单位接口。缺本系统则踩雷优势无受益者、胜负判定无主体、难度曲线无施加对象。 - -1. 对面是个看得懂的对手——威胁可推测、可归因、可拆解,不是一个血条。 -2. 它弓起背,下一拍是重击——读怪推理进入挖掘决策。 -3. 它强是我喂的,它弱是我拆的——伏击与削弱落在同一个它身上。 -4. 越下越险——深层敌人更凶,给下探氛围一个可见刻度。 - -反向护栏:威胁绝不能是无源暗账——玩家说不出"它为什么变强 / 这一拳为什么这么重"即归因链失职。 - -## 系统范围 - -负责: - -- 单位状态(hp/max_hp/存活/行为环指针)与查询/受击/推进接口 -- EnemyTable/HeroTable schema 与行回填(行键 (level_index, node_depth, enemy_id)) -- 行为环语义与目标选择规则(固定顺位) -- 伏击量纲定稿与 advantage_per_round_cap 表值(B1 条款 3 对账供给) - -不负责: - -- 结算编排与伤害消费语义(B1 SettlementTable) -- 状态实例容器(B3) -- 奖励内容与掉落(B4) -- 棋盘规则(A1/A2) -- 单位成长曲线与难度修饰(C3) -- 遭遇构成与跨战斗 HP 持久性(C1/C2) -- 呈现(D1/B5/D5) -- 单位/词条类结构与事件载体实现(实现期 ADR 域) - -硬约束:零随机(rng_service 流封闭)· 零 UI 依赖 · 零主动事件订阅 · 悬空引用致命、零软回退 · 行为环敌单位专属 · 单位接口调用权集中归 B1 · 胜利路径 = 基础攻击(恒在)+ B4 奖励侧规划面伤害共同承载——"敌人全灭 → 战斗胜利"可判定。 - -## 核心循环 - -``` -战斗开始(B1 编排调用——B2 编排被动,调用权集中归 B1) - ① 解析遭遇行 (level_index, node_depth) + enemy_id 精确匹配(悬空致命) - ② 行值快照 → 实例化本战 n 个敌单位(行主序生成序)+ 主角(hp 入参);指针指向环首 -每次结算(B1 驱动;每存活敌单位恰一次 advance,主角无环不在推进域) - ⓪ 主角先手攻击 → apply_damage(顺位最前存活敌) - ① 兑付读值 query_attack(u, L, m_amb) → {baseline, attach, total} - ② 受击上报 apply_damage(hero, 终值)——调用序钉死:倒序会读到下一拍 - ③ 推进 advance(u)——存活才推进(先作用后推进) -当前拍作用:attack = atk 点伤害 · charge = 空拍不兑付 · heavy = atk × 倍率 -轮到前被杀 → 本拍不打、指针冻结(MVP 无复活 → 永久冻结) -battle_over(B1 调 despawn_all)→ 全部单位消亡,不跨战斗 -``` - -| 出口 | 触发 | 动作/去向 | 约束 | -|---|---|---|---| -| 单位死亡 | hp = 0(判定时机归 B1) | 移出顺位、不再作用、不计入"未灭" | 不可逆(MVP 无复活);Dead 句柄保留只读可查(query_beat 冻结值) | -| 敌全灭 | 存活敌集 = ∅ | "敌人全灭"成立 → B1 胜利判定素材;单体/AOE 无有效目标;敌侧伏击池随轮末衰减自然清空 | 判定逻辑归 B1 | -| 主角死亡 | hero hp = 0 | 战斗失败判定素材(判定时机归 B1) | battle_over → 全部单位 Despawned——不存在"主角死后敌继续攻击"的中间态 | -| battle_over | B1 编排 despawn_all | 全部单位状态消亡、不跨战斗;唯一出口 = 重新 spawn | 重复 despawn_all → false + 诊断;Despawned 为逻辑失效态(查询空 + 诊断) | - -## 单位与状态 - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| Unspawned | 构造后未实例化 | 无接口副作用;唯一出口 = B1 编排实例化 | -| Alive | 实例化(行值快照 / hp 入参) | 可被指定目标(顺位)、按行为环作用、计入全灭判定;受击 hp 递减 | -| Dead | hp = 0(判定时机归 B1) | 移出顺位、不再作用、不计入"未灭";不可逆;句柄保留只读可查(query_beat 冻结值) | -| Despawned | battle_over(B1 despawn_all) | 逻辑失效态——失效句柄查询返回空 + 诊断、作用接口拒绝;唯一出口 = 重新 spawn | - -不变式(debug 断言口径):hp ∈ [0, max_hp];敌单位数 = 本战实例化数(战斗内不增);行为环指针 ∈ [0, 环长);违规 = debug 断言中止(进程致命保留给 D2 数据通道)。 - -规则: - -1. **主角和敌人共用同一套受伤与死亡规则**:战斗场上恰两类单位(主角一个、敌人若干),共用同一套身体语义——每单位有当前血量与上限,挨打血量往下减,到 0 即死亡;超上限/负数/溢杀与"何时算死"归 B1 结算公式域裁决,B2 只提供受击上报与状态查询接口、如实记账。主角血量归零 = 失败判定素材、敌人全部归零 = 胜利判定素材,判定本身归 B1。 -2. **敌人系统自己不主动做事,一切等结算编排来调**:B2 不产生随机数、不碰界面、不订阅任何事件——挖雷、插旗等棋盘事实经 B1 转化后由它调用;B2 只摆出查状态(血量/当前拍/顺位/存活)与受动作(受击/推进/消亡)两组能力,什么时候调、按什么顺序调全归 B1。 - -## 敌人构成与名录 - -规则: - -1. **一场战斗 1–3 个同种敌人,敌方效果对全体生效**:MVP 每场战斗 1–3 个敌人,全部同种同属性——同一 EnemyTable 行实例化、按行主序排生成序;战斗中敌人只减不增(不做召唤/增援/分裂——EC5,出现即 debug 断言中止)。敌方增益/减益 side-wide:作用于所有存活敌人、层数进一个共享池(F2 池共享不消耗;B3 现接口零改动兼容);"只作用于某一个敌人"的单体寻址暂不开放,target_ref 登记为 B3 扩展位义务(首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决)。 -2. **敌种按关卡坐标存放,每个坐标只出一种**:EnemyTable 以(关卡序号 × 节点深度)为坐标存放敌人,每行集恰一敌种(行集内 enemy_id 唯一 = 表结构校验,配出两种加载期致命——既无"同点随机挑一种"的选择规则,也无引用悬空风险);同一关内随深度换敌种合法;"同深度多敌种怎么选"归 C1/C3(预留结构位);精英/Boss 修饰在现键结构下无编码位(预登记 OQ7,C1 定稿时强制核对);名录扩容归垂直切片/Alpha。 - -| 敌种 | 行为环 | armor_type | 说明 | -|---|---|---|---| -| goblin(地精) | [attack](环长 1,mod 1 恒等) | none | 每拍 attack、无自然空窗(兑付率 ρ=1——EC10) | -| bugbear(熊地精) | [attack, charge, heavy](三拍环) | a | heavy_multiplier = 2 | -| ogre_chief(食人魔酋长) | [attack, attack, charge, heavy](四拍 Boss 环) | b | heavy_multiplier = 2 | - -现行名录 = {goblin, bugbear, ogre_chief} 三敌种(以 registry `enemy.mvp_content` 为准);各行 hp/atk/unit_count 数值全部 provisional、曲线调参所有权归 C3;遭遇分布调参所有权归难度域(防多样性无护栏,勿照抄任何示例分布)。设计意图:名录小、坐标单敌种——加载期就把配置错误杀死,选择规则留给遭遇域。 - -## 行为环 - -规则: - -1. **敌人按排好的剧本轮流出招,走到哪一拍零随机**:每种敌人一条行为环——战斗开始指向第一步,之后每结算一次走一格、先把当前拍的招打出去再走格(先作用后推进);环尾回环首;跨轮次、跨扫雷图延续(EC11,除 despawn_all 外无任何重置入口);轮到它之前被打死 → 本拍不出手、指针就地冻结(死亡即不动手——EC1;MVP 无复活 → 永久冻结);行动完成后才死 → 已行动已推进;同种敌人永远同拍(同步性质——EC2);heavy 拍前被杀 → 重击永不兑现(抢杀窗口——EC9)。全程零随机,走到哪一拍由结算次数唯一决定。行为环敌单位专属:主角无行为环,对主角调环接口一律拒绝(false / 空 + 诊断)。MVP 只启用 attack/charge/heavy 三种拍,后四类为预留语义位、配进表会被校验拒绝(fail-fast;启用走本 GDD 修订非调参——枚举封闭性)。 - -| 值 | MVP 状态 | 语义 | -|---|---|---| -| attack | 实现 | 本结算对主角造成 atk 点伤害 | -| charge | 实现 | 本结算不作用——威胁空拍、规划窗口;不兑付伏击(不读池) | -| heavy | 实现 | atk × heavy_multiplier | -| guard | 预留(校验拒绝) | 自防 | -| boost | 预留(校验拒绝) | 自体强化 | -| hinder | 预留(校验拒绝) | 妨害雷图——敌方向棋盘施加变异类妨害 | -| summon | 预留(校验拒绝) | 召唤增援 | - -| 项 | 细则 | -|---|---| -| 指针与推进 | 战斗开始 beat = pattern[0]、steps = 0;每次结算推进一格——先作用后推进(B3"先兑付后衰减"同款时序哲学);轮到该单位时仍存活才行动并推进(每结算恰一次 = B1 义务①) | -| 死亡口径 | 轮到前被杀 → 本拍不打、指针冻结(F1 承载);行动完成后才死 → 已行动已推进 | -| 回绕与延续 | 环尾回环首;指针 ∈ [0, 环长),环长 1(goblin)退化为恒等;跨轮次、跨扫雷图延续;battle_over 随单位消亡,除 despawn_all 外无重置入口 | -| 确定性与专属域 | 零随机——环推进是结算次数的确定函数(rng_service 流封闭);主角无行为环,advance/query_beat 等环接口对主角句柄一律拒绝(false / 空 + 诊断) | -| 实现域 | pattern 环长 [1, 8];MVP 校验域 = {attack, charge, heavy};EnemyTable.pattern 校验拒绝预留值(fail-fast,A1 solver_rules 冻结先例) | - -设计意图:确定性环 = 可学习性来源——读怪收益(抢在重击前击杀)由此产生。 - -## 伏击 - -规则: - -1. **每踩一颗雷敌方叠一层伏击——一轮封顶、超出可见不生效**:挖开雷格时敌方全体获得一层"伏击"——MVP 伏击清单只有伏击这一条(StatusEffectTable mine_hit 来源的唯一效果行;将来加新词条要 B3 加行并连锁更新锚点,不属于 MVP)。转化路径:棋盘上报"挖到雷"→ B1 转成一次伏击施加(作用全体敌人、共享层数池),每颗雷恰转化一次(B1 义务②)。单轮授予上限 = cap 行值:上限内逐颗叠加;达到上限后多踩的雷不生效,但逐颗记一行"溢出未生效"结算明细(B1 义务⑥)——惩罚不静默蒸发。 -2. **一层伏击 = 敌人每次攻击多打 3 点固定伤害**:一层伏击 = 每次攻击类行为(普攻或重击)额外附加 m_amb(provisional 3)点伤害,按主角血量点数计;附加是后置加法、不进重击倍乘(倍率只乘基础伤害);蓄力拍不出手、不附加(charge 不读池——EC8:蓄力轮授予的伏击层当轮全部蒸发,合法推论 + 读怪奖励,D5 教学条目)。伏击只活一轮——每轮结算清零、没有跨轮存量(dur=1,池衰减归 B3),跨轮累计没有表值上界;同结算内授予先于兑付(EC17——本轮踩的雷当轮即兑付,若该轮有攻击拍;读值语义归 B2、次序归 B1 义务①②)。 - -| 单轮伏击上限(cap 行值) | 行为 | -|---|---| -| 默认 4 | 前 4 颗雷各叠一层;第 5 颗起每颗记一行"溢出未生效"明细 | -| 调到 8 及以上 | 单轮雷数至多 8 颗、达不到上限——溢出协议自然不可达 | -| 0 | 该行敌种免疫伏击——每颗雷都记"溢出未生效",全部可见、全部无效(EC6;该遭遇条款 3 右臂仅剩基线伤) | - -设计意图:惩罚有源可溯、有顶可见——cap 默认 4 是单轮 5–8 雷灾难轮(EC7)的反灾难护栏。 - -## 目标选择与读怪 - -规则: - -1. **敌方打主角不用挑,玩家侧永远先打排最前的敌人**:敌方一侧没有选择可言——所有存活敌人各自按当前拍作用于主角(己方唯一单位,天然唯一目标)。玩家/道具一侧用固定顺位:单体效果默认打生成序最前的存活敌人,它死了顺延到下一个;范围效果(AOE)打全体存活敌人,同样无需选择;unit_count = 1 时顺位顺延与 AOE 分流无消费者、AOE ≡ 单体——合法退化非错误(EC15)。道具自带"指定目标"语义的扩展归 B4/结算域;顺位必须对玩家可读——"下一个被打的是谁"要能推测出来(D1 义务③)。 -2. **敌人要出什么招靠看图推测,不直接报数字**:界面不直接显示敌人下一拍的行为与数值——威胁靠看图推测(它弓起背,下一拍就是重击);即将执行的一拍在挖掘阶段全程亮出;映射每局恒定、禁止重掷(否则读怪退化成猜怪);精确数字只在结算明细兑现。线索清单与图像规格归 D1/B5,映射键 = enemy_id(B3 effect_id→icon 同款契约);MVP 读怪对象最长 3 拍环,学习成本低。 - -| # | 规格 | 内容 | -|---|---|---| -| ① | 图像↔行为映射稳定可学 | 同一敌种同一行为恒同一视觉状态(如 bugbear 蓄力拍 = 蓄力姿态) | -| ② | 形态暗示强度 | 敌种形态承载强度档位与环长的直觉编码("大个子多半有重击"式) | -| ③ | 映射每 run 恒定 | 禁止重掷——否则"读怪"退化"猜怪";映射键 = enemy_id | -| ④ | 精确数值在结算明细兑现 | 预告面是图像、数字面是明细 | -| ⑤ | 预告时序锁定 | 视觉状态呈现即将执行的一拍(当前拍预告)——挖掘阶段全程可见;结算时不另设独立意图播片(结算明细是数字兑现面、非意图预告面) | - -设计意图:读怪是规划素材;映射重掷 = 读怪退化成猜怪(P1 裁剪判据)。 - -## 主角与实例化 - -规则: - -1. **主角数值在英雄表里——血量上限加恒在的基础攻击**:主角战斗数值单独放一张全局单行的 HeroTable(B2 是回填 owner,走 D2 接口漂移规则回写),max_hp 与 atk 两字段。基础攻击恒存在、不许为 0——零基线乘任何百分比增益恒为零,这个死锁从数据层就进不来(atk = 0 加载期校验拒绝)。每次结算的战斗段主角先手攻击顺位最前的存活敌人——先于敌方行动;攻击是固定动作、不是行为环一拍;伤害算式/乘区/明细行协议归 B1 战斗段。attack_up(+50 percent)的唯一消费面就是这次先手攻击;道具伤害是恒定表值、不吃修正。战斗开始血量由编排方入参供给(越界拒绝——EC16:> max_hp 或 ≤ 0 → false + 诊断、不留半实例化;MVP 冒烟以血量上限入参),跨战斗是否保留归 C1/C2;解锁成长归 C4、曲线调参归 C3。胜利路径 = 基础攻击 + 奖励侧规划面伤害共同兑付"敌人全灭 → 战斗胜利",每一分伤害逐行标注来源(hero_attack / 道具逐件实例)。 -2. **开战按坐标读表生成敌人,数值是生成那一刻的快照**:战斗开始时编排方给出遭遇坐标(关卡序号 + 节点深度),B2 据此从 EnemyTable 精确匹配一行(D2 R1 进度键 floor + enemy_id 精确匹配,悬空致命、坐标越界前置守卫——EC13/EC14 走 D2 通道),实例化"本战实际数量 n"个敌单位——n 由 B1 开战掷的 encounter 骰从数量区间 [unit_count, unit_count_max] 定出(定值行取表值);主角同时以血量入参生成。实例化拿到的是当时表值的快照:之后热重载改表,已生成单位一概不受影响(EC12,B3 EC9 先例)。难度成长走双通道:表值随坐标加深而变 + C3 整体修饰——修饰施加点 = 行值快照之前套乘,MVP 难度表为空、零修饰(registry `difficulty_table`,算式归 C3);B2 一律按实例化后的数值运作。 - -## 数据表 Schema - -### EnemyTable(D2 承载,键 (level_index, node_depth, enemy_id),B2 回填 owner) - -进度键 floor(D2 R1)+ 实体键精确匹配;每行集恰一敌种(表结构校验,违规加载期致命);本表是进度成长表(A1 BoardGenTable 同型,无 Rule 4 豁免);表非空(D2 Rule 6)。 - -| 字段 | 类型/范围 | 语义 | -|---|---|---| -| enemy_id | String(行集内主键) | 实体键精确匹配(D2 Rule 4);意图视觉映射键 | -| display_name | String | 图例/HUD/明细用名(本地化归 D6) | -| unit_count | int [1, 3] | 遭遇区间下界(knob;区间 [unit_count, unit_count_max] 经 B1 encounter 骰定本战实际数量) | -| unit_count_max | int [unit_count, 3],可省略 | 遭遇区间上界(缺省 = 定值,旧行零迁移) | -| armor_type | enum {none, a, b},缺省 none | 护甲类型(克制矩阵 = SettlementTable.armor_effectiveness;MVP 映射 goblin=none / bugbear=a / ogre_chief=b) | -| hp | int [1, 999] | 单位最大生命基线(knob;难度修饰前) | -| atk | int [0, 999] | 攻击基线(knob;0 合法 = 纯伏击伤敌种) | -| heavy_multiplier | int [1, 16] | heavy 倍率(knob;无 heavy 拍的敌种不消费——非校验项,B3 max_stack 先例) | -| pattern | StringList(环长 [1, 8]) | 行为环(元素 ∈ {attack, charge, heavy} 为 MVP 校验域;预留值校验拒绝) | -| advantage_per_round_cap | int [0, 16] | 单轮伏击授予上限(knob,默认 4 定稿;条款 3 供给表值;0 = 免疫伏击的合法极端) | - -### HeroTable(D2 新增 schema 行,单行全局,B2 回填 owner) - -主角不随关卡自动成长(成长 = 天赋 C4 / 奖励侧);Rule 4 豁免同 ActionEconomyTable 先例。 - -| 字段 | 类型/范围 | 语义 | -|---|---|---| -| max_hp | int [1, 999] | 主角最大生命(knob,MVP 值 provisional 出处待查) | -| atk | int [1, 999] | 基础攻击(knob,MVP = 6 原型锚 provisional 归 C3;0 = 加载期校验拒绝——零基线死锁自 schema 层杜绝) | - -## 数值公式(F1–F4 结论) - -全部公式零随机、同输入恒同输出(可回放前提)。术语:拍 = 行为环里的一格行动;伏击池 = 敌方侧共享的伏击层数(本轮踩几颗雷就几层,轮末清零);溢出 = 单轮踩雷超过 cap 的部分(转化为明细行可见、不生效)。推导与论证见 analysis 件。 - -### F1 行为环推进(ring_advance) - -**结论**:beat(u) = pattern[steps_u mod 环长]、行动完成后 steps_u + 1;指针恒 ∈ [0, 环长)、环长 1 退化为恒等;死亡即不动手——轮到前被杀本拍不打、步数冻结(永久);同种单位同指环首且每结算各恰推进一次 ⇒ 存活者永远同拍(同步性质定理)。 - -``` -beat(u) = pattern[steps_u mod 环长] 行动前读拍;战斗开始 steps_u = 0(指向环首) -steps_u' = steps_u + 1 行动完成后推进(先作用后推进) -轮到前被杀 → steps_u 冻结(死亡即不动手);行动完成后才死 → 已行动已推进 -``` - -边界:归 B2——指针所有权、存活校验、冻结不变式、环首初始化、跨轮跨图延续;归 B1——死亡判定时机、结算内先后次序、每结算恰一次推进。 - -### F2 攻击行为裸伤害构成(raw_attack_damage) - -**结论**:attack 拍 D = atk + m_amb × L、heavy 拍 D = atk × heavy_multiplier + m_amb × L、charge 拍 D = 0(不读伏击池);伏击附加是后置加法、不进倍乘;池共享不消耗(同结算多敌读同一 L,非均分、非先到先得);B2 向 B1 供(基线, 伏击)分量二元组(结算明细"伏击 +N"归因行的数据源)。 - -``` -attack 拍:D = atk + m_amb × L m_amb = StatusEffectTable.ambush.magnitude(provisional 3) -heavy 拍:D = atk × heavy_multiplier + m_amb × L -charge 拍:D = 0 不读伏击池——空拍零兑付 -``` - -读数:合成序判别例——bugbear(atk=4, mult=2)heavy 拍 L=4 → 4×2 + 12 = **20**(塞进倍乘得 (4+12)×2 = 32 ≠ 20);单结算单单位附加上界 = cap × 3 = 12(默认,L ≤ min(雷数, cap));无负值分支——clamp/地板/hero 侧减伤合成归 B1。 - -### F3 伏击授予与溢出(ambush_grant_overflow) - -**结论**:granted_r = min(当轮新开雷数, cap)(cap 判定在授予前——B1 预截流);overflow_r = 当轮雷数 − granted_r(每颗溢出雷一行"溢出未生效"明细、含来源);L_r = granted_r(当轮兑付一次、轮末全清、无跨轮存量);守恒 granted + overflow = 当轮雷数、零静默蒸发;max_stack = 16 结构不可达(dur=1 ∧ AP ≤ 8 承载——死护栏非死字段)。 - -``` -granted_r = min(当轮新开雷数, cap) cap 判定在授予前(B1 预截流) -overflow_r = 当轮新开雷数 − granted_r 每颗溢出雷一行"溢出未生效"明细(含来源) -L_r = granted_r 只活一结算:当轮兑付一次、轮末全清 -``` - -变量域:mines_r ∈ [0, 8](结构界 = AP;复开不可能——A2 棋盘面语义);cap ∈ [0, 16] 默认 4(行值 knob;0 = 免疫伏击、全溢出可见);granted_r ∈ [0, 4](B1 编排期逐雷 apply_effect、每雷恰一次转化)。边界:归 B1——预截流编排、授予次序(行主序雷格序为建议序)、每雷恰一次、溢出行协议。 - -### F4 条款 3 供给口径(clause3_supply) - -**结论**:每结算敌方伏击暴露 = k × L × m_amb(k = 本结算存活敌中攻击/重击拍的单位数,确定性可算);每结算结构上界 = unit_count × min(AP 上界, cap) × m_amb(cap > AP 界时 cap 腿松弛);跨结算累计 = 轨迹量、非表值、不设上界(dur=1 每结算清零);B1 对账取"每结算"口径即可闭合、无需战斗长度假设。 - -``` -每结算敌方伏击暴露(精确式)= k × L × m_amb -每结算结构上界 = unit_count × min(AP 上界, cap) × m_amb -跨结算累计 = 轨迹量,非表值、不设上界 -``` - -读数:默认满配上界 = 3 × min(8, 4) × 3 = **36**;cap ≥ 8 时真可达上界 72(而非 144);默认行值 unit_count = 1 下 = 12。 - -## 依赖与输出 - -B2 编排被动——调用权集中归 B1;A2/A3/A1 事实均经 B1 结算编排转化,零直接接口。registry / 接口漂移回写义务(R-1–R-4)与双向一致性核对记录见 analysis 附录。 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard | EnemyTable schema + 行回填(B2 为回填 owner)+ HeroTable 新增(走 D2 接口漂移规则回写)+ ConfigDB 单点读取(R1 行解析) | -| 下游 | B1 | hard(provisional) | 单位状态查询/受击/推进接口(冒烟 API 面)+ 义务①–⑥(缺项即 blocking,见下表) | -| 相邻 | B3 | 零运行时依赖 | ambush/weaken 量纲与作用域验收锚归 B2;side-wide MVP 兼容(B3 接口零变更);target_ref 扩展位义务 | -| 下游 | B4 | soft(provisional) | 伤害道具默认目标消费(固定顺位);伏击清单扩展联动修订;attack_up 消费面 = 主角战斗段先手攻击;道具/增益 = 基础攻击之外的规划面伤害 | -| 间接 | A2/A3 | 零直接接口 | 雷/旗事实经 B1 转化;AP 界(单轮开雷 ≤ 8)= cap 默认值结构来源;weaken 档位锚归 B4/B1 | -| 间接 | A1 | — | 雷数分布影响伏击吞吐——条款 3 对账消费 A1 actuals p10(B1 义务,非 B2 域) | -| 下游 | C3 | soft(provisional) | 难度修饰施加点/算式归 C3;两表曲线数值调参所有权归 C3;多敌种同深度选择规则共裁;新敌种投放节奏 = 关卡命脉(goblin 单拍环证伪项 OQ8) | -| 下游 | C1 | soft(provisional) | 遭遇构成(战斗触发、(L,D) 供给、unit_count 覆盖语义)归 C1;跨战斗 HP 持久性归 C1/C2 | -| 下游 | D1 | soft | 视觉推测型呈现义务①–④(缺项即 blocking);敌单位 HUD(血条/顺位/姿态)呈现 | -| 下游 | B5 | soft | 行为环视觉状态表现(蓄力姿态等——预告时序规格⑤);结算明细敌方行呈现(数据源 = B1 流水) | -| 下游 | D5 | soft | 读怪教学(敌种环模式可学、顺位规则)+ "蓄力拍前放心贪雷"教学 + 首次蓄力姿态一次性提示候选 | - -### 义务台账(活契约,缺项即 blocking) - -对外引用口径:B1 清单引用名「B2 义务①–⑥」(b1-settlement 上游表同口径);D1 清单引用名「D1 呈现义务①–④」。 - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| B1-① | 单位接口调用集中在结算编排、行为环推进每结算恰一次(double-advance 无守卫——信任编排);结算内调用序成文:query_attack → apply_damage → advance(倒序会读到下一拍),B1 冒烟须回放结算步流 | B1 | 已登记 · 缺项即 blocking | -| B1-② | 雷→伏击事实转化恰一次(每颗雷格实例至多一次) | B1 | 已登记 · 缺项即 blocking | -| B1-③ | 伤害 clamp/负值/溢杀语义与死亡判定时机成文 | B1 | 已登记 · 缺项即 blocking | -| B1-④ | 条款 3 闭合对账:消费 B2 cap 表值 + 伏击量纲 + A1 actuals p10(非 target 参数) | B1 | 已登记 · 缺项即 blocking | -| B1-⑤ | 默认目标规则消费与单体/AOE 分流(顺位快照 = 生成序) | B1 | 已登记 · 缺项即 blocking | -| B1-⑥ | 伏击 cap 溢出的"溢出未生效"明细行协议(呈现归 B5/D1) | B1 | 已登记 · 缺项即 blocking | -| D1-① | enemy_id→图像线索映射清单成文(形态/姿态↔行为状态;预告时序 = 下一拍预告、挖掘期全程可见;含强度档位与环长直觉编码说明;形状+色相双通道,art-bible 约束) | D1 | 已登记 · 缺项即 blocking | -| D1-② | 线索映射全局恒定(映射键 = enemy_id——跨 run 恒定、禁止重掷) | D1 | 已登记 · 缺项即 blocking | -| D1-③ | 单位顺位与存活可读(固定顺位规则的推测前提;顺位标记资产需求见呈现契约 #3) | D1 | 已登记 · 缺项即 blocking | -| D1-④ | 敌方 side 池状态呈现口径(伏击层数经 B1 流水——B3 敌侧延伸) | D1 | 已登记 · 缺项即 blocking | - -### 呈现契约(数据面义务——B2 无自有渲染面,呈现归 D1/B5) - -| # | 数据面义务 | 归属 | -|---|---|---| -| 1 | 敌种视觉身份:双敌种剪影一眼可辨(形状+颜色双通道、色弱可用);形态承载强度档位直觉编码 | D1/B5,art-bible 约束 | -| 2 | 行为环视觉状态:每敌种每类行为(attack/charge/heavy)对应恒定且互异的视觉状态,映射每 run 恒定禁止重掷;MVP 清单 = goblin 1 态(攻击)、bugbear 3 态(攻击/蓄力/重击) | D1/B5 | -| 3 | 资产需求下限:受击反馈(多敌同屏"谁挨了打"归因前提——两敌种可共用通用一组、须显式登记)+ 死亡表现("重击被掐灭"兑付可见——死亡瞬间可辨识、不得直接消失)+ 顺位标记呈现元素;D1/B5 照单生产、不得隐式缺席 | D1/B5 | -| 4 | 单位呈现数据供给:hp/max_hp、顺位、存活态、当前拍视觉状态——数据源 = B2 单位状态查询(经 B1 编排流水) | D1 | -| 5 | 敌方增益呈现:伏击池层数 HUD 口径(数据源 = B1 流水经 B3 投影);结算明细敌方行使用分量二元组("攻击 13 = 基线 4 + 伏击 9") | D1/B5 | -| 6 | 视觉锚适用:血条/伤害数字暗色底高对比(锚 1);敌单位出现在棋盘上还是独立战斗场景 = B5 前"战斗表现美术测试"锁定,B2 只锁数据面不预设舞台;敌人层绘制优先级插入位置(姿态精灵与数字/旗/小人遮挡关系)随美术测试一并裁决 | D1/B5 / art-bible | -| 7 | UI 三项:敌单位 HUD、结算明细敌方行(分量二元组 + 伏击溢出行)、教学口径;MVP 无敌图鉴/敌人列表 UI(名录学习成本内,扩展时再议) | D1/B5/D5 | -| 8 | 音频:MVP 无需求(攻击/死亡/蓄力音效归 D4 Alpha);蓄力拍音频前摇 = 读招潜在第二通道,登记为垂直切片可选项 | D4 | - -## P0 最小闭环 - -1. 战斗开始:B1 调 spawn——按遭遇坐标读表、行值快照实例化 n 个敌单位 + 主角(hp 入参),指针指向环首。 -2. 玩家挖掘扫雷;踩雷事实经 B1 转化为伏击施加(每雷恰一次、cap 截流、溢出记账)。 -3. 结算开始:主角先手攻击顺位最前的存活敌人。 -4. 每个存活敌单位读当前拍:attack/heavy 兑付(基线 + 伏击附加),charge 空拍。 -5. 受击上报、hp 递减;hp = 0 移出顺位(死亡即不动手)。 -6. 存活敌单位各推进一格(先作用后推进,环尾回环首)。 -7. 敌全灭 → "敌人全灭"成立,回流 B1 作胜利判定素材;英雄归零 → 失败判定素材。 -8. battle_over:despawn_all 全部单位消亡,不跨战斗;下一场重新 spawn。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | 预留行为拍 guard/boost/hinder/summon 启用 | 枚举封闭——启用 = 本 GDD 修订非调参;垂直切片/Alpha | -| P1 | 敌种名录扩容与新敌种投放节奏 | 投放节奏 = 关卡命脉(C3 所有权);垂直切片/Alpha | -| P1 | target_ref 单体寻址(B3 扩展位) | 首个单体效果上线时补列,随批 B1 归集语义/D1 呈现裁决 | -| P1 | 蓄力拍音频前摇(读招第二通道) | 垂直切片可选项,非 MVP 义务 | -| P2 | 敌图鉴/敌人列表 UI | 名录学习成本内;名录扩展时再议(垂直切片) | -| P2 | 精英/Boss 遭遇编码位(改键,如追加 encounter_class 维度) | 现键结构无编码位;C1 定稿强制核对,改键走 D2 Rule 4 接口漂移(OQ7) | - -## 调参表 - -| 字段 | 域 | 默认 | owner | 说明 | -|---|---|---|---|---| -| EnemyTable.unit_count | int [1, 3] | 1(provisional) | C3 | 遭遇区间下界;B1 encounter 骰定本战实际数量 | -| EnemyTable.unit_count_max | int [unit_count, 3],可省略 | 缺省 = 定值 | C3 | 遭遇区间上界 | -| EnemyTable.hp | int [1, 999] | provisional(出处待查) | C3 | 难度修饰前基线 | -| EnemyTable.atk | int [0, 999] | provisional(出处待查) | C3 | 0 合法 = 纯伏击伤敌种 | -| EnemyTable.heavy_multiplier | int [1, 16] | 2(provisional) | C3 | 无 heavy 拍不消费、非校验项 | -| EnemyTable.advantage_per_round_cap | int [0, 16] | 4(本 GDD 定稿) | B2 | 条款 3 供给表值;0 = 免疫伏击合法极端 | -| HeroTable.max_hp | int [1, 999] | provisional(出处待查) | C3 | | -| HeroTable.atk | int [1, 999] | 6(原型锚 provisional) | C3 | 0 = 加载期校验拒绝(基础攻击恒在) | - -- 非 knob(结构冻结):行为枚举七类封闭、死亡即不动手、先作用后推进、伏击池共享读法、合成序后置加法、伏击量纲 = HP 点、固定顺位规则、每行集恰一敌种、零随机——修订走本 GDD 流程。 -- Knob 交互:cap × atk(支配边界 L* 联动)、unit_count × cap(单结算上界双线性)、heavy_multiplier × atk(heavy 拍支配)——禁止独立调参,联动评估归 B1 条款 3 闭合对账;pattern 内容(环长/charge 占比 → 兑付率 ρ)属内容行调参,所有权归 C3。 -- 零伤害死局护栏:hero atk=0 已被 HeroTable 域下界结构杜绝;残余退化 = 行 atk=0 且 cap=0 → 无威胁敌(内容调参禁区注记,非死局——OQ9);跨表量级护栏(atk×mult 上界 vs max_hp 域)owner = 实现期 ADR/D2;混编遭遇下 side 池 cap 取哪行值未定义——现结构恒单行值,混编引入时随 OQ7 改键一并裁决。 -- 调参所有权:MVP 全部默认值 provisional、曲线数值归 C3;B1 条款 3 对账落定前,cap 与伏击量纲相关联调须重跑方向性预检并同步 registry(接口漂移义务)。 - -## 验收标准 - -口径摘要:B2 是单位层纯逻辑类——冒烟载体 = `godot --headless --script`;B1 未实现期间冒烟脚本扮演编排方,按"实例化 → 查询 → 受击 → 推进 → 消亡"序列驱动(B1 就绪后改走真实调用方、断言口径不变);每用例全新实例;期望值按表读值推导不写死;返回 = 受理/拒绝布尔 + debug 诊断(进程致命归 D2 数据通道)。冒烟 API 面、测试口径、夹具策略、覆盖声明与覆盖矩阵见 analysis 附录 B。 - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | 默认根加载完成、全新容器 | `spawn(goblin 坐标, M_h)`;Alive 相位再 spawn 同坐标 | 首次 true;敌恰 unit_count 个、同 enemy_id、投影五字段(hp/max_hp/atk/pattern/cap)= 行值快照;hero 恰 1、hp = 入参;敌投影序 = 行主序生成序;再 spawn → false + 诊断、容器不变(相位守卫) | Rule 2/9/10 | -| AC-2 | 默认根、全新实例 | hero_hp ∈ {M_h+1, 0, −1} 三腿;随后 hero_hp = 1 | 越界三腿均 false + 诊断且双侧恒空(拒绝原子性、无半实例化);域内下界 → true——拒绝域不扩大 | EC16 / Rule 9 | -| AC-3 | spawn 完成(bugbear 坐标) | 读初拍;连续 advance;goblin 坐标连续 3 次 advance;任意长 advance/受击序列 | 初拍 = p_e[0];轨迹 = p_e[k mod 环长]、环尾回环首;环长 1 恒 attack(前提 \|p_g\| = 1 按表读值核对,不满足显式 SKIP);任意序列后状态 = 驱动序列的确定函数、除 despawn_all 外无重置入口 | Rule 4 / EC10 / EC11 / F1 | -| AC-4 | 默认根;前提 p_e[1]=charge 且 p_e[2]=heavy(不满足显式 SKIP) | charge 拍后杀死再 advance;heavy 拍 advance 后才死;对 Dead 句柄 apply_damage | heavy 前被杀:hp = 0(溢杀 floor)、advance → false 无诊断、beat 冻结于 heavy 前一拍(重击永不兑现);行动后才死:已推进、指针回绕;Dead 受击 → false + 诊断(无复活) | EC1 / EC9 / F1 | -| AC-5 | 夹具根 enemy_multi_unit(u_c = 3,bugbear 行) | 三单位读初拍;某步 advance(u2) 前杀 u2;全程观测规模 | 三单位初拍恒等(同种同指环首);u2 本步不打、指针冻结,幸存者 beat 连续多步恒相同(同步性质定理——EC2);单位数 ∈ {3,2,1} 严格递减、无增员(EC5 负空间行为面) | Rule 2 / EC2 / F1 | -| AC-6 | 默认根 + AC-5 根 | 逐一致死;杀 hero 后 despawn_all、重复 despawn_all、重新 spawn | 全灭 → query_alive(enemy) = 空(胜利判定素材归 B1);hero hp = 0(失败判定素材);despawn → true、双侧空、失效句柄查询空 + 诊断、作用接口 false;重复 despawn → false + 诊断;重新 spawn → true(Despawned 唯一出口) | Rule 1 / EC3 / EC4 | -| AC-7 | 默认根 spawn(bugbear)、m_amb 表读值 | attack 拍 query_attack(L=2);heavy 拍 query_attack(L=4) 合成序判别;charge 拍 query_attack(L=c_r);多敌根同 L 重复/多单位 query | attack:{baseline = a_e, attach = 2×m_amb, total = a_e + 2×m_amb};heavy:total = a_e×m_e + 4×m_amb 且 ≠ (a_e + 4×m_amb)×m_e(后置加法判别;m_e = 1 时负断言恒等、显式 SKIP);charge:恒 {0,0,0}(不读池——EC8 的 B2 半);同 L 多读逐字相同、多单位读值一致(共享不消耗)、query 前后投影零变化(纯函数——EC17 读值半) | F2 / Rule 6 / EC8 / EC17 | -| AC-8 | 默认根、c_r = cap 表读值 | ambush_grant_plan 参数化:mines = c_r+2;mines ∈ {0, 1, c_r, c_r+1};mines ∈ [5, 8];cap = 0 | granted = min(mines, c_r)、守恒 granted + overflow = mines(零静默蒸发);灾难轮 granted = 4、overflow = mines − 4(EC7);cap = 0 → granted = 0、overflow = m(EC6 免疫全溢出可见) | F3 / EC6 / EC7 | -| AC-9 | 夹具根 enemy_multi_unit | advance 序构造混合拍读暴露;记号恒等式断言 | 暴露 = k × L × m_amb,k 经只读观测量导出(确定性可算、无隐藏状态);全 charge 轮 k = 0(EC8);结构上界 = u_c × min(AP_r, c_r) × m_amb 记号恒等式(全参表读值/夹具登记值,非定值断言);无跨结算累计观测量(负空间) | F4 / EC8 | -| AC-10 | 腿 1 默认根(u_c=1);腿 2/3 多敌根 | default_target();杀 [0] 后再查;连续杀至空 | u_c=1 → 唯一存活单位(合法退化——EC15);多敌 → query_alive(enemy)[0](顺位快照 = 生成序);杀最前后顺延;杀至空 → null | Rule 7 / EC3 / EC15 | -| AC-11 | 默认根 spawn 完成、存活与 Dead 并存 | 测试通道换根加载 enemy_reloaded(非 D2 reload() 路径);despawn 后同坐标重新 spawn;原地改写返回的 pattern 投影 | 已实例化单位快照五字段 + beat + hp 逐字不变、hero 投影不变(快照抗热重载——EC12);新实例 = 漂移后表值;投影为拷贝非活引用 | Rule 10 / EC12 | -| AC-12 | EnemyTable schema 类直引实例 | validate() 作用于越域代表值(unit_count {0,4}、hp {0,1000}、atk {−1,1000}、mult {0,17}、环长 {0,9}、预留值 "guard"、未知枚举、cap {−1,17})与域内代表值(含 atk=0、cap=0 两合法极端、环长两界);表级构造同坐标两行相异 enemy_id | 越域各含对应域错误类别(零静默);表级含每行集恰一敌种错误类别;域内零诊断(防过度约束锁死内容——atk=0 与 cap=0 是承重点) | Rule 3/4 / EC6 | -| AC-13 | HeroTable schema 类直引实例 | validate():max_hp {0,1000}、atk {−1,0,1000} 越域;max_hp/atk ∈ [1,999] 域内;表级构造两行 | 越域各含域错误类别(atk=0 拒绝 = 基础攻击恒在的 schema 承重腿);域内零诊断;两行 → 单行全局约束错误(落点 = schema 或可选根 hero_extra_row manifest,两处恰一承载) | Rule 9 | -| AC-14 | 默认根加载完成 | 读 EnemyTable;读 HeroTable | 敌种 id 集合 = {goblin, bugbear, ogre_chief}(定值断言);每行集恰一敌种;pattern 元素 ⊆ {attack, charge, heavy};goblin 行 pattern 不含 "heavy";unit_count_max 仅在区间行出现;display_name 非空(本地化归 D6);遭遇分布不作定值断言(C3 域 knob);HeroTable 恰 1 行、atk ∈ [1,999](MVP 值 6 provisional 不作定值断言)、max_hp ∈ [1,999] | Rule 3/9 | -| AC-15 | 全新实例 ×2(同默认根) | 同一定长序列驱动两遍(spawn → 受击含轮到前击杀 → 交替 advance → query 投影 → default_target) | 两遍的 query_alive 投影序列、逐单位 beat 轨迹、default_target 返回序列逐项相同——零随机行为级硬证据(rng_service 流封闭) | Rule 4/11 / F1 | -| AC-16 | 默认根加载完成 | 脚本解析 design/registry/entities.yaml 的 enemy 与 hero 条目逐字段对账 | ① enemy.fields 十键与 EnemyTable schema 字段名/类型/域逐一相等;② hero.fields 两键同上;③ enemy 注记物种集 = {goblin, bugbear, ogre_chief} 与表行集合相等;④ status_effect.ambush 含 B2 量纲定稿注记(活值 m_amb 不作定值对账——knob 纪律);⑤ hero"单行全局豁免"与 enemy"每行集恰一敌种校验"注记存在 | Rule 6 / registry | -| AC-17 | B2 文件集纳入 D2 AC-9 模式项目级扫描域 | 静态扫描 | randomize() / RandomNumberGenerator / ConfigDB 外 data 表加载 / extends Control / .tscn preload 零命中(schema 与容器 class_name 直引实例化豁免);事件订阅 API 零命中;B3 API 符号零引用(相邻零运行时依赖);零随机行为级证据 = AC-15 | Rule 11 / D2 AC-9 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排——design 只收结论,公式推导、数值锚定论证、候选取舍、体验锚点论证移至 `design/gdd/analysis/b2-enemy-system.md`;规则/数值/AC/EC/F/OQ 编号与内容全保留,零设计变更 | -| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;规则/枚举/边界情况/义务清单/覆盖矩阵/AC 转表格;行为环转字符画;公式、Variables 与验算数据全保留;语义与 2026-09-09 定稿及 2026-09-11 基础攻击裁决对齐,零规则变更 | -| 基础攻击裁决批 | 2026-09-11 | HeroTable.atk = 基础攻击恒存在:域 [1,999]、0 加载期校验拒绝(零基线死锁自 schema 层杜绝)、MVP = 6(原型锚 provisional 归 C3);主角每结算战斗段先手攻击;B4 道具/增益转为规划面伤害(非唯一伤害来源);原"atk MVP=0 机制开关、胜利路径依赖 B4 先行"条款与 OQ3 左臂悬空投影退役;OQ9 恒零死局分支随之收窄 | -| C3 修订批回写 | 2026-09-14 | /design-review C3 修订批(X-7 回执,registry 同批):**spawn 增 override 参数 n**(B1 encounter 骰定本战实际数量——区间语义 [unit_count, unit_count_max] 实例化后不增,EC5 记号调和)· **Rule 10 DifficultyTable 接口已定**(registry `difficulty_table`——施加点 = 行值快照前套乘,MVP 空表零修饰)· **EnemyTable schema +2 字段**(unit_count_max / armor_type——护甲克制批,克制矩阵归 SettlementTable)· **物种集扩容三敌种 {goblin, bugbear, ogre_chief}**(AC-14/AC-16① 十键/AC-16③/结构定值断言随批;DND 更名批对齐)· 默认根遭遇分布 = C3 行值总表 v3(provisional) | -| Rev 1(full 评审批) | 2026-09-09 | lean 定稿同日 full 评审(六专员 + CD 终裁)8 项 blocking 同日核销后用户拍板收口(A3/A4/A1/B3 同日核销先例、免独立 re-review):① 胜利路径声明 ② AC-7 恒假判别前提 + SKIP ③ 多敌夹具根改 bugbear 行 ④ OQ6 事件源类更正 + F3 重验触发补支 ⑤ 精英/Boss 编码位预登记 OQ7 ⑥ Rule 8 预告时序 ⑦ 资产下限补受击/死亡/顺位 ⑧ 主角推进域排除;同批定稿四项口径:cap 默认 4(旧默认 8 使溢出协议不可达)、死亡即不动手、条款 3 单结算自然边界、C 节三处回写;F2 判别改域内值、F4 结构上界 min 收紧、方向性预检裕度改 2.3×——明细见 design/gdd/reviews/b2-enemy-system-review-log.md | -| v1(lean 定稿) | 2026-09-09 | 一次会话定稿:十一核心规则 + F1–F4 + 17 AC + 义务台账(B1×6 / D1×4);九项结构决策用户拍板(多敌 / HeroTable / 视觉推测型 / Peglin 行为环 / 每行集恰一敌种 / side-wide / 固定顺位 / unit_count 字段 / cap=4);lean 门禁:systems-designer 起草 Formulas、qa-lead 起草/验证 AC | diff --git a/design/archive/gdd-2026-09-14/b3-status-effect.md b/design/archive/gdd-2026-09-14/b3-status-effect.md deleted file mode 100644 index 68927414..00000000 --- a/design/archive/gdd-2026-09-14/b3-status-effect.md +++ /dev/null @@ -1,505 +0,0 @@ -# B3 增益/状态系统(Status Effect System) - -> **状态**:Approved · **版本**:v2 · 2026-09-14 -> **承载支柱**:P2 主(可归因兑现的机制落点)· P3(敌方增益/debuff 兑付面)· P1(时限透明的规划素材)· P4(间接)· **Layer**:1 Foundation · **Milestone**:MVP · **设计顺序**:第 4 位 -> **一句话**:战斗域统一状态容器——三向效果同构实例的时限/叠层/衰减机制唯一 owner,兑付接口供 B1 结算逐行消费。 -> **推演件**:`design/gdd/analysis/b3-status-effect.md`(本文件只收结论,理由在那里) - -## 设计目的 - -战斗里不在当场一次性、而要在若干次结算里持续起作用的战斗效果(安全格增益 / 踩雷敌方增益 / 标中旗削弱 / 清图奖励 buff)需要一个统一的存放与生命周期 owner。少了它,四类效果各写一套计时叠层逻辑,结算明细无法逐行归因,"规划的延迟兑现"无从落地。 - -1. 玩家指着任意一行结算明细,能答出"这效果是我哪步扫雷带来的"——来源标注随行(P2)。 -2. 玩家能读到每个增益"还剩几次结算、何时到期",把它纳入挖哪格的推理(P1)。 -3. 叠满再拿同款时玩家看得到"这层白拿了"——浪费诚实、可规划(P2)。 -4. 踩雷的敌方增益与标中旗的削弱用同一呈现语言,玩家由此学会雷的两面(P3)。 -5. 结算编排只对接五个固定接口;新增效果只加表行、不改容器代码。 - -## 系统范围 - -负责: - -- 状态实例生命周期(战斗域):授予受理、存续、到期移除、战斗结束清空;机制与内容分离——B3 只拥有机制,效果内容的经济归属归各锚 owner -- 时限/叠层/衰减机制语义:单一结算次数量纲、按行叠层三分支、先兑付后衰减 -- 兑付接口五 API 与 P2 归因字段(实例六字段 + display_name + 授予时数值快照) -- StatusEffectTable 回填 owner:schema + 四行 MVP 初值定稿权(锚验收权留 B4/B2/B1) -- 硬约束:零随机(无 RNG 流消费)· 零 UI 依赖 · 零信号外发(纯被动容器)· 全 API 布尔/计数返回、无 await——可回放步骤流的状态侧前提 - -不负责: - -- 效果内容经济归属——安全格 buff 与标中旗 debuff 档位锚验收(B4)、敌方增益上限(B2) -- 效果语义到结算公式的映射、兑付作用顺序、合成值地板/clamp、percent→乘数换算方向(B1 SettlementTable) -- flat 量纲定义(B2——已定稿,registry ambush_unit_definition) -- 呈现与渲染面——HUD 状态栏/结算明细呈现/图标映射(D1/B5/art-bible)、教学(D5)、本地化(D6) -- 事实产生与资格判定——开格/标中/开雷事件(A2)、标中旗兑付资格判定(A3/A2 域)、事实→授予恰一次转化(B1) -- 数据加载、校验、热重载门(D2) -- 事件外发(零——纯被动容器) - -## 核心循环 - -``` -B1 结算编排(唯一授予入口 apply_effect——A2/B4 与 B3 零直接接口) - │ 事实来源:A2 开格/标中/开雷事件 → B1 收集 round facts → 转化授予(挖掘期不直接写容器) - ▼ -授予(编排期入容器,无 pending 态——首个结算就是它的第一次兑付) - │ merge(effect_id) 三分支:independent 新建实例 / stack L+1(L=M 拒绝) / refresh R←D - │ 实例载荷 = 六归因字段 + display_name + 授予时数值快照 (magnitude, unit) - ▼ -Active(存续——跨轮次、跨扫雷图延续;换图/刷新不清空,旗标记随图消亡不影响实例) - │ 每轮结算:B1 query_active(side) 只读兑付(作用顺序归 B1 SettlementTable) - │ → decay_round() 恰一次:全实例 R−1,R=0 销毁(先兑付后衰减) - ▼ -出口 ─┬ R=0 → Expired:实例销毁(明细流水已由 B1 记录,B3 不留历史) - ├ notify_battle_end → Cleared:全实例销毁、容器回空 → BattleClosed(不跨战斗) - └ 拒绝路径:域闭 / 未知 effect_id / 满层 → false + 容器零写(溢出行归 B1 结算明细) -``` - -| 出口 | 触发 | 动作/去向 | 约束 | -|---|---|---|---| -| 受理入容器 | apply_effect 受理(新实例/叠层/刷新) | 即入 Active——无 pending 态,首个结算是第一次兑付 | 域闭 / 未知 id / 满层 → false 拒绝(见边界情况) | -| 到期移除 | decay_round 后 R=0 | 实例销毁 → Expired | 明细流水已由 B1 记录,B3 不留历史 | -| 战斗清空 | notify_battle_end() | 全实例销毁、容器回空 → BattleClosed | 不跨战斗;除本 API 外无任何清空入口 | -| 满层拒绝 | stack 行 L=M 再授予 | 返回 false、容器逐字不变;"溢出未生效"行归 B1 结算明细(含来源) | 拒绝原子性——无半写、无溢出落层 | - -## 实例状态 - -容器为纯逻辑类(非 autoload、无场景依附),每场战斗实例化一次(B1 编排前提;冒烟经 class_name 直引构造)。容器无运行时大状态机——实例生命周期四态(战斗域): - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| BattleClosed(域闭) | 构造后未开域 / notify_battle_end() 后 | apply_effect 全拒绝(false);唯一出口 notify_battle_start() | -| Active(存续) | apply_effect 受理(新实例/叠层/刷新) | 每轮结算被 B1 兑付消费;decay_round() 后 remaining −1 | -| Expired(移除) | remaining_settlements = 0 | 实例销毁(明细流水已由 B1 记录,B3 不留历史) | -| Cleared(清空) | notify_battle_end() | 全实例销毁、容器回空 → BattleClosed(不跨战斗) | - -不变式(debug 断言口径): - -- remaining ∈ [0, duration_settlements];stack 行 layers ∈ [1, max_stack];stack/refresh 策略下同 id 至多一个实例——违反即 debug 断言中止 -- API 违规(域闭授予、未知 effect_id、满层授予)= 拒绝(false)+ debug 诊断,不进程致命(承 A3 拒绝口径;进程致命保留给 D2 数据通道) - -设计意图:四态封闭、清空入口唯一,"容器何时为空"永远可答。 - -## 枚举与数据字段 - -### source_class(封闭枚举——P2 归因字段) - -| 值 | 产出点 | 语义 | -|---|---|---| -| safe_cell | 安全格奖励授予 | 主角增益来源 | -| flag_hit | 标中旗授予 | 怪物削弱来源 | -| mine_hit | 踩雷授予 | 敌方增益来源 | -| clear_reward | 清图奖励授予 | 清图槽 buff 来源(B4 期定稿) | - -- 新增值 = 接口漂移;B3 不校验 source_class 与行的对应(dumb 账本——EC6 同族) -- 内容行表"来源"列为内容档案(provenance),非 schema 字段、非运行时约束 - -### target_side / unit / stack_policy(schema 枚举域) - -| 字段 | 值域 | 语义 | -|---|---|---| -| target_side | hero / enemy | 作用侧;enemy 侧 side-wide = 全体存活敌单位(层数 = side 共享池) | -| unit | percent / flat | percent = 百分比修正(百分点线性叠加);flat = 固定值(伏击类——量纲已定稿:每层伏击为每次攻击类行为附加 m_amb 点主角 HP 伤害、后置加法不进倍乘、charge 拍零兑付,B2 GDD 定稿) | -| stack_policy | stack / refresh / independent | 同 id 重复授予的合并策略(见授予节子表) | - -### StatusEffectTable schema(D2 承载,B3 回填 owner) - -规则: - -1. **Rule 9** 容器本身不认识任何具体数值——哪个状态加多少、活几次、最多叠几层全部写在状态表里,运行时统一从 ConfigDB 读表;代码零玩法数值字面量,调平衡只改表、不改代码。 - -| 字段 | 类型/范围 | 说明 | -|---|---|---| -| effect_id | String(主键唯一) | 状态标识;B1 SettlementTable 语义映射的键 | -| display_name | String | 图例/HUD/明细用名(本地化归 D6) | -| target_side | enum {hero, enemy} | 作用侧(enemy 侧 side-wide = 全体存活敌单位) | -| magnitude | int | 域随 unit:percent ∈ [-100, 100] 且 ≠0 / flat ≥ 1(跨字段校验) | -| unit | enum {percent, flat} | percent = 百分比修正;flat = 固定值(伏击类) | -| duration_settlements | int [1, 99] | 授予时初始剩余结算次数(一次性 = 1) | -| stack_policy | enum {stack, refresh, independent} | 同 id 重复授予的合并策略 | -| max_stack | int [1, 16] | 层数上限;仅 stack 消费——refresh/independent 行约定恒 1(内容约定,非校验项) | - -- 表为定义表非进度成长表,无 (level_index, node_depth) 维度(D2 Rule 4 豁免,A4 先例);未来随关卡成长的效果走接口漂移加列 -- 加载校验:表非空(D2 Rule 6,四行即满足);effect_id 唯一(重复键致命——本表唯一致命夹具 dup_key);枚举域校验(target_side/unit/stack_policy 出域致命);duration/max_stack 域校验;跨字段 percent ≠ 0 / flat ≥ 1 - -举证:Rule 9 依据 = D2 Rule 1〔数值字面量禁令〕;本 GDD 为该表回填 owner,新字段走接口漂移规则。 - -### StatusEffectTable MVP 内容行(四行值域快照——值全部 provisional) - -规则: - -1. **Rule 10** 四行 MVP 内容(增伤、减伤、伏击、削弱)的初始数值由本文档定稿;"值合不合适"的验收权留在对口系统——削弱按"必须严过最低档增益"的当量锚验收、伏击按敌方惩罚上限验收、对账由结算闭合;要改初值走接口漂移规则回写登记库(registry),不是随手调参。 - -| effect_id | 名称 | side | magnitude(现行值) | duration | stack/max | 来源 | provisional 依据 | -|---|---|---|---|---|---|---|---| -| attack_up | 增伤 | hero | +50 percent | 1(当次结算) | stack / 2 | safe_cell | 原型临时值 1.5× 换算(D2 knobs 占位);消费面 = 主角战斗段先手攻击(HeroTable.atk 基础攻击恒存在) | -| defense_up | 减伤 | hero | −30 percent | 1(当次结算) | stack / 2 | safe_cell | 减伤墙批 C3 投值(−50→−30,叠满两层 −60 帽——defense_scan 墙轮 39%/真人 12 轮零承伤定量坐实后回调) | -| ambush | 伏击(敌方增益) | enemy | +3 flat | 1 | stack / 16 | mine_hit | 原型临时值 +3;量纲已定稿(B2 GDD——registry ambush_unit_definition);条款 3 锚验收归 B2/B1 | -| weaken | 削弱(标中旗 debuff) | enemy | −65 percent(值域 [60, 85]) | 1 | stack / 16 | flag_hit | F0 裁决值——回执以 B1 GDD F0 为准(registry anchor_warning);须过条款 2 锚(严格 > 最低档 buff 当量,B1 对照验收) | - -举证:Rule 10 依据 = A3 F1 条款 2〔debuff 严格 > 最低档 buff 当量,参照对象 = attack_up 行当量〕· 条款 3〔B2 惩罚上限〕· A3 OQ5 收编〔registry ownership_note——A3 GDD 正文不改,以本条 + registry ownership_note 为准〕;初值定稿权归本文档、锚验收权留 B4/B2/B1,是对"档位归奖励表设计"的显式收编。 - -设计意图:机制归容器、数值归表、档位归锚 owner——三方权责不混。 - -## 授予、合并与接口 - -规则(原编号保留): - -1. **Rule 1** 战斗里不在当场一次性生效、要管上几回结算的效果——主角增益、敌人增益、敌人受到的削弱、清图奖励——全部作为同一种状态实例存进同一个容器,用同一套计时、叠层、衰减规矩管理,没有哪类效果走特殊通道;容器四条硬规矩见下表。 -2. **Rule 3** 状态只在结算时发放:挖掘期的挖格、插旗、踩雷不直接改容器,棋盘只上报"发生了什么"的事实,结算编排在每轮结算时统一把事实兑换成状态发给容器——这是唯一进货口,棋盘与奖励背包都没有直通通道;每笔状态随身携带归因(来源类别四选一、来自哪个格子、第几轮);状态一经发入立即生效,没有"待生效"中间态,同一场结算就是它的第一次兑付。 -3. **Rule 4** 同一种状态还没消失时又拿到一份,怎么合并由数据表每行的叠层策略字段说了算——叠加(层数 +1、寿命不动)、刷新(寿命重新计满、层数不变)、并存(各算各的一份);合并在授予那一刻由容器内部完成,多个状态在结算里按什么先后起作用是结算编排的职责,两件事互不干扰;叠加是纯加法——几层就是几倍的行值。 -4. **Rule 5** 叠加型状态叠到上限再授予同款不生效:容器拒绝、内容一个字不变;但这份奖励不会被无声吞掉——结算明细多一行"溢出未生效"、连来源一起写明;无论重复来自玩家直接踩出的格子、结算转化、还是连锁展开自动开出的奖励格,都走同一个授予入口、同样产生溢出行、同样留痕;不做覆盖、不做溢出落层。 -5. **Rule 6** 状态容器是纯被动的仓库,自己不主动做任何事;结算编排要用它只有五个固定接口(下表);查询返回按发放先后排列且顺序永远稳定;全部 API 布尔/计数返回、无 await、无表现面。 -6. **Rule 8** 状态一旦生效,玩家没有任何手段把它摘掉、往后延、或挪给别人——容器没有提供这类接口;将来若要加驱散/延时/转移,属于新增接口的修订,不是调参数。 - -容器四条硬规矩: - -| 规矩 | 含义 | -|---|---| -| 寿命 = 一场战斗 | 战斗开始时容器为空,战斗结束全部清空——不跨到下一场战斗 | -| 跨轮、跨图延续 | 同一场战斗里跨轮次、跨扫雷图都在;换图/刷新不清空(旗标记随旧图消亡归棋盘系统 A2 管,状态实例不随图走) | -| 全程零随机 | 容器不掷任何骰子:授予、合并、衰减、列举顺序全部确定 | -| 敌方侧共享 | MVP 敌人为 1–3 个同种敌单位(敌情系统 B2 定):对敌状态一律对全体存活敌人生效,层数全体共享一份 | - -三向效果映射(授予路径): - -| 事实来源 | source_class | 授予路径 | 目标侧 | MVP 行 | -|---|---|---|---|---| -| 安全格奖励 | safe_cell | A2 开格事实 → B1 转化 apply_effect | hero | attack_up / defense_up | -| 踩雷 | mine_hit | A2 开雷事实 → B1 转化 apply_effect | enemy(side-wide) | ambush | -| 标中旗 | flag_hit | A2 标中判定 → B1 转化 apply_effect;兑付资格(雷格实例键)判定在 A3/A2 域——资格判定不过 B3,B3 无从重复兑付同雷(每次 flag_hit 授予由 B1 保证资格合法) | enemy(side-wide) | weaken | -| 清图奖励 | clear_reward | B4/B1 清图槽含 buff 时授予(B4 期定稿) | 随行 | B4 差异化插槽(OQ4) | - -按行叠层三分支(stack_policy——授予时合并): - -| stack_policy | 重复授予行为 | 满层/溢出 | MVP 消费 | -|---|---|---|---| -| stack | 层数 +1(R 不动——只有初始授予定钟) | L=M → 拒绝 false + 容器零写,"溢出未生效"行归 B1 | 四行全用(attack_up/defense_up M=2、ambush/weaken M=16) | -| refresh | 剩余次数重置为实例授予时快照 D、层数不变(含 R 已 = D 的空刷新——恒返回 true,无满层/溢出语义、不消费 max_stack) | 无 | 语义已定义、实现承载——MVP 无内容行(零消费者) | -| independent | 并存独立实例(append 入列) | 无满层语义——实例数上界 = 受理授予数(有界确定) | 同上 | - -五个固定接口: - -| 接口 | 干什么 | 返回 | -|---|---|---| -| notify_battle_start() | 告知战斗开始:打开容器、进入可用状态 | 是/否 | -| apply_effect(effect_id, source) | 发一笔状态——唯一进货口:受理即新建实例/叠层/刷新 | 是/否 | -| query_active(side) | 查询生效状态:某一方当前生效清单,按发放先后排列且顺序永远稳定 | 只读清单 | -| decay_round() | 轮末衰减:全部实例寿命 −1、归 0 即销毁 | 本轮移除数 | -| notify_battle_end() | 告知战斗结束:全实例清空、容器回空 | 是/否 | - -举证: - -| 编号 | 举证 | -|---|---| -| Rule 1 | 无计算;"不跨战斗"为 game-concept 定稿口径;多敌共享读法按 registry single_enemy_assumption 登记,现接口零变更兼容 | -| Rule 3 | 无计算;授予动作 = apply_effect(五接口之一);四类来源授予路径与目标侧见上表;来源取值封闭枚举见 source_class 表 | -| Rule 4 | 三分支逐分支语义见上表;合并执行伪代码见 F1;"有效值 = 层数 × 行值"加算合成见 F2 | -| Rule 5 | 无计算(判定 = 一次"层数 == 上限"比较);拒绝原子性(false + 容器逐字不变、无半写无溢出落层)见 F1 Output Range;"溢出未生效"行进结算明细协议由 B1 义务⑧承载、呈现归 B5/D1 | -| Rule 6 | 五接口签名见验收标准测试口径;查询返回 = 六归因字段 + display_name + 授予时数值快照 (magnitude, unit) 只读投影(qa-lead 载荷口径);结算作用顺序(哪个效果先乘)归 B1 SettlementTable,B3 只保证枚举确定性;最后一轮(敌人全灭)是否 decay 归 B1 判定次序域——A3 EC8 同款〔末轮 decay 判定次序域〕 | -| Rule 8 | 无计算;负空间规则——验收形态 = API 面封闭枚举 + 接口漂移修订门(验收标准测试口径 out-of-scope 行) | - -设计意图:授予单口、合并查表、接口封五——结算编排与效果种类解耦。 - -## 时限与衰减 - -规则: - -1. **Rule 2** 每个状态实例自带一个倒数计数——剩余结算次数:它不承诺"活几轮",而是数"经历过几次结算",每轮结算先让状态起作用、随后计数减 1,减到 0 状态即被移除;一次性状态(初始计数 = 1)恰好在授予它的那轮结算里生效一次、轮末消失,MVP 四行内容全部是一次性;将来跨轮持续的增益寿命由表行初始值表达——给几就活几次结算;停手不挖的轮、弃图刷新的轮也照常算一次结算、计数照减——不做"不结算就不掉次数"的免费延时。 - -时限语义要点(单一结算次数量纲): - -| 要点 | 内容 | -|---|---| -| 计数量纲 | remaining_settlements(剩余结算次数)——全部状态唯一时限单位 | -| 初始值 | duration_settlements = 授予时初始剩余结算次数(实例持有快照、不受表重载影响——EC9) | -| 衰减 | 每轮结算兑付后统一 −1(先兑付后衰减——B1 兑付完才调 decay_round);归 0 即移除 | -| 一次性 | duration=1 → 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末移除(MVP 四行全部 D=1——当次结算语义) | - -举证:衰减的精确机制(每轮恰 −1、归 0 即销毁)与"先兑付后衰减"时序契约见 F3。 - -设计意图:倒计时单位与"兑付次数"同物——玩家读到的剩余次数就是规划素材本身。 - -## 数值结论(F0–F3) - -> 本系统为数学承载系统:公式结论与表达式在此;推导过程、候选取舍与锚定论证全部在推演件。本节只含机制公式,平衡归属见显式排除声明。 - -### F0 weaken 锚裁决回执(m_w 值域与归一口径) - -**结论**: - -- m_w 值域 [60, 85]、默认 −65;归一口径 = 每结算瞬时当量(每 AP 总暴露分支被 percent schema 域禁止,排除) -- 地板交叉层数 = ⌈100/m_w⌉ = 2(值域内恒 2);B3 接口零修订、值变更走 registry 回写——**回执以 B1 GDD F0 为准**(registry status_effect.anchor_warning F0 裁决回执) -- AC-14 腿 3 非平凡性复查通过(16×65 = 1040 越出 percent 域);原 −25 值的裁决关系与修订轨迹见版本历史 - -### F1 同 id 叠层合并(same_id_merge,授予时执行) - -**结论**:授予时按行 stack_policy 三分支合并——stack 加层不触碰 R(只有初始授予定钟)、refresh 重置 R 取实例授予时快照 D、independent 并存新实例;满层拒绝原子(false + 容器逐字不变)。 - -``` -merge(effect_id) —— 前置拒绝(域闭 / 未知 effect_id)沿用实例状态节 API 口径,不入分支。 -行 = StatusEffectTable[effect_id],按 行.stack_policy 三分支: - - independent → 恒新建实例 {L=1, R=D},append 入列(同 id 并存多实例) - - stack → 无存活实例 :新建 {L=1, R=D} - 有存活实例 ∧ L < M :L ← L+1(R 不动——只有初始授予定钟) - 有存活实例 ∧ L = M :返回 false(满层拒绝;容器零写入,溢出行归 B1 结算明细) - - refresh → 无存活实例 :新建 {L=1, R=D} - 有存活实例 :R ← D(L 不变;含 R 已 = D 的空刷新,恒返回 true—— - refresh 无满层/溢出语义,不消费 max_stack) -``` - -**Variables:** - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| effect_id | e | String | 表主键 | StatusEffectTable 行键;未知 = 拒绝 | -| stack_policy | P | enum {stack, refresh, independent} | 表列 | 合并分支选择器 | -| max_stack | M | int [1, 16] | 表列 | 仅 stack 分支消费;refresh/independent 不读(未来 refresh 行配 M>1 时行为 = 忽略) | -| duration_settlements | D | int [1, 99] | 表列 | 新建实例初始 R;refresh 的重置目标即此值 | -| layers | L | int | stack 行 [1, M];其余恒 1 | 实例层数(越界 = debug 断言,不变式) | -| remaining | R | int | 存活态 [1, D] | 剩余结算次数;归 0 移除(F3) | - -- **Output Range:** 正常域——stack/refresh 行同 id 存活实例数 ≤ 1(不变式);independent 行实例数 = 受理授予数(有界确定);返回值 bool。极端行为——满层授予恒 false 且容器逐字不变(拒绝原子性:无半写、无溢出落层);同轮批量授予的先到先得次序由调用方保证(B1 编排须按确定次序调用 apply_effect——B3 只保证插入序枚举稳定,B1 验收项义务①)。验算示例(attack_up / weaken / dur≥2 探针三例)见推演件问题 3。 - -### F2 有效值合成(effective_value_composition,兑付时只读) - -**结论**:有效值 = L × m 加算(unit 量纲标签原样随值输出、不进乘法);合成值不 clamp、可越出 percent 域——地板/clamp 归 B1 SettlementTable。 - -``` -effective_value(实例) = L × m (unit 随行声明,量纲标签原样随值输出、不进乘法) - stack 行:L ∈ [1, M];refresh / independent 行:L ≡ 1(每实例恒一倍) - 加算语义:percent 行的 L×m 是百分点线性叠加(+50 × 2 层 = +100 个百分点); - 乘算读法(1.5^L)在 B3 语义域外。 - 表注:行值出处(provenance,如"原型 1.5×")是数值来历标注,非合成语义。 -``` - -**Variables:** - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| layers | L | int | 同 F1 | 叠层数 | -| magnitude | m | int | percent ∈ [-100,100] ∧ ≠0;flat ≥ 1(单行字段域,D2 校验) | 行值;合成值不继承此域(见 Output Range) | -| unit | u | enum {percent, flat} | 表列 | 量纲标签;percent = 百分比修正、flat = 固定值;消费语义(乘除侧、地板、单位定义)不在 B3(见排除声明) | - -- **Output Range:** 正常域——percent 行有效值 ∈ [1, 100×M],**可越出 [-100, 100],B3 不 clamp**(合成值地板/clamp 归 B1 SettlementTable——B1 验收项义务③);flat 行 effective ≥ 1。极端行为——weaken 合成下界两档并列:**AP 界 = 8×m_w**(默认 65 → −520%;默认经济下 flag_hit 单轮 ≤ ap_per_round=8 次授予、dur=1 层只在单轮累积 → L=8)与**表界 = 16×m_w**(默认 65 → −1040%;仅非 AP 源如 clear_reward 授予、或 ap_per_round 调参后可达 L=16)——两档均越域,均不在本系统内收口;m_w 值域见 F0。跨 effect_id 聚合、percent 与 flat 混算 = B1 SettlementTable 域(Rule 7)。验算示例(attack_up/defense_up/weaken/ambush 四例)见推演件问题 5。 - -### F3 结算衰减(settlement_decay,轮末执行) - -**结论**:先兑付后衰减——每实例每轮恰 −1、归 0 即销毁(不留 0 值实例)、返回本轮移除数 k;无参数、无豁免实例。 - -``` -decay_round() -> k: - k ← 0 - for 实例 ∈ 容器(插入序枚举,零随机): - R ← R − 1 - if R = 0:销毁实例;k ← k + 1 - return k -``` - -时序契约:**先兑付后衰减**——B1 经 query_active(side) 完成本轮兑付后才调用;duration=1 实例的落点由此完整确定 = 授予当轮编排期入容器 → 同轮兑付恰一次 → 轮末 R=0 移除("一次性"语义的全部机制内容)。停手轮/弃图轮同为结算、照常衰减(无免费延时);最后一轮(敌人全灭)是否 decay 归 B1 判定次序域(A3 EC8 同款——battle_end 全清兜底,两种次序产生同终态)。 - -**Variables:** - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 容器 | — | 实例多重集 | 存活实例全体 | 枚举序 = 插入序(Rule 1 确定性) | -| remaining | R | int | 存活态 [1, D];decay 后 ∈ [0, D−1] | 单调递减;refresh 的 R←D 发生在授予时(F1),不在本式内——两序分离 | -| 返回值 | k | int | [0, 容器规模] | 本轮移除数 | - -- **Output Range:** 正常域——每实例每轮恰 −1,无参数、无豁免实例;k ≤ 调用前容器规模。极端行为——空容器 → k=0;全 dur=1 轮 → k=容器规模(全清);R 恒不因 decay 变负(归 0 即销毁,不留 0 值实例——与不变式 remaining ∈ [0, D] 相容)。验算示例(轮 3 授予-兑付-移除全落点与 dur≥2 探针 R 轨迹)见推演件问题 2。 - -### 显式排除声明 - -本 GDD **无平衡公式**——F1–F3 只承载机制数学(合并/合成/衰减),不含任何"值该多大"的判断;四行 MVP 值全部 provisional。平衡与语义归属: - -| 对象 | 归属 | 依据 | -|---|---|---| -| 效果档位当量对照表(四源统一当量、单一线性换算) | **B1**(出表方兼闭合对账单一签字人) | A3 F1 条款 1 | -| weaken 档位锚(debuff 当量严格 > 最低档安全格 buff 当量,参照对象 = attack_up 行当量;基准 = 连锁放大边际挖掘收益,provisional 1:1) | **B4 表设计 + B1 对照验收** | A3 F1 条款 2 | -| 挖掘风险不等式(P(安全)×buff 当量下界 > P(雷)×敌方增益当量上界;B2 惩罚上限表值) | **B2 供给上限表值,B1 单一闭合对账** | A3 F1 条款 3 | -| 奖励定价(清图奖励及 B4 三硬约束:雾内档位下界 / 锚随雾成本上浮 / 净当量优势带上界) | **B4** | A4 pricing_constraints;A3 F1 条款 4/5 | -| percent 的消费侧换算与地板(乘除侧读法、合成值越域 clamp);flat 的量纲定义 | percent → **B1 SettlementTable**;flat 量纲 → **B2**(已定稿——registry ambush_unit_definition:每层伏击为每次攻击类行为附加 3 点主角 HP 伤害、后置加法) | F2 Output Range;schema 说明列 | -| MVP 四行初值定稿权 | **B3**;B4/B2/B1 持锚验收权,修订走接口漂移回写 registry | Rule 10 | - -规则: - -1. **Rule 7** 容器只记录每个状态的量(幅度数值 + 量纲标签:百分比还是固定值)和还剩几次结算——"增伤加在哪个算式上、先乘后乘、地板怎么收"一律由结算编排的顺序映射表按状态 id 作答;容器知道"现在还有 +50、还剩 1 次结算",不知道这 +50 会变成主角攻击里的什么;B3 只对"L×m 线性合成 + R 计数"负责,合成值多大算强、floor 在哪、+3 打谁,均不在本 GDD 语义域。 - -举证:Rule 7 无计算;语义映射承载面 = B1 SettlementTable(effect_id 为键);B3 只承载 magnitude/unit 两个通用数值字段。 - -## 边界情况 - -| 编号 | 条件 | 行为 | 依据 | -|---|---|---|---| -| EC1 | 域闭状态授予(BattleClosed 下 apply_effect) | 拒绝(false)、容器不变 + debug 诊断——B1 过早/过晚调用 = 编排错误显式暴露,不静默吞 | 实例状态节 API 口径 | -| EC2 | 未知 effect_id | 拒绝(false)+ debug 诊断;表行删除/改名后旧引用的暴露点——悬空引用加载校验 = 首引激活条款:B4 RewardTable 首个 effect_id 引用已回填、校验已激活(registry dangling_ref_policy;条件性夹具 = B4 b4_dangling_effect) | A4 counter_item_ids 同款 · D2 首引兑现 | -| EC3 | 满层授予 | 恒 false 且容器逐字不变(拒绝原子性——无半写、无溢出落层);"溢出未生效"行归 B1 结算明细;同轮多授予谁被拒取决于 B1 授予次序——授予次序确定性是 B1 编排义务 | F1 Output Range · Rule 5 · 义务① | -| EC4 | 空刷新(refresh 行 R 已 = D 再授予) | 返回 true、无任何变化——合法空操作(refresh 无满层/溢出语义);MVP 无 refresh 内容行 = 该语义零消费者,首个 refresh 行上线时须补冒烟 AC;空刷新静默返 true 与 Rule 5"不静默蒸发"存在原则张力——MVP 零消费者故休眠,首个 refresh 内容行上线时其授予可见性语义由 B4/B1 随 OQ3 一并裁决 | F1 决议 · systems-index 登记 | -| EC5 | 同轮 dur=1 行多次授予 | 层在单轮授予批次内累积(L=N)→ 同轮兑付一次(合成 L×m)→ 轮末全移除;跨轮必为新实例——"N 旗 = N debuff 总吞吐"在 B3 侧的呈现 = 单轮层和,对账归 B1 | F1 Example · A3 条款 2 | -| EC6 | 同一事实被重复授予(同 effect_id + origin_cell + round_index 两次 apply) | B3 不去重——容器是 dumb 账本,无从辨别事实合法性,两次授予 = 两层/两实例;事实→授予的恰一次转化归 B1 编排义务(round_end 双发射源同族问题,A3 先例) | 义务② | -| EC7 | 合成值越域(L×m 越出 [-100, 100] 或穿越地板) | B3 不 clamp、值 + unit 标签原样输出——收口归 B1 SettlementTable(B1 验收项:percent→乘数换算方向与地板规则须成文——weaken AP 界/表界、defense_up 叠满三例已在 F2 登记) | F2 Output Range · 义务③ | -| EC8 | 清图换图/弃图刷新 | 容器不清空——状态跨图延续(战斗域非图域);旗标记随图消亡(A2 域)不影响已授予实例;已消费兑付资格的雷格随图消亡(A3 域),新图新雷自然新资格——B3 无从感知也无须感知 | Rule 1 · AC-10 | -| EC9 | 战斗中热重载 StatusEffectTable | 走 D2 既有门(战斗中 reload 拒绝);已授予实例不受任何表重载影响——实例在授予时从表行拷贝数值快照(m/D/unit),热重载只影响后续授予 | A4 EC8"快照非活引用"同款 | -| EC10 | refresh/independent 行配置 max_stack > 1 | 行为 = 忽略(F1 分支不读 M)——内容约定非校验项,validate() 不拒绝(防过度约束锁死未来内容) | F1 · AC-13 | -| EC11 | notify_battle_start / notify_battle_end 重复或错序 | Active 下再 start → false + 诊断;BattleClosed 下再 end → false + 诊断(bool 口径统一,承 A3 输入×相位矩阵同款) | A3 同款 | -| EC12 | query_active 空 side 或空容器 | 返回空 Array——合法状态非错误;D1 HUD 据此渲染"无状态" | D1 空态义务 | -| EC13 | decay_round 在域闭时被调用 | 返回 0——域闭时容器恒空(battle_end 已清),0 是自然结果、无独立分支、不诊断(幂等安全的兜底读法) | F3 极端域 | -| EC14 | independent 行被高频授予 | 实例数上界 = 受理授予数(有界、确定,无满层语义)——MVP 无此内容行;未来 DOT 类高频授予的容量语义归扩展(接口漂移),本 GDD 不预写 | F1 Output Range | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard(数据通道) | StatusEffectTable schema 承载 + ConfigDB 读取;本 GDD 为该表回填 owner(schema + 四行已定稿);新字段走接口漂移规则。systems-index 分层表按其惯例不列纯数据读取边(事实依赖同口径)——两处相容非矛盾 | -| 下游 | B1 | hard | 结算编排期调用五 API:notify_battle_start / apply_effect(三源授予——B1 从 A2/A3 事件收集 round facts 后转化)/ query_active(side) 兑付消费 / decay_round() 轮末衰减 / notify_battle_end() 清空;结算明细来源标注数据源 = 实例字段(P2);效果语义映射与结算作用顺序归 B1 SettlementTable(effect_id 键);F1 条款 1 对照表的"实物"供给方;最后一轮 decay 与否归 B1 判定次序域;义务清单 8 项见下表 | -| 下游 | B4 | soft | 安全格 buff 行值与 weaken 档位的锚验收权(条款 2 + A4 三定价硬约束引用"最低档安全格 buff 当量"——参照对象 = attack_up 行当量);清图奖励若含 buff 经 apply_effect(source=clear_reward,B4 期定);RewardTable 引用 effect_id 的悬空校验已随首引激活(EC2) | -| 下游 | B2 | soft | ambush 行量纲/上限验收锚(条款 3:B2 惩罚上限表 vs B3 行值,对账归 B1 闭合;量纲已定稿——registry ambush_unit_definition);未来敌人词条引用状态(免疫/抗性)为预留注记,不预写 | -| 相邻 | A3 | 契约相邻(零运行时接口) | A3 不调用 B3;条款 1 四源当量对照以 B3 实例为对照实物;标中旗兑付资格(雷格实例键)判定在 A3/A2 域,B3 只接收 B1 转化的授予——资格判定不过 B3 | -| 相邻 | A2 | 间接(零直接接口) | 开格/标中/开雷事实经事件 → B1 收集 → apply_effect;A2 不感知状态容器 | -| 下游 | D1 | soft | query_active(hero) 为 HUD 状态栏数据源(display_name/层数/剩余结算次数常显;EC12 空态渲染);层数/到期变化反馈——义务清单 ×4 见下表 | -| 下游 | B5 | soft | 结算明细/战斗动画的实例字段数据源(经 B1 结算流水;MVP 明细行即呈现,动画归垂直切片)——义务 ×2 见下表 | -| 下游 | D5 | soft | 教学口径:按结算次数计时("还剩 N 次结算"式读法随行值)、战斗结束全清(防"我的 buff 哪去了"误读——A3 RAP 清零教学同款)、满层溢出浪费提示、"同轮拿满优于跨轮叠"教学项(stack 时序补偿——OQ7 证伪项配套,证伪成立前以中性提示形态) | - -### B1 侧义务清单(登记 B1 GDD 验收项,缺项即 blocking——A4 对 A1/A2 登记先例) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| ① | 同轮多授予按确定次序调用(EC3) | B1 | 已落位 B1 GDD(履行回执) | -| ② | 事实→授予恰一次转化(EC6) | B1 | 已落位 B1 GDD(履行回执) | -| ③ | percent→乘数换算方向与合成值地板成文(EC7/F2——AP/表界数值随 F0 修订更新为 −520%/−1040%) | B1 | 已落位 B1 GDD(履行回执) | -| ④ | 最后一轮 decay 判定(F3) | B1 | 已落位 B1 GDD(履行回执) | -| ⑤ | F1 条款 1 效果档位对照表以 B3 实例为对照实物 | B1 | 已落位 B1 GDD(履行回执) | -| ⑥ | 每结算编排恰一次 decay_round()——decay 基数 = 1 是 dur=1 一次性语义与全部衰减语义的先决条件;Active 相位 double-decay 在 B3 侧无守卫(信任 B1 编排,误编排经本义务验收与可回放步骤流暴露) | B1 | 已落位 B1 GDD(履行回执) | -| ⑦ | 结算明细按授予流水逐条标注来源(F1 合并坍缩归因的兑付面补偿——合并实例只持首授 origin_cell/round_index,per-layer 来源还原的数据源 = B1 授予流水) | B1 | 已落位 B1 GDD(履行回执) | -| ⑧ | "溢出未生效"行进结算明细协议(Rule 5 后半的 B1 侧承载;呈现归 B5/D1) | B1 | 已落位 B1 GDD(履行回执) | - -### 呈现与教学义务清单(已登记 systems-index,缺项即 blocking,随各 GDD 门禁评审核对) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| D1-① | HUD 常显 + EC12 空态规格定稿(隐藏栏 vs 空槽由 D1 裁决但须成文) | D1 | 已登记 | -| D1-② | effect_id→icon 映射键契约(art-bible 形状+色相双通道) | D1 | 已登记 | -| D1-③ | 有利/有害极性呈现映射(数据源 = B1 SettlementTable 效果语义,非 magnitude 符号——负值增益存在) | D1 | 已登记 | -| D1-④ | 战斗结束全清的状态栏去留 | D1 | 已登记 | -| B5-① | 溢出行呈现(数据源 = B1 义务⑧明细协议) | B5 | 已登记 | -| B5-② | origin_cell→玩家可读形态(缩略图/格子高亮映射——坐标值本身不直接呈现) | B5 | 已登记 | -| D5 | "同轮拿满优于跨轮叠"教学项(OQ7 证伪项配套) | D5 | 已登记 | -| B4 | 奖励身份预读(stack 时序规划的推理原料——创意风险 #1 切面,OQ7 配套补偿载体) | B4 | 已登记 | - -### 呈现与 UI 契约(数据面义务——B3 无自有渲染面,呈现归 D1/B5) - -| # | 数据面义务 | 归属 | -|---|---|---| -| 1 | HUD 状态栏数据源三要素:图标(effect_id→icon 映射归 D1/art-bible)、层数(L)、剩余结算次数(R)必须可读——时限/剩余次数不可读 = 违反 P1 规划素材与 P2 兑现可见性 | D1 | -| 2 | 结算明细行数据源:display_name + 有效值(L×m)+ unit 标签 + 来源标注(source_class→文案映射归 B1/D1,P2 归因)——"增伤 +100%(第 3 轮 · 安全格)"式逐行读法;origin_cell 玩家可读形态(缩略图/格子高亮)归 B5(坐标值本身不直接呈现);满层溢出提示 = "溢出未生效"行含来源(Rule 5 诚实语义) | B1/D1/B5 | -| 3 | 视觉身份锚适用(game-concept):数值可读性优先于氛围(锚 1)——状态数值在暗色底上须高对比;增益/削弱图标不得只靠色相区分(锚 2 形状+颜色双通道);有利/有害极性不得由 magnitude 符号推导(负值增益存在——数据源 = B1 SettlementTable 效果语义) | D1 | -| 4 | 零信号外发:纯被动容器不发任何事件——呈现刷新点 = B1 结算编排完成后的界面刷新(D1/B5 域);到期/层数变化反馈经 decay 前后查询差分或 B1 流水(D1 裁决);无音频需求(到期/叠加音效归 D4 Alpha 期) | D1/B5/D4 | - -## P0 最小闭环 - -1. B1 战斗开始调 notify_battle_start()——容器开域(空容器)。 -2. A2 开格/标中/开雷事件 → B1 收集 round facts → 转化 apply_effect(唯一进货口)。 -3. 容器按表行 stack_policy 合并受理(新建/叠层/刷新),实例即入 Active、携六归因字段与授予时数值快照。 -4. B1 每轮 query_active(side) 只读兑付——有效值 = L×m(快照)加算合成。 -5. 轮末 B1 调 decay_round():全实例 R−1、归 0 到期销毁(先兑付后衰减)。 -6. 域闭/未知 id/满层授予被拒(false + 容器零写),"溢出未生效"行归 B1 结算明细。 -7. B1 战斗结束调 notify_battle_end():全实例清空、容器回空 → BattleClosed,不跨战斗。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | refresh / independent 首批内容行启用(语义已定义、实现已承载;首个 refresh 行上线时补真实内容行冒烟 AC、夹具探针退役,授予可见性语义随 OQ3 由 B4/B1 裁决) | MVP 四行全 stack、非 stack 语义零消费者——待奖励池引入非 stack 行(B4 期) | -| P1 | clear_reward 源授予路径确认(清图槽含 buff 时经 apply_effect,source=clear_reward;A3 条款 4 差异化插槽——OQ4) | B4 期定稿 | -| P1 | target_ref 单体寻址列(首个单体效果上线时补列;随批 B1 归集语义 / D1 呈现裁决——registry single_enemy_assumption 扩展位义务) | MVP 敌情 side-wide 语义够用,无单体效果内容行 | -| P2 | 驱散 / 延时 / 转移接口(Rule 8 负空间) | 省掉一整类界面与规则复杂度是明确的设计决定;新增 = 接口漂移修订,非调参 | -| P2 | independent 行高频授予(DOT 类)的容量语义(EC14——实例数上界 = 受理授予数,有界确定) | MVP 无此内容行;归扩展(接口漂移),本 GDD 不预写 | -| P2 | 敌人词条引用状态(免疫/抗性) | 预留注记,不预写(B2 域随批裁决) | -| P2 | 随关卡成长的效果行((level_index, node_depth) 维度) | 定义为表非进度成长表(Rule 4 豁免);需要时走接口漂移加列,A4 先例 | - -## 调参表 - -| 字段 | 域 | 默认 | owner | 说明 | -|---|---|---|---|---| -| attack_up.magnitude | percent ∈ [-100,100] 且 ≠0 | +50(provisional——原型 1.5× 换算占位) | B3 定稿;B4/B1 锚验收 | 条款 2 锚参照对象;消费面 = 主角战斗段先手攻击 | -| defense_up.magnitude | percent ∈ [-100,100] 且 ≠0 | −30(provisional——减伤墙批 C3 投值,原 −50) | B3 定稿;B4/B1 锚验收 | 叠满两层 −60 帽;禁独立调参(联动网络见下) | -| ambush.magnitude | flat ≥ 1 | +3(provisional——原型临时值) | B3 定稿;B2/B1 锚验收(条款 3) | 量纲已定稿(B2):每层每攻击类行为附加 m_amb 点主角 HP、后置加法、charge 拍零兑付 | -| weaken.magnitude | percent ∈ [-100,100] 且 ≠0 | −65(provisional,值域 [60, 85]——F0 裁决) | B3 定稿;终值 B4/B1 共裁 | 回执以 B1 GDD F0 为准(registry anchor_warning);越界即破条款 2 锚 | -| duration_settlements(四行) | int [1, 99] | 1/1/1/1(当次结算;provisional) | B3 | 一次性语义;窗口拉长 = 恢复跨轮延续(规划变简单、衰减感消失) | -| max_stack(四行) | int [1, 16] | 2/2/16/16(provisional) | B3 | 仅 stack 消费;调低 = 叠层机制边缘化(重复奖励变溢出浪费) | - -- **非 knob(结构冻结)**:stack_policy 三分支语义、unit 语义、source_class 枚举、时限量纲 = 剩余结算次数(game-concept 定稿)、先兑付后衰减时序、拒绝原子性、零随机——修订走本 GDD 流程非调参。 -- **Knob 交互**:attack_up 与 weaken 是条款 2/3 对账的两端——禁止独立调参,联动评估归 B1 闭合对账;A3 的 ap_per_round 是 weaken 单轮层和的经济上限(F2 AP 界 8×m_w 的来源);效果档位当量对照表(B1)落定前,四行 magnitude 的任何调整都须重跑条款 2/3 锚预检并同步 registry(接口漂移义务)。 -- defense_up.magnitude/duration 已纳入"禁独立调参"联动网络(m_w↔D_ref↔m_d↔duration_d,与 B1 Knob 交互同口径);减伤墙批(−50→−30)即该联动的实证回调;defense_up 叠满 −60% = 当次结算 0.4× 承伤(消费读法归 B1);免伤轮现行可达路径 = weaken 饱和(见 F2)。 -- 逐 knob 调过高/调过低的后果论证见推演件。 - -## 验收标准 - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | B3 是纯行为容器——无场景、无表现面、无加载期自有校验类别。冒烟载体 = `godot --headless --script`(承 D2 冒烟框架;脚本 extends SceneTree 以获得 quit(code)、ConfigDB autoload 由脚本显式实例化);容器经 class_name 直引实例化(每用例全新实例、无跨用例状态——A4 AC-5 直引先例同款;AC-19 扫描对该实例化路径豁免) | -| 被测面 | B1 就绪前冒烟直接驱动 B3 最小 API 面(承 A3"直接驱动最小 API 面"先例);B1 就绪后改走真实调用方(结算编排),断言口径不变。API 面:notify_battle_start() · apply_effect(effect_id, source) → bool · query_active(side) → Array · decay_round() → int · notify_battle_end() → bool | -| 返回口径 | 全部布尔/计数返回 = 受理/拒绝(A3 全 API 布尔口径同款)——"拒绝"直接断言返回值,附 debug 诊断、非进程致命(承 A3 拒绝口径;进程致命保留给 D2 数据通道);decay_round 返回值 = 本轮移除数断言;apply_effect 是唯一授予入口(Rule 3),冒烟直接构造合法 source = {source_class, origin_cell, round_index}(B1 转化产物的冒烟等价——信任方向同 A3 对 chain_size/clears_map 的处理);query_active 为只读、任意相位合法 | -| 只读观测量 | 实例六字段 effect_id · layers · remaining_settlements · source_class · origin_cell · round_index;query_active(side) 元素 = 结算面向载荷投影:六字段 + display_name + 授予时数值快照 (magnitude, unit)(EC9 快照语义 + B5/D1 数据源)——有效值 = layers × 快照 magnitude、unit 标签原样随值输出(F2);枚举序 = 插入序(Rule 6)。相位无字段观测量:BattleClosed/Active 由 API 返回值推断;Expired/Cleared 为销毁态不可观测(瞬态纪律同 A3 RoundEnd) | -| 时序口径 | B3 无 round_start/settlement API——"轮边界"在冒烟中 = 相邻两次 decay_round() 调用之间的授予/查询窗口(B1 编排在 B3 侧的可见面恰为这五个 API);多步 GIVEN 均给出构造序列 | -| 期望值纪律 | magnitude / duration_settlements / max_stack 均为 knob(调参表节)——各 AC 的 THEN 具体数值按当前 ConfigDB 表值推导、不写死(正文以 D_a / M_a / m_w 等表读值记号书写);结构字段(effect_id 集合、target_side、unit、stack_policy)非 knob、定值断言合法;行表"来源"列为内容档案(provenance)非 schema 字段、非运行时约束——B3 不校验 source_class 与行的对应(EC6 dumb 账本同族) | -| 夹具策略 | ① 默认根(干净检出四行 MVP 内容)承载全部分支行为 AC;② 程序构造(schema 类 class_name 直引实例)承载 AC-13 域校验——不经 load()/preload();③ 行为夹具根经 --data-root 注入(仅 debug、不入 data/tables/——D2 夹具纪律),承载 MVP 无行的语义(refresh/independent)。显式声明:夹具测试行非 MVP 内容(Rule 10 四行全 stack;测试行仅供冒烟)。选夹具根而非程序构造注入表的理由:容器经 ConfigDB 单点读表(Rule 2/9)、无表注入 API——--data-root 是 debug/test 构建的既定注入通道;各 AC 声明其表根(默认根/下列三根),用例间无顺序依赖、每用例先 reset_diagnostics()(D2 冒烟协议,全局声明) | -| 致命类收窄 | 恰一根致命夹具 status_effect_dup_key(重复键类别):runner manifest 退出码行 dup→≠0(独立 headless 进程、游戏通道,D2 AC-2b 协议同型)——"游戏内真的会死"在本表上的落点由此腿实证;其余致命类别(枚举域/域校验/跨字段)由 D2 AC-2 同类别 loader 级夹具承载(表无关,豁免声明收窄保留);schema 侧以程序构造断言域类别(AC-13) | -| out-of-scope | deferral 生效条件 = B1 义务清单(依赖节,均已落位):① 同轮多授予先到先得次序(EC3 后半——冒烟单调用方次序即构造序,B1 编排次序 = 义务①)② 事实→授予恰一次转化(EC6 后半——义务②)③ percent→乘数换算方向与合成值地板(EC7 收口半——义务③)④ 最后一轮 decay 判定次序(F3 时序契约的 B1 半——battle_end 全清兜底使两序同终态,冒烟不构造)⑤ 效果档位对照表以 B3 实例为对照实物(义务⑤,对账归 B1)。另有:结算明细"溢出未生效"行与来源标注呈现(冒烟无明细观测量——对侧承载已登记:B1 义务⑧ + B5×2,deferral 生效条件成立);D1 HUD 状态栏与 EC12 空态渲染(D1×4 已登记);效果语义到结算公式映射(Rule 7——B1 SettlementTable 域);Rule 8 负空间(无驱散/延时/转移 API——"无对应 API"不可 GIVEN-WHEN-THEN,验收形态 = 前言 API 面封闭枚举 + 接口漂移修订门);D2 schema 校验致命端到端(双通道协议承载);悬空引用校验(EC2——D2 双通道条件性夹具);EC9 reload 门腿(D2 AC-16 既有覆盖 + B1 是置位/复位唯一调用方——B3 无断言义务);EC8 端到端换图腿(B1 编排合规,AC-10 裁决) | - -### 夹具规格(登记值即相关 AC 的推导基准) - -| 根 | 内容 | 用途 | -|---|---|---| -| status_effect_policy_rows | refresh_probe(display_name="刷新探针" · hero · percent · magnitude=+10 · duration=3 · stack_policy=refresh · max_stack=4——故意违反"refresh 行恒 1"内容约定)+ independent_probe(display_name="独立探针" · enemy · flat · magnitude=+2 · duration=3 · stack_policy=independent · max_stack=1)——全字段域内合法数据 | AC-5 / AC-6(EC4 / EC10 / EC14 载体) | -| status_effect_policy_rows_reloaded | 仅 fresh_probe 一行(hero · percent · magnitude=+20 · duration=9 · stack · max_stack=1);根规格 = D2 全表清单拷贝 + 仅置换 StatusEffectTable 为本单行(缺任一表文件即触发 D2 EC1 文件缺失致命、GIVEN 不可构造——"仅一行"指该表内容非根内容) | AC-15 重载腿 | -| status_effect_dup_key | D2 全表清单拷贝 + StatusEffectTable 置换为默认四行 + 追加一行与 attack_up 同 effect_id 的重复键行(其余字段域内合法)——唯一致命夹具(A4 variation_dup_key 同型):loader 集成缝(loader 是否对本表调用校验)的进程级落点 | runner manifest dup→≠0 | - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | -|---|---|---|---| -| AC-1 | 全新容器(BattleClosed、空;表根 = 默认根) | ① 依次 apply_effect(attack_up, 合法 source)、query_active(hero)、query_active(enemy)、decay_round();② notify_battle_start();③ 再次 notify_battle_start() | ① apply 返回 **false**(EC1 域闭拒绝)、双侧 query 均 = **空 Array**(EC12)、decay 返回 **0** 且诊断收集器零新增(EC13——空容器域闭的兜底读法,非独立分支不诊断);② **true** 且 query 仍双侧空(战斗开始时为空——Rule 1);③ **false**、相位与容器不变(EC11 前半——Active 再 start) | -| AC-2 | Active 且已建账(构造:apply_effect(attack_up) ×1 + apply_effect(weaken) ×1,query 断言含两实例) | ① notify_battle_end();② 再次 notify_battle_end();③ decay_round();④ apply_effect(attack_up, …);⑤ notify_battle_start() | ① **true**、query 双侧空(Cleared 全清、不跨战斗——Rule 1);② **false**(EC11 后半——Closed 再 end);③ **0** 且诊断零新增(EC13 域闭腿);④ **false**(EC1 全场战后腿);⑤ **true** 且容器空(唯一出口——下一场战斗重启,实例状态表) | -| AC-3 | Active | apply_effect("attack_up", {safe_cell, (3,4), round_index=2}) | true 且 query_active(hero) 恰 1 实例,其六字段逐一相等:effect_id="attack_up"、layers=1、remaining=D_a(attack_up.duration_settlements 表读值)、source_class="safe_cell"、origin_cell=(3,4)、round_index=2(P2 归因字段授予即携带——Rule 3,结算明细逐行标注的数据源) | -| AC-4(stack 分支前两腿 + "R 不动" spec 决议) | Active;D_a / M_a 为表读值 | 腿 1:无存活实例时 apply_effect(attack_up, …);腿 2(前提 D_a ≥ 2 ∧ M_a ≥ 2——默认表值 D_a=1 不满足,本腿默认退化跳过 + 显式 SKIP 标记防 CI 静默、不假失败,前提满足时执行;构造 = 腿 1 实例经 decay_round() 一次至 R=D_a−1)再 apply_effect(attack_up, …) | 腿 1:true、新实例 **L=1、R=D_a**;腿 2:true 且 **L=2、R 仍 = D_a−1**——**stack 授予不触碰 R**(F1 注 spec 决议:只有初始授予定钟;实现若重置 R 即三分支失去区分性,本腿即其暴露点) | -| AC-5(refresh 分支 + EC4 + EC10;表根 = status_effect_policy_rows,测试行非 MVP 内容) | Active;D_f=3、m_f=+10(夹具规格登记值) | ① apply_effect(refresh_probe, …);② decay_round() 后 apply_effect(refresh_probe, …);③ R 已 = D_f 时再 apply_effect(refresh_probe, …);④ 再 apply_effect ×2;⑤ 该根经测试通道加载 | ① true、新实例 L=1、R=D_f、载荷 = 1×m_f(refresh 行 L≡1——F2);② 返回 0(R=D_f−1)后 **true、R 重置 = D_f、L 不变**(F1 refresh 正常腿);③ **true 且实例六字段 + 载荷逐字不变**(EC4 空刷新 = 合法空操作——refresh 无满层/溢出语义);④ 均 true(max_stack=4 从不被消费——**EC10 行为 = 忽略**);⑤ 诊断为零(内容约定非校验项——EC10 非校验半句) | -| AC-6(independent 分支 + EC14;同夹具根,测试行非 MVP 内容) | Active;D_i=3(夹具规格登记值) | 同轮授予批次内以互异 origin_cell((1,1)/(2,2)/(3,3)——插入序可观测的前提)apply_effect(independent_probe, …) ×3;再 decay_round() | 全部 true 且 query_active(enemy) 恰 **3 个并存独立实例**(各 L=1、R=D_i、**投影序列 = 授予序** (1,1)→(2,2)→(3,3)——互异 origin_cell 使插入序成为可判定断言,Rule 6 枚举确定性);decay 返回 0(D_i≥2 无移除)且三实例各自 R=D_i−1(F3 逐实例、无豁免);实例数上界 = 受理授予数(**EC14 有界确定**——无满层语义) | -| AC-7(EC6 不去重) | Active 且已有 attack_up 存活实例(L=1,构造同 AC-3) | 以完全相同的 (effect_id, source)(同 origin_cell、同 round_index——同一事实重复转化的模拟)再次 apply_effect | true 且同实例 **L=2**——B3 **不去重**(dumb 账本,无从辨别事实合法性,EC6);out-of-scope:事实→授予恰一次转化归 B1 编排(义务②,deferral 生效条件 = 依赖节清单) | -| AC-8(F3 主式) | Active(构造:apply_effect(weaken) ×2 → 单实例 L=2、R=1;apply_effect(attack_up) ×1 → R=D_a;前提 D_a ≥ 2——第二 WHEN 腿依赖,默认表值 D_a=1 不满足 → 本条退化跳过 + 显式 SKIP 标记(同 AC-4 口径、防 CI 静默),前提满足时执行) | ① decay_round();② 再 decay_round();③ 对空容器 decay_round() | ① 返回 **1**(= 构造中 dur=1 实例数,由表读值推导;weaken 实例移除)、attack_up R=D_a−1 仍在、容器插入序不变;② 返回 1(attack_up 移除——**R 归 0 即销毁,容器无 0 值实例**,与不变式 remaining ∈ [0, D] 相容);③ 0(F3 极端域)。R 轨迹与 k 全部由表值推导 | -| AC-9(EC5 dur=1 单轮叠层 + 一次性全落点) | Active(新轮) | 同轮授予批次内 apply_effect(weaken, …) ×3(N=3 为构造选择,≤M_w 表读值);decay_round();下一轮边界再授予 weaken ×1 | 全部 true、单实例 **L=3、R=1(=D_w 表读值)**、载荷 = 3×m_w(同轮兑付一次的合成输入;N 旗 = N debuff 总吞吐的对账归 B1 条款 2——义务⑤邻接,out-of-scope);decay 返回 1、实例移除;再授予 → **新建**实例 L=1——**跨轮必为新实例**(旧实例已销毁,F1 Example weaken 腿) | -| AC-10(EC8 跨轮/跨图延续——结构性裁决) | Active,attack_up 授予 ×1(R=D_a) | 连续多轮边界仅 decay、无新授予(停手轮/弃图轮的 B3 视角——B3 无图概念、换图/刷新零专用信号);逐步 query | 实例 R 逐轮 −1 **不停摆**(无豁免实例、无参数——**无"不结算就不掉次数"的免费延时**,Rule 2),且每步 query 断言容器非空直至 R 自然归 0——**除 notify_battle_end 外无任何 API 入口使容器清空**(先轮授予的实例按 R 存续至自然到期)。裁决:EC8 的"换图不清空"对 B3 的可测内容 = 本条两句(跨轮延续 + 唯一清空入口);"换图"事件对 B3 不可观测(零接口)——端到端"真实换图下容器仍存续"归 B1 集成(编排契约:仅 battle_over 调 end——B1 API 合规半句,B1 GDD 域,非新增义务) | -| AC-11(EC3 满层拒绝与原子性) | Active;M_a 为 attack_up.max_stack 表读值;构造叠满(M_a 次授予——次数由表值推导、不写死),前 M_a 次均 true、单实例 L=M_a | 第 M_a+1 次 apply_effect(attack_up, …) | **false** 且容器逐字不变——query_active(hero) 恰 1 实例,其六字段 + 载荷 + display_name 与授予前快照**逐项相等**(拒绝原子性:无半写、无溢出落层,F1 Output Range);"溢出未生效"明细行归 B1(out-of-scope,义务①邻接) | -| AC-12(EC2 未知 effect_id) | Active | apply_effect("no_such_effect", 合法 source);表行改名后的旧 id 同理 | **false**、容器不变。政策声明:悬空引用加载校验 = 首引激活条款——B4 RewardTable 首个 effect_id 引用已回填、校验已激活(registry dangling_ref_policy;条件性夹具 = B4 b4_dangling_effect;out-of-scope,D2 双通道) | -| AC-13(加载期域校验全谱——程序构造,class_name 直引,A4 AC-5 同型) | StatusEffectTable schema 类直引实例(不经 load()/preload()) | validate() 分别作用于非法组:percent=0(跨字段 percent≠0)/ percent=101 / percent=−101、flat=0(flat ≥ 1)、duration ∈ {0, 100}、max_stack ∈ {0, 17}、stack_policy/target_side/unit 各一出域枚举值、两行同 effect_id(重复键);再作用于域内代表值 percent ∈ {100, −100, 1, −1}、flat=1、duration ∈ {1, 99}、max_stack ∈ {1, 16} 及 stack_policy=refresh 且 max_stack=4 的行(EC10) | 非法组:各含对应域错误类别;合法组:零诊断(EC10——内容约定非校验项,防过度约束锁死未来内容) | -| AC-14(F2 合成 + EC7 不 clamp) | Active;m 各值为表读值 | 腿 1(percent·stack):apply_effect(attack_up) ×2(前提 M_a ≥ 2——默认满足,M_a=1 时退化为单层恒等断言 + SKIP 标记);腿 2(flat):apply_effect(ambush) ×3;腿 3(越域,EC7):同轮 apply_effect(weaken) ×M_w(M_w 表读值、≤16 同轮批授予合法);腿 4:refresh/independent 行载荷 L≡1 | 腿 1:载荷 = **2×m_a** 且 unit="percent" 标签随值输出(量纲标签不进乘法——F2);腿 2:载荷 = 3×m_amb、unit="flat"(B3 不解释单位——排除声明);腿 3:载荷 = **M_w×m_w 原样输出、无 clamp**("不 clamp"的可判定形式 = 载荷与表值推导值恒相等,任何地板都会使其不等;承载声明:本腿非平凡性依赖默认基线——M_w=16、m_w=−65 → −1040 越出 percent 域;knob 调参使 M_w×m_w 绝对值 ≤ 100 时退化为恒等断言、不假失败,退化时用例输出显式退化标记 SKIP 日志、CI 可见防静默失真;地板/clamp 与换算方向归 B1 SettlementTable——out-of-scope,义务③);腿 4:已由 AC-5①/AC-6 承载(引用不重复) | -| AC-15(EC9 快照 vs 表重载——机制口径) | 表根 = status_effect_policy_rows、Active、已授予 refresh_probe ×1 并 decay 一次(R=D_f−1、载荷 1×m_f) | 冒烟脚本经测试通道换根加载 status_effect_policy_rows_reloaded(load_tables(root, collect_only=true) 直调——非 D2 reload() 路径:不过 set_reload_gate、不发 config_reloaded、无 EC16 语义,门语义归 D2 AC-16/B1〔OQ5〕;reloaded 根规格 = D2 全表清单拷贝 + 仅置换 StatusEffectTable,见前言夹具规格);再 apply_effect(fresh_probe, …)(新 id、无存活实例——refresh 重置目标取实例快照 D 的口径见 F1 注,本腿不涉存活实例重置) | **已授予实例六字段与载荷逐字不变**(授予时拷贝 m/D/unit 数值快照——EC9"快照非活引用",A4 EC8 同款语义;实例为 B3 自持,故 B3 冒烟自测、无需 deferral);fresh_probe → true 且新实例 **R=9、载荷 1×(+20)**(夹具登记值)——**换根只影响后续授予** | -| AC-16(MVP 内容四行) | ConfigDB 默认根加载完成 | 读 StatusEffectTable | **恰含 4 行**、effect_id 集合 = {attack_up, defense_up, ambush, weaken}(定值);target_side:attack_up/defense_up=hero、ambush/weaken=enemy,unit:percent/percent/flat/percent,stack_policy=stack ×4(均非 knob 结构、定值断言合法——Rule 10"四行全 stack");display_name 四值非空(精确值对账归 AC-18);magnitude/duration_settlements/max_stack 仅作类型域断言、期望 = 表读值(knob 纪律——A4 AC-1 同款,防调参打假;行表"来源"列为 provenance 非表字段、不作断言) | -| AC-17(确定性——A3 AC-17 同型;可观测序腿) | 全新容器实例 ×2(同 ConfigDB 默认根;每遍新实例、无跨实例状态) | 同一定长序列驱动两遍:start → defense_up×1 → attack_up×1(同侧双实例、授予序 = 字典序**逆序**——区分"插入序实现"与"字母排序实现"的判别性前提)→ query 投影(hero 恰 2 实例,**投影序列 = [defense_up, attack_up] 定值断言**——插入序的行为级观测点)→ weaken×1 → decay → query 投影 → attack_up×1(并入腿——前提 D_a ≥ 2 成立时并入 L=2;默认表值 D_a=1 时旧实例已销毁,退化为新建 L=1 断言 + SKIP 标记,同 AC-4 口径)→ decay → end → query | 两遍的 query_active 投影序列(**含插入序**)与 decay_round 返回值序列**逐项相同**,且 hero 侧投影序恒 = 授予序(非字典序——零随机 + 插入序枚举的双重行为级证据——Rule 1;D2 AC-15 的 B3 层前身) | -| AC-18(registry 一致——A3 AC-10a 同型,无条件断言;registry 逐字段键) | ConfigDB 默认根加载完成 | 脚本解析 design/registry/entities.yaml 的 status_effect 条目(**逐字段 YAML 键**——机器对账前提,action_economy 同构) | ① fields 八键与 ConfigDB schema 字段名逐一相等、各键的类型/域/枚举描述与 schema 定稿相等(**缺任一键即失败**);② mvp_content 四键 id 集合与表行 id 集合相等,**非 knob 结构字段**(target_side/unit/stack_policy)逐一相等;③ rule4_exemption / dangling_ref_policy 注记存在性断言。knob 活值(magnitude/duration_settlements/max_stack)**不作定值对账**(A4 AC-8 同款——对账口径 = registry 随调参同步〔接口漂移义务〕,本 AC 豁免其值)。生效前提:本条目为定稿回填 + registry 逐字段键重构的产物,AC 生效前提 = 重构回填完成(不写"若存在"软口径——条件化使一致性检查落空,A3/A4 均无条件) | -| AC-19(静态扫描——D2 AC-9/AC-10 模式引用,A3 AC-10b 同型) | B3 文件集(容器/schema/冒烟脚本/夹具规格)纳入 D2 AC-9 模式项目级扫描域 | 静态扫描:randomize() / RandomNumberGenerator / ConfigDB 外 data 表加载 / extends Control / .tscn preload;+ D2 AC-14 人工三要素字面量扫描 | 全部**零命中**(schema 与容器的 class_name 直引实例化豁免——AC-13 前提,A4 AC-7 同款);字面量扫描引用不另设硬 THEN(字面量判定误报率高——D2 已定性 warning 级 + 人工复核);零随机的行为级硬证据 = AC-17 | - -### 覆盖矩阵(qa-lead 交付,验收评审用) - -| 类别 | 映射 | -|---|---| -| Core Rules | Rule 1→AC-1/2/10/17/19 · Rule 2→AC-8/9/10 · Rule 3→AC-3+前言 API 封闭 · Rule 4→AC-4/5/6 · Rule 5→AC-11(明细行→B1 义务⑧+B5×2 已登记)· Rule 6→AC-1/2(decay 次序 OOS)· Rule 7→OOS(载荷只读面 AC-14)· Rule 8→前言 API 封闭+OOS · Rule 9→AC-13/16/19 · Rule 10→AC-16/18 | -| Formulas | F1→AC-4/11(stack)/AC-5(refresh)/AC-6(independent)· F2→AC-14+AC-5①/AC-6 · F3→AC-8/9/10 | -| 边界情况 | EC1→AC-1/2 · EC2→AC-12 · EC3→AC-11 · EC4→AC-5③ · EC5→AC-9 · EC6→AC-7 · EC7→AC-14 腿 3 · EC8→AC-10 · EC9→AC-15 · EC10→AC-5④+AC-13 · EC11→AC-1/2 · EC12→AC-1 · EC13→AC-1/2 · EC14→AC-6——无洞 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排为 design(结论)+ analysis(推演)两件——公式推导与锚定论证、数值锚定过程、体验锚点论证、候选方案取舍、已裁决设计争议、开放问题(OQ1–7)与审计注记移入 `design/gdd/analysis/b3-status-effect.md`;速览/体验锚点/核心规则两段式重排为设计目的/系统范围/领域章节;零规则变更、零数值变更、AC/EC/F/义务编号全部保留 | -| 跨评审 B3 接口漂移批 | 2026-09-14 | /review-all-gdds 🔴-1 前半(减伤墙批回写缺口,registry 同批):defense_up.magnitude −50→**−30**(减伤墙批 C3 投值——叠满两层 −60 帽,defense_scan 墙轮 39%/真人 12 轮零承伤定量坐实)——MVP 内容行/Tuning Knobs/F2 Example 同步;免伤轮叙述同步(defense_up 单侧不可达 D'=0,现行可达路径 = weaken 饱和;F2 三例第三例改 defense_up 叠满读法——对侧 B1 F2 同批);Knob 交互:defense_up.magnitude/duration 纳入"禁独立调参"联动网络(m_w↔D_ref↔m_d↔duration_d);核心规则表增依据列(lint R8 引用列迁移) | -| v1.1-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;散文/枚举/边界/AC 转表格;流程转字符画;公式本体、Variables 表与验算数据全保留;语义与 registry 现行值对齐(weaken −65 = F0 值域 [60,85] · 四行 duration 1/1/1/1 = 当次结算 · enemy 侧 side-wide 多敌读法),零规则变更 | -| 两级奖励批 | 2026-09-11 | attack_up/defense_up duration 2→1(当次结算语义:授予结算兑付后即衰减);attack_up 复活(HeroTable.atk 域 [1,999]、0 加载拒绝——基础攻击恒存在,消费面 = 主角战斗段先手攻击);条款 2 锚参照对象回迁 attack_up 当量;正文原 D=2 行注记与 Knob 表 2/2/1/1 旧行按本批现行值改写 | -| F0 裁决回执批 | 2026-09-10 | weaken −25 → 值域 [60, 85]/默认 −65(B1 GDD F0:归一口径 = 每结算瞬时当量,总暴露分支被 percent schema 域禁止排除——条款 2 锚红警关闭,锚两腿 7.8 > 6.0 / 7.8 ≥ E_dig 7.2 通过);B1 义务①–⑧履行回执落位;B3 正文回执以 B1 GDD F0 为准(registry status_effect.anchor_warning) | -| 单敌假设回验批 | 2026-09-09 | B2 定多敌模型(1–3 个同敌种敌单位)——Core Rule 1 单敌假设回验不成立,效果 side-wide 语义改"全体存活敌单位"(层数 = side 共享池,B3 现接口零变更兼容);target_ref 单体寻址 = 扩展位义务(首个单体效果上线时 B3 补列,随批 B1 归集语义/D1 呈现裁决)——registry single_enemy_assumption | -| Rev 1 | 2026-09-09 | design-review 7 项 blocking 同日核销:enemy 侧单敌假设入文(后经上批回验改写)· B1 义务 5→8 · D1/B5/D5 呈现义务登记 systems-index · AC-15 机制更正 + reloaded 根全清单规格 · 致命夹具补根 dup_key · AC-18 随 registry 逐字段键重构 · weaken 红警补修复空间不对称 + OQ1 归一口径前置 · stack-不重置 R 登记 OQ7 playtest 证伪项——明细见 reviews/b3-status-effect-review-log.md | -| v1 | 2026-09-08 | 一次会话定稿:三结构决策(单一计数/按行叠层/四行定稿权收编)用户拍板;lean 门禁 systems-designer 起草 Formulas · qa-lead 起草/验证 AC;CD-GDD-ALIGN 按 lean 跳过 | diff --git a/design/archive/gdd-2026-09-14/b4-reward-item-economy.md b/design/archive/gdd-2026-09-14/b4-reward-item-economy.md deleted file mode 100644 index 9573005e..00000000 --- a/design/archive/gdd-2026-09-14/b4-reward-item-economy.md +++ /dev/null @@ -1,549 +0,0 @@ -# B4 奖励与道具经济(Reward & Item Economy) - -> **状态**:In Review → Revised(14 条 blocking 已核销,待 delta 复核放行) · **版本**:v2 · 2026-09-14 -> **一句话**:定义扫雷决策的兑现物——奖励是什么、值多少、怎么随机、怎么入库。 -> **推演件**:`design/gdd/analysis/b4-reward-item-economy.md`(本文件只收结论,理由在那里) -> **承载支柱**:P2 主(奖励是"扫雷的因"的兑现物)· P3(安全格价值侧)· P1(奖励身份可预读 = 规划素材) - -## 设计目的 - -B4 是战斗域奖励层——"奖励是什么、值多少、怎么 roll、怎么入库"的唯一 owner 与 D2 RewardTable 回填权持有方。缺位后果:P2"规划的延迟兑现"无兑现物;当前内容态敌人不可被击杀,胜利路径判定素材悬空;A4 三条定价硬约束(雾内档位下界 / 清图锚上浮 / 净当量带上界)无承载对象,安全格价值体系无从校准。 - -1. 每个安全格必有货,开格瞬间"这格有货"——我在地牢里淘东西,不是在领系统发放的补偿。 -2. 危险的地方货更好——雾区/高危区档位下界更高。 -3. 这格是增伤——看得见才留得住:已开格与库存的奖励身份恒定可读、不变卦。 -4. 先是一份捡到的战利品,其次才是一行结算数据——拾取入库,轮次结束在结算明细逐行兑付。 -5. 囤刀待机、看准重击拍再用——道具是整个关卡的资产,库存规划跨战斗延续。 - -| 反向护栏 | 处置 | -|---|---| -| 奖励的随机只发生在桌下(roll 决定这格是什么),身份永远在桌上(开格后恒定可读) | 任何"开格后仍不可读""结算时才揭示身份"的呈现设计默认砍掉 | -| 拾取的糖不得改成即时生效 | 绕过 B1 结算统一兑付即违反 P2 归因 | - -## 系统范围 - -负责: - -- 奖励类型封闭枚举(五值)与两级交付轴(即时类当场兑付 / 可选类入库存走窗口) -- RewardTable / RewardConfigTable 的 schema 与内容回填(D2 建表,本系统 owner) -- 供给控制器 RewardSupplyController——install 期战斗首件保证 + 指数递减注入 -- install 期奖励身份预分配(reward_roll 封闭流为唯一随机入口)与板级映射容器 -- 分流 / 入库 / 库存查询接口与关卡域库存容器 -- F1–F6 数值供给与失衡预警①–⑧ 预注册 - -不负责: - -- 何时兑付、结算顺序、明细行协议(B1) -- 棋盘资格事实(A2——零直接接口,经 B1 转化) -- buff 时限 / 叠层 / 衰减(B3) -- 棋盘侧功能道具(A5,垂直切片) -- 关卡大奖励 / 代币 / 天赋(C2 / C4) -- 伤害与治疗施加、守卫判定、敌存活集与血量读取(B1 编排) -- 数值调参所有权(C3——本系统只定结构、域与 provisional 默认) -- "关卡结束"事件定义(C1 / C2) -- 一切呈现(D1 / B5 / D4 / D5) - -## 核心循环 - -``` -board install(B1 编排) - │ ① roll_board(资格格清单 = S ∖ R₀) [B4] 恰一次;消费 reward_roll 封闭流恰一 scope 批 - │ ├ 行主序逐格取号 → 格奖励身份(雾格过 F2 档位过滤) - │ ├ 批尾一号 → 清图身份(F3) - │ └ F5 保底校验不过 → 草稿整批弃用、同 scope 续流重 roll(≤ N_draft 次,超出致命) - │ ② 板级双映射(格→reward_id;清图→reward_id)→ Ready(只读) - ▼ -挖掘期(身份恒定可读;A2 资格事实经 B1 转化——B4 零直接接口) - ▼ -轮次结束 → 结算编排(B1 段序骨架) - │ ③ 授予段:逐格 grant(cell) → 预分配身份快照,按 category 分流 - │ ├ buff 类 → B1 调 B3 apply_effect(满层拒绝 → "奖励未生效"行,零折算) - │ ├ instant_aoe → 当场兑付:全体存活敌各 power 点(不进库存不出窗口) - │ ├ instant_heal → 当场兑付:主角 +power(clamp;满血 → "奖励未生效"行零兑付) - │ └ damage_item / heal_pack → stock() 入关卡域库存 - │ ④ cleared 轮:grant_clear() → 预分配清图身份兑付(分流同上;恒非空) - ▼ -⑤ 道具使用窗口(授予段后、增益/减益段前——玩家至多选用一件或跳过) - ▼ -⑥ 道具段 → ⑦ 战斗段 → ⑧ 衰减段 → ⑨ 判定段 - ▼ -battle_over:retire_mapping(板级映射消亡,不跨图;库存不清——跨战斗延续) -``` - -| 时点 | 触发 | B4 接口 | 约束 | -|---|---|---|---| -| board install 后、挖掘前 | B1 编排恰一次 | `roll_board(资格格清单)` | 消费 reward_roll 恰一 scope 批(格批 + 清图批尾);Ready 后再调 → false + 诊断;空清单 → debug 断言中止 | -| 结算授予段 | 每格受理事实 | `grant(cell)` | 返回预分配快照;同格重复受理幂等(同快照 + 诊断);清单外 → false + 诊断 | -| cleared 轮授予段 | cleared 结算 | `grant_clear()` | 恒非空兑付;同批重复调用幂等(同身份 + 诊断) | -| 授予段(道具类) | grant 返回道具类后 | `stock(item)` | 仅受理 damage_item/heal_pack;来源真值归 B1、B4 不校验 | -| 道具使用窗口 | 玩家选用 | `use(handle)` | InStock→Used 不可逆;零游戏态前置守卫;Used 句柄 → false + 诊断 | -| battle_over | 战斗结束 | `retire_mapping()` | 板级映射消亡(下一场战斗新板新批);库存不清 | -| 关卡结束 | 上层显式编排 | `clear_inventory()` | 恰一次;重复 → false + 诊断(幂等守卫) | - -## 奖励类型与数据表 - -### 奖励类型(封闭枚举五值)与两级交付轴 - -规则: - -1. (规则 1)奖励系统发出的一切只从五种类型里出,数据表里出现别的类型直接拒绝加载;三种即时类在发奖那一刻当场兑现——不进背包、不用玩家选;两种可选类先放进关卡背包,由玩家在结算窗口里自己挑时机用,数量少但更强。 -2. 预留值(resource / aux_item 等)校验拒绝(fail-fast);启用走本 GDD 修订。想加第六种类型 = 修订本 GDD,不是调参数。 -3. (规则 7)治疗分两档:instant_heal 小额当场回(满血零兑付记"奖励未生效"行);heal_pack 稀缺强治疗进背包挑时机,满血使用被拒且不消耗——守卫由 B1 读主角血量判定,B4 零跨系统读;usable_now 可用性预判由 B1 组装进窗口数据供界面禁选/提示。 -4. buff 类 effect_id 为 B3 StatusEffectTable 精确引用;首个引用行回填激活 B3 悬空校验(此前不校验),悬空即加载期致命(D2 通道)。 - -| category | 交付类 | 玩家拿到什么 | 兑付方式 | 字段消费 | 拒绝语义 | -|---|---|---|---|---|---| -| buff | 即时 | 一层临时增益(增伤/减伤) | 授予段当场:B1 调 B3 apply_effect 入状态容器,时长 = 当次结算(attack_up/defense_up D=1) | effect_id 必填;power 不消费——非校验项 | 满层 → "奖励未生效"行(可聚合计数),无折算 | -| instant_aoe | 即时 | 群体攻击 | 授予段当场:全体存活敌各 power 点(逐个 apply_damage、受击即死;恒定表值) | power ≥ 1 | 零存活敌 → "奖励未生效"行零兑付 | -| instant_heal | 即时 | 小额即时回血 | 授予段当场:主角 +power(clamp 不超上限) | power ≥ 1 | 满血 → "奖励未生效"行零兑付(不进库存无消耗语义) | -| damage_item | 可选 | 伤害道具(刀) | stock 入关卡域库存 → 窗口选用、道具段固定顺位打敌 | power ≥ 1 | — | -| heal_pack | 可选 | 强效治疗包 | stock 入关卡域库存 → 窗口选用回血 | power ≥ 1 | 满 HP → B1 守卫拒绝(不烧包;usable_now 禁选/提示) | - -设计意图:可选类数量少但更强,治疗整体供给变少、决策价值变高——"治疗是稀缺奖励"。 - -### RewardTable schema(D2 承载,B4 回填 owner) - -规则: - -1. (规则 9)每条奖励是什么、值多少、多强全部来自 RewardTable——改奖励就是改表行,不用动代码;表身份 = 定义表(非进度成长表),主键 reward_id(Rule 4 豁免,B2/B3 同款声明纪律)。 -2. RewardConfigTable = 单行全局参数表(HeroTable 单行全局先例);两表由 D2 建表、本 GDD 回填,回填走 D2 接口漂移规则回写。 - -| 字段 | 类型/范围 | 说明 | -|---|---|---| -| reward_id | String(表内主键) | 实体键精确匹配(D2 Rule 4) | -| category | enum {buff, damage_item, heal_pack, instant_aoe, instant_heal} | MVP 校验域(五值);预留值拒绝(规则 1) | -| effect_id | String(可空) | buff 类必填——B3 StatusEffectTable 精确引用;非 buff 类恒空 | -| display_name | String(非空) | 玩家可读名(D1 义务①/窗口呈现数据源;本地化归 D6——B2/B3 同库惯例) | -| power | int [0, 999] | 伤害道具伤害值 / 治疗包回复值 / 即时类数值(knob);buff 类不消费——非校验项(B2 heavy_multiplier 先例) | -| weight | int [0, 999] | 所在池内 roll 权重(knob);0 = 该池不出此行(合法极端) | -| pool_tag | enum {safe_cell, active_inject, clear_default}(+ clear_ 预留) | roll 池分组——格奖励池 / 供给控制器注入池 / 清图默认槽;雾区档位过滤谓词见 F2 | -| tier | int [1, 8] | 强度档位(A4 雾内档位下界约束的载体;knob) | -| use_timing | enum {pre_settlement} | 使用时机(MVP 唯一值;game-concept 预留字段的兑现——扩枚举走修订) | - -RewardConfigTable(单行全局六配置): - -| 配置 | 域 | 默认 | 说明 | -|---|---|---|---| -| T_fog_min | int [1, 8] | 2(provisional) | F2 雾区档位过滤门限 | -| K_dmg | int [0, 999] | 0(provisional——现行默认 = 保底断言关闭,语义由供给控制器战斗首件保证取代;no_damage_row 加载后闸托底零活刀行世界) | F5 伤害道具保底下界,仅计 damage_item | -| N_draft | int [1, 999] | 32(provisional) | F5 草稿重 roll 上限 | -| P_min | int [1, 999] | 8(= 默认根最低刀 power) | K_dmg ≥ 1 供给闸刀力下界(floor_supply_missing) | -| active_p0 | float [0, 1] | 0.4(provisional) | 供给控制器首件后每张新板注入概率初值;E[战斗获取] ≈ 1 标定目标 | -| active_decay | float (0, 1] | 0.5(provisional) | 注入概率指数递减(0.4→0.2→0.1→…永不绝育);加难杠杆候选 0.6 随 C3 OQ7 扫描 | - -### 默认根内容行(值 provisional 归 C3;溯源 = 原型 v3 锚 HERO_MAX_HP=50 + 概念原型 HERO_BASE_ATK=6) - -| reward_id | category | power | weight | tier | pool_tag | 说明 | -|---|---|---|---|---|---|---| -| defense_up_basic | buff | —(不消费) | 16 | 2 | safe_cell | 当次受伤减免(B3 defense_up D=1)——减伤墙批 24→16(attack_up 升池内最高行) | -| attack_up_basic | buff | —(不消费) | 20 | 2 | safe_cell | 当次主角攻击增伤(B3 attack_up D=1——复活后首批入池) | -| spark_aoe | instant_aoe | 4 | 16 | 1 | safe_cell | 群体攻击:全体存活敌各 4 点 | -| heal_minor | instant_heal | 4 | 15 | 1 | safe_cell | 即时小额回血(满血零兑付行) | -| knife_t1 | damage_item | 8 | 60 | 1 | active_inject | 可囤可择时的基础刀(供给控制器注入池) | -| knife_adv | damage_item | 16 | 30 | 2 | active_inject | 雾档升级刀(注入池) | -| heal_pack | heal_pack | 12 | 10 | 2 | active_inject | 稀缺强治疗(注入池——可选治疗唯一形态) | -| clear_blast | instant_aoe | 40 | 1 | 2 | clear_default | 清障炸药:清图槽当场兑付全体存活敌,不入库不占可选类供给(完美板 ×2 = 80——原 clear_knife 入库刀由本行换位替代) | - -- 归一占比:格子池四行即时类合计 67;可选类三行移出格子权重池 → active_inject 注入池(供给控制器 install 期注入:战斗首件保证 + 指数递减 0.4→0.2→0.1→…,E[战斗获取] ≈ 1 标定目标)——原"格子权重 75/25 两类占比"由注入机制替代承载;治疗 = heal_minor(格子池)+ heal_pack(注入 10%)。 -- tier_min_buff = 2;T_fog_min = 2 → 雾池 = {defense_up_basic, attack_up_basic, knife_adv, heal_pack}(四行,非单一化)。 -- AC-19 对账对 = (knife_adv, attack_up_basic)(雾池最低活档行 ≠ tier_min_buff 行——非平凡判别保持)。 - -## install 期身份预分配(roll、过滤与保底) - -### 预分配规则 - -1. (规则 2)B1 把一张新扫雷图装好后、玩家挖第一下之前调一次"摇号":按行主序给这张图上所有够格出奖励的格子(开局已翻开的安全格除外)逐一摇出各自的奖励,同一次摇出清图奖励,写进这张图的映射表;同图跨轮不变,换图或战斗结束映射随之消亡。 -2. 随机只发生在这一次摇号里;之后发奖、用道具都不再掷任何骰子,道具威力就是表里写死的数值。 -3. (规则 8)已开格与背包里每件道具的身份任何时候可查——不是查询时现算;映射就绪后只读,不存在任何重摇接口,谁加重摇入口谁就是在改接口(走 GDD 修订非调参)。 -4. 没挖开的格子当前版本不显示里面是什么(结构上已定也查得到,留给探测类道具桥接与后续呈现决策)。 -5. (规则 10)B4 不订阅任何事件、不画任何界面、除开局那次摇号不用任何随机数;查询口与操作口摆在那里,什么时候调、按什么顺序调全由 B1 说了算;棋盘那边发生什么 B4 从不直接看——事实都经 B1 转化后递过来。 - -设计意图:身份在桌下摇定、在桌上恒定可读——随机只有一次,之后全是兑付。 - -### F1 身份 roll(weighted_pick,install 期执行) - -**结论**:每资格格恰一身份、清图槽恰一身份——weighted_pick 累积区间选行、0 权行取号前剔除、单行池退化合法;Ready 后映射只读。 - -``` -资格格集 = S ∖ R₀(安全格减初始展开域——initial/mine 通道恒不 eligible,install 期可精确枚举) -行主序逐格取 reward_roll 一号 r ∈ [0, W):身份 = 累积权重区间 [Σw_{0} ∩(雾格 ? {tier ≥ T_fog_min} : 全体);weight=0 行取号前剔除 -批尾取一号 roll 清图身份(F3;批尾 = 同一批取号中最后消费的一个号——registry terminology 已登记) -→ 双映射提交 Ready -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 取号 | r | int | [0, W) | reward_roll 流单号(F1/F3/F5 消费) | -| 权重 | w | int | [0, 999] | RewardTable.weight;0 = 不入池(取号前剔除) | -| 雾档门限 | T_fog_min | int | [1, 8] | F2;RewardConfigTable 配置值 | -| 资格格集 | S ∖ R₀ | 格集合 | 板级 | B1 供清单(义务⑥) | - -| 项 | 内容 | -|---|---| -| Example | 三行 w=2/1/1,W=4,r=3 → 第三行(区间 [3,4)) | -| 池空裁定 | 过滤后零行 = 结构性不可达——D2 加载期校验致命(每 pool_tag × 雾/非雾两态各 ≥1 行 weight>0);单行池退化为恒等选取(合法极端) | -| 边界 | 流 scope = 每次 board install 恰一批;消费序与恰一次归 B1;Ready 后只读(F5 草稿重 roll 发生在提交前,不变式零触碰) | - -### F2 雾区档位过滤(fog_tier_gate) - -**结论**:雾格池 = {tier ≥ T_fog_min}、非雾格池 = 全 tier(谓词恒真、零分支);T_fog_min = RewardConfigTable 表值(默认 2 provisional);T_fog_min=1 → 雾池=全池(过滤退化合法,A4 约束①仅剩锚侧兜底);=8 → 仅最高档(非空由 F1 校验保证)。 - -``` -雾格池 = {tier ≥ T_fog_min};非雾格池 = 全 tier(谓词恒真、零分支) -``` - -| 项 | 内容 | -|---|---| -| Example | T_fog_min=3 时雾格恒不出 tier≤2 行 | -| 边界 | 链开雾格同雾格待遇(A2 EC4);参数归 C3;A4 硬约束① = 验收锚非运行时校验——对照表落定/调参时核对"雾池最低档行当量 ≥ 最低档安全格 buff 当量" | - -### F3 清图奖励 roll(clear_reward_roll) - -**结论**:槽谓词 = clear_(板 biome 匹配 ∧ 池非空)否则 clear_default(MVP:clear_ 行校验拒绝 → 恒退化 clear_default,结构位保留);恒非空的可判定形式 = 恒有正当量行(power=0 道具行被拒——A3 条款④"清图奖励>0"的表侧兑现);空池致命(同 F1 裁定)。 - -``` -槽谓词 = clear_(板 biome 匹配 ∧ 池非空)否则 clear_default -MVP:clear_ 行校验拒绝 → 恒退化 clear_default(结构位保留) -恒非空 = 加载期校验:clear_default 池 ≥1 行 weight>0 ∧(buff 行 effect_id 非空 ∨ 道具行 power ≥ 1) -roll = install 批尾一号,选行算子同 F1 -``` - -| 项 | 内容 | -|---|---| -| Example | 命中 heal_pack(power=3) → cleared 轮 grant_clear 入库存 | -| 边界 | roll 在 install 批、兑付在 cleared 结算编排期(零随机出 roll_board 一线);图类型战斗域恒定、不逐图重掷 | - -### F5 伤害道具保底(damage_item_floor) - -**结论**:每板可选伤害保底 \|{c ∈ 资格格 \| 身份(c).category = damage_item}\| ≥ K_dmg——执行 = roll_board 内"草稿-校验-提交",不过则同 scope 续流重 roll、超 N_draft 致命;K_dmg=0 = 断言关闭(现行默认——刀保底语义由供给控制器战斗首件保证取代,no_damage_row 后闸托底零活刀行世界);基础攻击在场后本保底为内容健康护栏非胜利路径闸。 - -``` -断言 |{c ∈ 资格格 | 身份(c).category = damage_item}| ≥ K_dmg -执行 = roll_board 内"草稿-校验-提交":不过 → 草稿整批弃用、同 scope 续消费流重 roll(全序确定、可回放) -超 N_draft 次(RewardConfigTable,默认 32 provisional)→ 致命(权重配置错误,fail-fast) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 保底下界 | K_dmg | int | [0, 999] | RewardConfigTable 配置;默认 0;仅计 damage_item(保底对象 = 可选类伤害——玩家可控时点的伤害资源;即时类 instant_aoe 自动兑付无规划面,不计) | -| 重 roll 上限 | N_draft | int | [1, 999] | RewardConfigTable 配置;默认 32 | -| 供给闸刀力下界 | P_min | int | [1, 999] | RewardConfigTable 配置;默认 8 = 默认根最低刀 power | - -加载期护栏(两条致命): - -| 护栏 | 断言 | manifest 行(根) | -|---|---|---| -| (i) 供给闸 | K_dmg ≥ 1 ⇒ safe_cell 池存在 power ≥ P_min 的活 damage_item 行 | `floor_supply_missing`(根 `b4_floor_supply`) | -| (ii) 零伤害后闸 | K_dmg = 0(断言关闭)⇒ safe_cell ∪ clear_default 仍须含 ≥1 活 damage_item 行(内容健康护栏、非胜利路径闸;与 B2 OQ9 并案登记同一 owner) | `no_damage_row`(根 `b4_nodamage`) | - -| 项 | 内容 | -|---|---| -| Example | 12 格板首稿 0 件刀 → 弃稿重 roll,次稿 1 件 → 提交 Ready | -| Output Range | K_dmg=0 = 断言关闭(现行默认——no_damage_row 后闸托底);\|资格格\| < K_dmg 恒不过 → 重 roll 耗尽致命,暴露配置错误 | -| 边界 | 断言仅计格奖励身份(清图槽不计);归 B4 自身,B1 仅编排恰一次调用;重 roll 全部发生在提交前(Unrolled 态),确定性 = 同 scope 消费轨迹的确定函数 | - -### 供给控制器(RewardSupplyController) - -| 面 | 语义 | -|---|---| -| 机制 | install 期注入:战斗首件保证 + 指数递减——机制本体归本 GDD | -| 注入池 | pool_tag = active_inject:knife_t1 / knife_adv / heal_pack 三行可选类(由格子权重池移入) | -| 递减 | 首件之后每张新板注入概率 active_p0=0.4 起、按 active_decay=0.5 指数递减(0.4→0.2→0.1→…永不绝育) | -| 标定 | E[战斗获取] ≈ 1;加难杠杆候选 decay 0.6 随 C3 OQ7 扫描 | - -设计意图:可选类供给由机制保证而非格子概率——首件必有、后续递减、永不绝育。 - -## 结算分流与道具兑付 - -规则: - -1. (规则 3)轮次结束结算时,B1 对每个捡到奖励的格子来领一次奖,B4 交出早已定好的身份,按类型分路(分流表见「奖励类型」节)。 -2. 增益挂满层挂不进去时,这份奖励不予兑付、不给任何折算补偿,只在结算明细里明写一行"奖励未生效"——不静默蒸发。 -3. (规则 6)玩家把一张图的雷全部清完时,结算给一份清图奖励:身份早在图装上桌时与格子奖励同批摇好,按同样三条路兑付;它永远不会落空——数据加载时强制保证清图奖池里至少一行有实际价值的内容,"清图奖励 > 0"是定价约束钉死的。 -4. 按地形/图类型换不同奖励池是预留插槽,MVP 只有一个默认槽(clear_default);同一张图类型不变,清图奖励不重摇。 -5. 清图槽身份为 buff 行且授予时已满层 → 零兑付 + "奖励未生效"明细行(合法例外;清图槽允许 buff 行入 clear_default 池;监控 = 预警④清图槽 buff 零兑付单独计数)。 - -### F4 道具段与即时类效果式(item_and_instant_effects) - -**结论**:道具伤害恒定表值不吃任何 percent 修正;治疗 clamp hp' = min(hp + power, max_hp);满血拒绝/零兑付拦在消耗前;attack_up 唯一消费面 = 主角战斗段先手攻击(只乘基础攻击、不乘刀)。 - -``` -伤害道具(可选类,道具段):D = power(恒定表值——不吃任何 percent 修正) - 目标 = 固定顺位最前存活敌(B2 Rule 7),一次性消耗 -治疗包(可选类,道具段):可用 ⟺ hp < max_hp(满 → 拒绝、不消耗);hp' = min(hp + power, max_hp) -即时群伤 instant_aoe(即时类,授予段当场):对全体存活敌各 D = power(逐个 apply_damage、受击即死); - 零存活敌 → 零兑付"奖励未生效"行(结构性难达——授予段先于道具/战斗段,敌集空仅剩防御分支) -即时回血 instant_heal(即时类,授予段当场):可用 ⟺ hp < max_hp(满 → 零兑付"奖励未生效"行,不进库存无消耗语义); - hp' = min(hp + power, max_hp) -buff 类(即时类,授予段当场):B3 apply_effect;时长 = 当次结算(attack_up/defense_up D=1—— - buff 兑付窗口 = 授予段至本结算衰减段) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 道具威力 | power | int | [1, 999] | RewardTable.power(category ∈ {damage_item, heal_pack} ⇒ power ≥ 1 加载校验);恒定表值非 roll 值 | -| 主角血量 | hp / max_hp | int | [0, 999] | B2 查询(B1 编排读值做守卫——B4 零跨系统读) | - -| 项 | 内容 | -|---|---| -| attack_up 口径 | HeroTable.atk 基础攻击恒存在(域 [1,999]、0 加载拒绝——B2 Rule 9)→ attack_up(+50%)复活:唯一消费面 = 主角战斗段先手攻击(伤害算式归 B1 战斗段);"道具不吃修正"拍板不变——attack_up 只乘基础攻击、不乘刀;是否入默认根池随奖励改造批裁决(OQ1);A3 条款 2 锚参照对象 = attack_up 当量(换算归 B1 条款①对照表——B4 只供行值清单;B3 锚预警裁决前置不变) | -| 弱化面排除 | weaken/defense_up 不入本式(敌输出侧/主角承伤侧,B2/B1 域);读值时点 = 道具段、施加归 B1(B4 零跨系统读) | -| Output Range | D = power(恒定);hp' ∈ [hp, max_hp](clamp 式上界——满血分支被拒绝守卫拦在消耗前) | -| Example | power=6 伤害道具 → 顺位最前敌 −6;重击拍前用刀击杀 → 该敌重击永不兑现(B2 死亡即不动手的道具形态);满血(hp=max_hp)用治疗包 → 拒绝、库存不减 | -| 边界 | 取整无涉(全整数);使用守卫(满血)归 B1 编排(义务④);hp=0 在窗口时点结构不可达——不定义复活语义 | - -## 库存与道具使用窗口 - -规则: - -1. (规则 4)道具背包属于整个关卡,不属于某一场战斗:换了地图、打完一场战斗,包里的东西都还在,直到整个关卡打完(无论输赢)才由 B1 一次性清空;每一件都记着从哪个格子的哪一轮捡到,结算能追溯来源;数量没有上限——稀缺感靠掉落权重控制,不靠背包容量。 -2. (规则 5)每轮挖完,结算按固定顺序走:先发放这轮捡到的全部奖励,然后弹出道具使用窗口——玩家至多选一件背包道具用掉,或者跳过;之后才轮到增益减益、道具生效、战斗、衰减、判胜负。窗口一次只能用一件(想一次用多件 = 改规则,不是调参数)。 -3. 道具段排在战斗段之前——这轮刚捡的刀可以先削血、把敌人打进"死亡即不动手","重击拍前用刀"由此成立;伤害道具固定顺位 = B2 Rule 7 默认目标。 - -### 道具使用窗口 - -| 面 | 语义 | -|---|---| -| 时机 | 授予段之后、增益/减益段之前——当轮拾取的道具当轮即可用(末图清图奖励同结算窗口可选用) | -| 载荷 | B1 编排组装:`query_inventory` 逐件实例(item_id + 来源 {cell, round} + 行值快照投影 + 状态;枚举序 = stock 受理序)+ B1 侧守卫预判 usable_now(满血治疗包禁选/提示——B4 零跨系统读不变) | -| 选择 | 至多选用一件或跳过;选择序列 = 结算回放输入事件;窗口期选择收集与棋盘输入不竞争(A2 单意图帧先例) | -| 消耗 | 一次性 Used 不可逆;零效果判定(施加时无存活敌)归 B1 读 B2 存活集 → "已消耗未生效"行;B4 `use` 零游戏态前置守卫(存活集/血量对 B4 不可见) | -| 空库存 | 零使用恒合法(跳过恒合法);呈现归 D1(可整体不弹窗;窗口触发政策:MVP 有库存恒弹,候选"仅可用品触发/常驻库存条非模态"归垂直切片) | - -设计意图:可选类道具是"关内资产"——囤着一把刀等整个关卡里最好的时机,而不是"这场不花就没了"。 - -## 状态与边界情况 - -| 容器/条目 | 状态 | 进入 | 出口 | -|---|---|---|---| -| 板级奖励映射 | Unrolled → Ready → Retired | install 后 roll_board 恰一次 → Ready;Ready 期间只读 | retire_board/换图 → Retired(消亡,不跨图) | -| 库存条目 | InStock → Used → Cleared | stock 授予 → InStock;窗口选用消耗 → Used(不可逆) | 关卡结束 → Cleared(clear_inventory——库存跨战斗延续后于关卡末清空;battle_over 只退役映射不清库存) | - -不变式:Ready 后映射零写入;Used 不可逆;库存条目仅存在于关卡域(跨战斗延续)。违规 = debug 断言中止(进程致命保留给 D2 数据通道)。 - -| 编号 | 条件 | 行为 | -|---|---|---| -| E1 | 资格格集为空(S ∖ R₀ = ∅) | 三层防线——① A1 生产面 R₀ ≠ S 合法性闸(修订义务已登记、未落地);② A2 install 不变式④现行已生效(R₀=S 板装板即拒,B4 在其后序恒见非空集);③ B4 roll_board 致命(fail-fast 兜底,对偶于 F1 池空裁定)。B4 零静默回退 | -| E2 | 战斗结束时仍有未开资格格 | 其预分配身份随映射 Retired 消亡——零授予、零明细行(未拾取 ≠ 溢出:从未发生的事不进结算,非静默蒸发) | -| E3 | 同一结算多格授予同类 buff 超过 max_stack(连锁批量 13 格链 × max_stack=2) | 按规范序逐格受理,满层起 apply_effect 返回 false → 各产一行"奖励未生效"明细(零兑付、无折算——显式接受;A2"连锁批量授予溢出吸收"义务的 B4 侧落点);道具类无满层概念(库存无上限);玩家侧缓解 = 叠层感知挖掘(HUD 满层后少开安全格/优先挖刀——弱自救);结构位 = 未开格身份呈现深度(OQ2/A5,垂直切片);未生效类行携带可聚合计数/批次字段(合并呈现归 B1/B5 裁决,数据必须可聚合——防事后补字段 = 接口漂移);呈现归 D1 义务③,行协议 owner = B3 义务⑧ | -| E4 | roll_board 后映射 Ready、B1 未调而挖掘已开始 | grant 在 Unrolled 前/Retired 后调用 → false + 诊断(受理/拒绝口径,非进程致命——编排违约显式暴露) | -| E5 | roll_board 被二次调用 | Ready 相位再调 → false + 诊断(相位守卫) | -| E6 | 换图(retire + install)发生在战斗中 | 旧映射 Retired(未拾取身份消亡)、新图 install 后 roll 新批(reward_roll 流新 scope 批,与 board_gen"每次生成新图"同构);库存不受影响(关卡域跨图延续) | -| E7 | 关卡结束(clear_inventory)后仍调 grant/stock/use | Cleared 相位 → false + 诊断;clear_inventory 由 B1 编排于关卡末恰一次(重复调用 false + 诊断,幂等守卫) | -| E8 | 道具使用窗口打开时库存为空 | 零使用恒合法(跳过恒合法);呈现归 D1(可整体不弹窗;窗口触发政策:MVP 有库存恒弹,候选归垂直切片) | -| E9 | 同一件道具被选用两次 | `use` 对已 Used 实例 → false + 诊断(Used 不可逆);单帧选择收集口径归 D1 义务② | -| E10 | 道具段中伤害道具施加时已无存活敌(前序刀已全灭) | 照常消耗——标记 Used、零效果,逐件进结算明细"已消耗未生效"行;段序不截断(选定件全序执行 → 战斗段照常推进〔死敌"死亡即不动手"空转〕→ 衰减段 → 判定段判胜 → 关卡末 clear_inventory 全清含未选件);"零效果"事实判定归 B1 编排读 B2 存活集;监控锚 = 预警①(浪费半)。选定理由见 analysis | -| E11 | 清图槽身份为 buff 行且授予时已满层 | 零兑付 + "奖励未生效"明细行;A3 条款④"清图奖励>0"的兑现口径 = 行级恒有正当量(F3 加载期校验:power≥1 ∨ effect_id 非空),运行时满层拒绝为合法例外;监控锚 = 预警④(清图槽 buff 零兑付单独计数) | -| E12 | 治疗包 power 超过当前缺血 | hp' = min(hp + power, max_hp)——部分回复合法(clamp 归 B1),不拒绝(与满血拒绝相区分:满血 = 零收益守卫、超量 = 部分收益) | -| E13 | RewardTable buff 行的 effect_id 悬空(B3 无此行) | 首个 effect_id 引用行回填后,B3 悬空校验激活 → 加载期致命(D2 通道);此前不校验(dangling_ref_policy 既有口径) | -| E14 | 战斗中热重载 RewardTable | D2 战斗中 reload 拒绝门(D2 EC8,B1 经 set_reload_gate 置位);已授予实例携带行值快照(power/effect_id 授予时冻结——B2 行值快照同款),映射中未授予身份仅是 reward_id 引用、grant 时快照 | -| E15 | cleared 与 battle_over 同结算(末图清图即胜利) | 授予段先兑付清图奖励 → 同结算道具使用窗口即可选用(含当轮清图奖励件)→ 未选用件随库存关卡域延续(末图 = 关卡末图时未选用件至关卡末清空 + 反馈行归 D1 义务⑤);折算/继承结构位归 OQ4(Alpha,C2/D5——折算点 = 关卡末) | -| E16 | 池含 attack_up 行 | 授予走 B3 apply_effect 正常受理、消费于主角战斗段先手攻击;机制层不做校验(内容决策归 C3) | -| E17 | 玩家囤刀跨战斗/跨图累积(数量无上限) | 合法策略且为设计意图(可选类道具是关内资产——"囤刀待机"的规划视野 = 整个关卡);无运行时上限(伤害恒定表值 ⇒ 无乘法爆炸);失衡监控 = 预警①(浪费半)与⑥(速杀退化),修正入口 = C3 权重调参(items_per_settlement_cap 结构位默认关) | -| E18 | 同格重复 grant / 同一 cleared 结算重复 grant_clear(Ready 相位) | grant 同格重受理 → 返回同一预分配快照 + debug 诊断;grant_clear 重调 → 返回同一预分配身份 + debug 诊断(幂等受理族;受理/兑付恰一次归 B1×②③;对比:roll_board 二调 = 拒绝〔结构性相位违规,E5〕,重受理 = 编排瑕疵〔幂等兜底〕) | -| E19 | grant/query_identity 传入清单外坐标(R₀ 格/雷格/板外) | query_identity → null + 诊断、grant → false + 诊断(未分配非错误态;清单内未开格恒可查〔AC-2 分支 3〕、清单外 = 未分配) | -| E20 | stock() 入参越域 | 未知 item_id / buff 类条目 → false + 诊断(仅受理 damage_item/heal_pack);来源 {cell, round} 由调用方供给、B4 不校验真值(真值归 B1×②) | -| E21 | query_inventory 的枚举序 | = stock 受理序(插入序,B3 Rule 6 先例)——D1 窗口呈现序契约 | - -## 数值供给与失衡预警 - -### F6 当量换算供给(equivalence_supply,A3 条款①② 的 B4 侧输入) - -**结论**:供给 = RewardTable 全活行投影 + tier_min_buff(行集空 = F1 校验对偶致命);量纲建议 = 主角 HP 点;伤害道具当量 = power(恒定表值直接可算);单一线性换算与条款 1/2/3/5 的闭合归 B1 单一 owner,本式只供原材料与量纲建议。 - -``` -供给 = RewardTable 全活行投影 - (safe_cell ∪ clear_default 逐行 category/display_name/power/tier/effect_id/weight) -tier_min_buff = min{tier | safe_cell ∧ category=buff ∧ weight>0}(行集空 = F1 校验对偶致命) -量纲建议 = 主角 HP 点(与 m_amb 同量纲);伤害道具当量 = power(恒定表值直接可算) -``` - -| 项 | 内容 | -|---|---| -| 供给面口径 | 全活行投影(非仅活 buff 行清单)——承载 A4 约束②③与 A3 条款⑤对账,道具/清图行值在内 | -| 默认根 buff 活行 | defense_up_basic / attack_up_basic(attack_up 复活后首批入池;是否维持入池随奖励改造批,OQ1) | -| Output Range | tier_min_buff ∈ [1, 8];量纲仅为建议(B1 可另选) | -| 边界 | 行值 provisional 归 C3;锚验收权 B4/B1(B3 Rule 10 同款) | - -### 失衡预警清单(playtest 预注册) - -| 编号 | 指标 | 阈值/读法 | -|---|---|---| -| ① | 刀供给短缺/浪费双指标 | 短缺 = "获得刀伤供给 ÷ 击杀需求" <1.0 即警(供给面信号,按 unit_count {1, 2–3} 两档分设阈值);浪费 = "未用刀伤 ÷ 获得刀伤供给" >0.5 即警(效率面,与短缺分开读——供需贴近下界时高效用刀本就趋零) | -| ② | 治疗双尾 | 溢出 = HP 满拒绝率 >40%(instant_heal 满血零兑付并入本仪表——小额浪费可容忍、阈值放宽;heal_pack 满血拒绝维持 >40%);短缺 = "败北且库存有未用治疗包"占比 >20%(可选治疗稀缺化至 6% 后本仪表为主仪表——强治疗名存实亡的探针) | -| ③ | 雾区档位空窗 + 单一化 | 雾区拾取平均 tier ≤ 平原即警;增雾池单一化监测——雾区拾取 distinct reward_id 数 = 1 持续即警(雾池收窄 → "越险货越同",T_fog_min × tier 分布联动调参) | -| ④ | buff 零兑付双表 | 稳态(单格授予批)零兑付率 >25% 即警;连锁批量授予零兑付率单列(结构性偏高——推导见 analysis,阈值 >50% 即警);结构性缓解:buff 时长当次结算(D=1)使浪费不跨结算累积,同结算内批量授予的零兑付仍存在,仪表保留;清图槽 buff 零兑付单独计数维持 | -| ⑤ | 清图支配反转 | 弃图率 >30%(A3 OQ3 联动)——雾板/无雾板分层观测(聚合指标会被雾板污染或反向掩盖) | -| ⑥ | 速杀退化 | 战斗结束时未开资格格占比 >70% 即警(供给过剩 → 战斗提早结束 → 未挖身份零发放,奖励系统饿死自己的高光与雾内容) | -| ⑦ | 窗口摩擦 | 窗口跳过率、单结算平均明细行数(playtest 预注册,阈值归 C3);结构性缓解:库存只收可选类 + 窗口单件制——窗口频率与每次决策量双降,本预警预期大幅缓解、保留观测 | -| ⑧ | H2 曝光率 | 含清图奖励兑付的结算数 ÷ 战斗数(OQ4 折算裁决的数据输入) | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard | RewardTable schema + 内容行回填(本 GDD owner,接口漂移回写 D2 表清单 + registry)+ RewardConfigTable 单行全局(T_fog_min/K_dmg/N_draft/P_min + active_p0/active_decay)+ pool_tag 枚举含 active_inject;读取经 ConfigDB 单点 | -| 上游 | A2 | 间接(零直接接口) | 资格事实(reward_eligible/channel)经 B1 转化;A2 只报资格、内容与折算不经 A2 | -| 上游 | A3/A4 | 对账/验收锚(非依赖边) | A3 条款④⑤与 A4 三条定价硬约束 = 对账/验收锚关系;锚验收权归 B4/B1(B3"相邻"口径同款) | -| 下游 | B1 | hard(provisional——B1 未设计) | 结算编排期调用:roll_board(install 后恰一次)/ grant / grant_clear / stock / use / query_inventory / clear_inventory;窗口锚点 = 授予段后、窗口选择序 = 回放输入、每格受理恰一次;义务清单 6 项缺项即 blocking | -| 下游 | B3 | 相邻(零运行时依赖——调用经 B1) | buff 类经 B1 调 apply_effect(source_class=safe_cell/clear_reward 已在 B3 枚举内);锚验收权归 B4/B1(weaken 档位 vs 最低档安全格 buff 当量——A3 条款 2);满层拒绝协议对侧;首个 effect_id 引用回填激活悬空校验 | -| 下游 | B2 | 相邻(零运行时依赖) | 伤害道具默认目标 = 固定顺位(规则 5 消费);HeroTable.atk 域 [1,999](基础攻击恒存在——attack_up 复活的供给前提);道具段先于战斗段 → 抢杀窗口的道具形态 | -| 下游 | C3 | soft(provisional) | 权重/档位/威力/池内容曲线调参所有权(默认根行集已登记);RewardConfigTable 六参数;调参期批量仿真义务(F5 可行率 + 登记常数重制联动);失衡预警①–⑧ playtest 归口;clear_blast 换位 + K_dmg=0 + 注入池结构转正与 attack_up 入池裁决(OQ1) | -| 下游 | C1 | soft(provisional) | biome/tag 图类型供给(clear_ 插槽差异化输入——插槽激活的前置) | -| 下游 | C2 | soft(provisional) | 关卡大奖励归 C2(B4 无关);关卡结构 = 库存关卡域的容器("关卡结束"事件归 C1/C2 定义,落位前 B1 暴露 level_clear 入口由上层显式调用);关卡末剩余道具折算结构位归 C2(OQ4 残余,Alpha) | -| 下游 | D1 | soft | 呈现义务 5 项(缺项即 blocking) | -| 下游 | B5/D5 | soft | 结算明细道具行(数据源 = B1 流水,含击杀结果字段——H3 击杀标记数据源);道具使用窗口教学(拾取→囤刀→窗口选用闭环)+ "关卡末库存清空"教学 | -| 下游 | A5 | 相邻(预留桥接位) | aux_item 预留枚举(校验拒绝——启用走修订);未开格奖励身份探测 = A5 探测道具零成本桥接(OQ2,垂直切片) | - -### B1 侧义务清单(缺项即 blocking) - -| 编号 | 内容 | 状态 | -|---|---|---| -| B1×① | 结算段序骨架成文:授予段(含 grant_clear 兑付与即时类当场兑付)→ 道具使用窗口(授予段后、增益段前)→ 增益/减益段 → 道具段 → 战斗段 → 衰减段 → 判定段;核心序 buff/debuff > 道具 > 战斗不变;窗口选择序列登记为结算回放输入事件 | 已登记,待 B1 落地 | -| B1×② | 奖励受理与分流编排:grant → buff 类 apply_effect / 即时类当场兑付(instant_aoe = 全体存活敌各 power、instant_heal = 主角回复 clamp)/ 道具类 stock;每格受理恰一次、stock 与 grant 返回一一对应;满层拒绝/即时类零兑付 = "奖励未生效"明细行、无折算——未生效类行携带可聚合计数/批次字段(合并呈现归 B1/B5 裁决,数据须可聚合) | 已登记,待 B1 落地 | -| B1×③ | clear_reward 授予路径:清图奖励 roll 身份 install 期已定、cleared 结算编排期兑付——兑付后同结算窗口即可选用;清图槽即时类同分支当场兑付(B3 OQ4 关闭条件) | 已登记,待 B1 落地 | -| B1×④ | 窗口与道具段编排:窗口时机 = 授予段后、增益段前;窗口数据组装 = B4 query_inventory 投影 + B1 侧守卫预判 usable_now(满血治疗包禁选/提示——呈现归 D1;B4 零跨系统读不变);窗口至多选用一件(单件施加、目标/数值/明细行来源标注);零效果判定读 B2 存活集 + "已消耗未生效"明细行(E10 承接);击杀结果进流水(H3 击杀标记数据源);治疗 clamp | 已登记,待 B1 落地 | -| B1×⑤ | 生命周期编排:关卡结束调 clear_inventory 恰一次;清空前后快照计数供"随关卡结束清空"反馈行(D1 义务⑤);battle_over 调映射退役(映射 = 板级,随战斗消亡——下一场战斗新板新批) | 已登记,待 B1 落地 | -| B1×⑥ | roll_board 调用时机:install 后、挖掘前恰一次(B4 侧相位守卫见 E5;B1 编排纪律承载调用时点——B4 不可观测) | 已登记,待 B1 落地 | - -### D1 侧义务清单(缺项即 blocking) - -| 编号 | 内容 | 状态 | -|---|---|---| -| D1×① | 已开格 + 库存奖励身份恒定可读:库存常读条 = 挖掘期规划面而非仅轮末窗口;关内延续后常读条跨战斗可见 = 关卡资产感的数据面 | 已登记,待 D1 落地 | -| D1×② | 道具使用窗口呈现:授予段后弹出;选用/跳过/单件选用、usable_now 可用性投影呈现(满血治疗包禁选或选中提示)、窗口时机指示、空库存可不弹窗(E8)、窗口触发政策注记(MVP 有库存恒弹;候选归垂直切片) | 已登记,待 D1 落地 | -| D1×③ | 结算明细四类行呈现:道具行(含入库/生效语境注记)/ "奖励未生效"行(按聚合计数呈现,数据源含可聚合字段)/ "已消耗未生效"行 / "使用被拒"行——数据源 = B1 流水,P2 归因 | 已登记,待 D1 落地 | -| D1×④ | H2 清图奖励行强调呈现(轮末仪式峰值) | 已登记,待 D1 落地 | -| D1×⑤ | 关卡末库存清空可见反馈:"剩余道具 ×N 随关卡结束清空"汇总;层间过渡"库存 ×N · HP 带入下一层"可见反馈 = 垂直切片候选 | 已登记,待 D1 落地 | - -### A4 定价硬约束的 MVP 承载状态(显式宣告) - -| 约束 | 状态 | 说明 | -|---|---|---| -| ① 雾内档位下界 ≥ 最低档安全格 buff 当量 | 锚侧承载 | AC-19 档位序检查(非运行时校验);真当量换算依赖 B1 条款①对照表(未设计) | -| ② 清图奖励锚随雾成本负担上浮 | MVP 结构性不可闭合 | clear_default MVP 单默认槽 = 板无关常量池,清图奖励当量无法随雾负担变化(非 deferral 而是本期不可闭合);激活载体 = clear_ 插槽(垂直切片,待 C1 biome 词表落定) | -| ③ 雾板净当量优势带上界 | 静默绿灯风险 | ②缺位 + 雾格仅 tier 下界加成的 MVP 结构下近乎必然平凡通过;休眠状态与接受风险(重雾板清图欠偿 → 弃图偏斜)在此显式登记;对冲 = 预警⑤雾板分层观测 + 预警⑥速杀退化监测 | - -### 呈现数据面契约(B4 零自有视觉/音频/UI 资产;呈现实现归 D1/B5/D4/D5) - -| 编号 | 数据面义务 | 归属 | -|---|---|---| -| 1 | H1 开格拾取瞬间:身份在场——"这格有货"是 P4 高频情绪节拍;触发数据 = cell_revealed + 身份查询;query_identity 投影含 tier——拾取瞬间可读"好货"档位 | D1 | -| 2 | H2 清图奖励兑付:轮末仪式峰值——clear_reward 明细行强调呈现(D1 义务④) | D1 | -| 3 | H3 道具抢杀窗口:"重击拍前用刀"的执行侧兑现;感知数据前置:B1 流水含击杀结果字段(B1 义务④)——无它则"敌灭、重击未落地"不可呈现 | B1 供给 / D1 | -| 4 | 创意风险登记:#2"完美排雷爆发结算"机制本体归 B1 强制检查点(B4 交付插槽与明细行数据面);#3 标中旗即时节拍补偿同归 B1(D1 义务④⑤为其 blocking 承载) | B1 / D1 | -| 5 | icon 映射键契约:reward_id(全局恒定、跨 run 不重掷);category 三类第一层区分 + 行级第二层;形状+色相双通道(art-bible 未建前键契约先冻结);名称数据源 = display_name 字段 | D1 / art-bible | -| 6 | 绘制优先级插入点:奖励徽章位于旗子之下、变异纹理之上,不得进入数字区域(数字 > 小人 > 旗 > [徽章] > 纹理 > 底色)——纳入格子样张测试验收项 | art-bible | -| 7 | 结算明细四类行协议(数据源 = B1 流水):道具行 / "奖励未生效"行(携带可聚合计数/批次字段——E3)/ "已消耗未生效"行(E10)/ "使用被拒"行(usable_now 预判外的残余路径);未选用件"随关卡结束清空"语境注记 | B5/D1 | -| 8 | 音频挂钩点(Alpha):开格拾取音(按 category 分色)/ 道具使用音 / 清图奖励音 / 负反馈聚合音("未生效/被拒"类行数 >0 时单次结算至多一次——防逐行惩罚轰炸或静默惩罚);挂点事件归 B1/D1,B4 零音频依赖 | D4 | -| 9 | 道具使用窗口数据契约:载荷 = B1 编排组装——query_inventory 逐件实例(枚举序 = stock 受理序〔E21〕)+ usable_now 预判;呈现归 D1;窗口期选择收集与棋盘输入不竞争;窗口选择序列 = 结算回放的输入事件 | D1 | -| 10 | UX 规格归 D1 GDD 前置 /ux-design——窗口是 D1 域屏,B4 只供数据契约;B4 无 D1 外新增 UI 义务 | D1 | - -## P0 最小闭环 - -1. B1 install 新扫雷图后、挖掘前恰一次调 `roll_board(资格格清单)`——全板格身份与清图身份摇定,映射 Ready 只读。 -2. 玩家挖掘,已开格奖励身份恒定可读("这格有货、是什么")。 -3. 轮次结束,B1 授予段逐格 `grant`:buff 挂状态、即时类当场兑付、道具类 `stock` 入库存。 -4. cleared 轮 `grant_clear` 兑付清图奖励(恒非空)。 -5. 道具使用窗口:玩家至多选用一件背包道具或跳过(当轮拾取当轮可用)。 -6. 道具段选用件生效:刀按固定顺位打敌、治疗包回血 clamp;战斗段"重击拍前用刀"成立。 -7. 衰减、判定走完;battle_over `retire_mapping`——映射消亡,库存跨战斗延续。 -8. 关卡结束 B1 调 `clear_inventory` 恰一次,"随关卡结束清空"反馈行闭环。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | clear_ 清图池变体(图类型差异化) | 结构位已留(命名空间预留、校验拒绝);待 C1 biome 词表落定 | -| P1 | 未开格身份呈现深度(类别/档位/身份) | 结构前提已备(身份 install 期已定可查、预读查询面就绪、A5 零成本桥接);待 A5 定稿(OQ2,垂直切片) | -| P1 | items_per_settlement_cap 启用裁决 | 结构位默认关;启用即限制,过低锁死胜局——归 C3 playtest(OQ3) | -| P1 | attack_up 入默认根池裁决 | 复活已闭合,入池随奖励改造批(OQ1,C3——复活批不擅自入池) | -| P2 | 关卡末剩余道具折算/继承(转金币/继承) | 关内延续后体验负债主体已闭合;折算点 = 关卡末,归 C2/D5(OQ4,Alpha) | -| P2 | 窗口触发政策候选(仅可用品触发 / 常驻库存条非模态) | MVP 有库存恒弹;待 P0 窗口摩擦数据(预警⑦) | -| P2 | 音频挂钩(开格拾取音/道具使用音/清图奖励音/负反馈聚合音) | D4 域,Alpha | -| P2 | 层间过渡"库存 ×N · HP 带入下一层"可见反馈 | 垂直切片候选(D1 义务⑤注记) | -| P2 | 内容名录扩展(新奖励行) | 机制与内容分离——MVP 内容行收窄,扩展归垂直切片/Alpha | - -## 调参表 - -全部 knob 由 D2 承载(RewardTable 行值 / RewardConfigTable 配置值),provisional 归 C3。 - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| RewardTable.weight(逐行) | 格子池四行即时类(合计 67)+ 注入池三行可选类(knife 60 / adv 30 / heal_pack 10)+ clear_blast 单行槽 | 即时类过剩 → 结算明细淹没("奖励未生效"行刷屏)、可选类相对贬值 | 可选类过低 → 窗口长时空转(单件制下规划面稀薄)、重 roll 频发乃至致命 | -| RewardTable.tier | 默认根:knife_t1/spark_aoe/heal_minor t1、attack/defense/heal_pack/knife_adv/clear_knife t2 | 雾区档位上移 → 平原奖励贬值(预警③联动) | T_fog_min 过滤失效 → A4 硬约束①锚失守(对账兜底) | -| RewardTable.power | 默认根:刀 8/16、治疗包 12、即时类 4/4(可选类更强、治疗稀缺化配套) | 道具段秒杀 / 治疗溢出(HP 满拒绝率↑——预警②) | 刀供给名义达标实际不足(击杀需求多轮化) | -| T_fog_min(RewardConfigTable) | 2(provisional) | 雾池收窄 → 雾格奖励稀化、单一化(预警③)、池空致命风险↑ | =1 过滤退化——雾区档位下界仅剩锚兜底 | -| K_dmg(保底刀数) | 0(provisional——保底断言关闭,语义由供给控制器首件保证取代) | 重 roll 频发 → 流消费膨胀;> 资格格数恒致命 | =0 = 断言关闭(现行默认——no_damage_row 加载后闸托底零活刀行世界) | -| N_draft(重 roll 上限) | 32(provisional) | 坏权重多次过审(掩盖配置错误) | 合法低供给池被误杀致命(概率性致命带——C3 批量仿真义务) | -| 供给控制器 active_p0 / active_decay | 0.4 / 0.5(provisional) | 速杀+囤积回归(获取过量) | 可选类绝育(注入趋零)——E[战斗获取] ≈ 1 标定目标 | -| P_min(K≥1 供给闸刀力下界) | 8(= 默认根最低刀 power) | 闸收紧 → 低威力刀行被加载拒绝(内容收窄) | =1 → 闸空转(power ≥1 恒真) | -| items_per_settlement_cap(结构位) | 关(无上限) | 启用即限制——过高不构成保护 | 过低锁死胜局(击杀需求 ÷ 轮数——economy-designer 警告);启用裁决归 C3 playtest | - -- 非 knob(结构冻结,修订走本 GDD 流程非调参):奖励类型五值封闭枚举(两类交付轴)· install 期预分配 + Ready 只读(无重掷 API)· 道具伤害恒定表值不吃修正(用户拍板)· 满层零兑付无折算 · 库存关卡域(跨战斗延续、关卡末清空)· 窗口单件制 · 清图恒非空 · 结算段序骨架(buff/debuff > 道具 > 战斗)· 零随机出 roll_board 一线 · 逐件实例归因。 -- Knob 交互:K_dmg × safe_cell 伤害权重 × T_fog_min(雾池收窄挤压刀供给 → 重 roll 频发——三者禁止独立调参);T_fog_min × tier 分布 × 雾池行数(雾池单一化联动——预警③第二仪表,禁独立调参);power × B2 EnemyTable hp 曲线(击杀需求侧联动,C3 所有权);weight × B3 max_stack(buff 零兑付率联动——预警④)。 -- 调参所有权:内容/曲线全部 provisional 归 C3;A3 条款③⑤与 A4 硬约束①②③的对账闭合归 B1(锚验收权 B4/B1)。 - -## 验收标准 - -### 验收执行规格(测试口径 / 夹具 / 致命 manifest) - -收 `analysis/b4-reward-item-economy.md` 附录 E(验收执行规格)——夹具根名、manifest 行名与测试协议全文在彼,AC 表引用不失联。 - -### API 面(provisional,封闭枚举——实现期 ADR 定名) - -| 接口 | 签名 | 语义与守卫 | -|---|---|---| -| roll_board | `roll_board(eligible: Array[{cell, fog}]) -> bool` | install 期恰一次;消费 reward_roll 封闭流恰一 scope 批(格批 + 清图批尾一号 × F5 草稿数——每稿 = 格批 + 清图批尾一号,草稿弃用连清图一号一并弃用);Ready 相位再调 → false + 诊断(E5);空清单 → debug 断言中止(E1 兜底);清单含重复格 → 去重 + debug 诊断 | -| query_identity | `query_identity(cell) -> Dictionary\|null` | Ready 只读预读面——返回 {reward_id, category, tier} 引用级投影,非行值快照(快照时点 = grant,E10);Retired/Cleared → null + 诊断;清单外坐标 → null + 诊断(E19——A5 探测桥接的结构面) | -| grant | `grant(cell) -> Dictionary\|false` | 受理面——返回 {reward_id, category, effect_id?, power?} 行值快照;Unrolled/Retired/Cleared → false + 诊断(E4/E7);清单外 → false + 诊断(E19);同格重复受理 → 同一快照 + 诊断(幂等,E18) | -| grant_clear | `grant_clear() -> Dictionary\|false` | cleared 轮兑付——身份 = install 批尾预分配;同批次重调 → 同一身份 + 诊断(幂等,E18) | -| stock | `stock(item) -> Dictionary\|false` | 道具类入库——仅受理 category ∈ {damage_item, heal_pack},未知 item_id/buff 类 → false + 诊断(E20);逐件实例 {item_id, source{cell, round}〔调用方供给、B4 不校验真值——真值归 B1×②〕, 快照};Cleared → false + 诊断 | -| use | `use(handle) -> Dictionary\|false` | 窗口选用消耗——true ⇔ InStock→Used + 返回消耗回执(授予时快照投影 + 来源归因);Used 句柄 → false + 诊断(E9);零游戏态前置守卫——存活集/血量对 B4 不可见,E10 照常消耗与 F4 满血守卫归 B1 的结构前提 | -| query_inventory | `query_inventory() -> Array` | 逐件实例枚举含状态 InStock/Used,枚举序 = stock 受理序(E21)——Used 保留只读可查("已消耗未生效"行数据面);呈现过滤归 D1 | -| clear_inventory | `clear_inventory() -> bool` | 关卡末全清;重复 → false + 诊断(E7 幂等) | -| retire_mapping | `retire_mapping() -> bool` | board retire——B1 义务⑤ | -| equivalence_supply | `equivalence_supply() -> Dictionary` | F6 供给面 {全活行投影, tier_min_buff}——只读 | -| weighted_pick | `weighted_pick(rows, r) -> String\|null` | F1 选行算子纯函数供给面(B2 ambush_grant_plan 先例) | - -- 全部布尔/字典返回 = 受理/拒绝(附 debug 诊断、非进程致命——进程致命保留给 D2 数据通道与 fail-fast 兜底点)。 -- 封闭枚举即负空间验收形态:无重掷 API(规则 8 Ready 只读)· 无库存上限 API(规则 4/E17)· 无伤害/治疗/buff 施加 API(施加归 B1)· 无自主清空时点(clear_inventory 调用权归 B1)· 无事件订阅 · 无 RNG 直连(唯一入口 = roll_board 内 open_stream("reward_roll"));新增任何入口 = 接口漂移(GDD 修订非调参)。 - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | b4_golden 根加载、全新 B4 容器(Unrolled)、RngService master=42 已播种(scope 计数器 = 0)、清单 = b4_list_A | `roll_board(b4_list_A)`;分支 2:两套全新 RngService+B4(同 master=42、同 scope 起点)分别以规范序/乱序传入同一集合;分支 3:Ready 后再 `roll_board(任意清单)` | true(Unrolled→Ready);query_identity 逐格 = 登记映射 Ψ(0)(含雾格分支——雾格身份 ∈ 雾池行,登记值);reward_roll 流 scope 计数器 = 1(install 恰一 scope——registry 语义的行为面);分支 2:两映射逐格相同(行主序消费序 B4 侧规范化——F1"行主序逐格",排序责任不外推给 B1);分支 3:false + 诊断、映射与流计数器不变(相位守卫——B2 AC-1 同款;double-roll 无守卫的编排半归 B1×⑥) | 规则 2/8 · E5 | -| AC-2 | b4_golden 根、roll_board 完成(Ready) | 腿 1:对每格重复 query_identity ×3;腿 2:grant(c) 后 query_identity(c);腿 3:对未受理格 query_identity;腿 4:query 前后对照;腿 5:retire_mapping() 后 query_identity(c) | 腿 1:逐字相同(结构保证非授予期随机);腿 2:= 授予前值(身份恒定跨授予——同图跨轮恒定的观测半);腿 3:恒返回身份(映射无"已开才可查"谓词——A5 探测道具零成本桥接的结构前提;MVP 不呈现归 D1/OQ2);腿 4:映射/库存投影零变化(纯读);腿 5:null + 诊断(映射消亡的观测形式——E6 旧映射半) | 规则 8 | -| AC-3 | b4_golden 根 | 分支 1:全新容器(Unrolled)上 grant(c)/grant_clear();分支 2:roll_board → retire_mapping 后 grant/grant_clear;分支 3:roll_board → grant → stock → clear_inventory() 后 grant/stock/use、query_inventory、query_identity(c);分支 4:重复 clear_inventory() / 重复 retire_mapping() | 分支 1:false + 诊断(E4 roll 前受理);分支 2:false + 诊断(E4/E2——未拾取身份消亡零兑付);分支 3:均 false + 诊断(E7);query_inventory = 空(InStock 与 Used 均清——关卡域);query_identity(c) → null + 诊断(Cleared 逻辑失效态的观测分支);分支 4:false + 诊断(E7 幂等守卫) | E4/E7 | -| AC-4 | 全新容器、master 已播种(b4_golden;manifest 行 empty_eligible) | `roll_board([])`(S∖R₀=∅ 构造——真实流中 A2 install 不变式④前置,本 AC 直击 B4 兜底半) | debug 断言中止(fail-fast 兜底、零静默回退——F1 池空裁定的运行期对偶);测试通道诊断清单含类别;独立进程非 0 退出 | E1 | -| AC-5 | weighted_pick 纯函数面(行数组 + 取号 r 注入) | 分支 1:三行 w=2/1/1 逐一取 r=0/1/2/3;分支 2:行集 {w=0, w=2} 取 r ∈ {0,1};分支 3:单行 w=5 取 r ∈ [0,5);分支 4:r ≥ W | 分支 1:r=0/1 → 行 1(区间 [0,2))、r=2 → 行 2([2,3))、r=3 → 行 3([3,4)——W=4 边界号);分支 2:W=2、恒唯一非零行(0 权行取号前剔除、W 不含 0 权);分支 3:恒该行(合法极端——F1 裁定);分支 4:debug 断言(纯函数域;游戏通道内 r 恒 < W 由流构造保证) | F1 | -| AC-6 | b4_fog_gate 根(登记:雾池唯一活行 = 高档行 H〔tier ≥ T_fog_min〕、非雾池含低档行 L)+ b4_fog_gate_hot + R3 override | 分支 1:roll_board(清单含雾格);分支 2:对 σ = 0…31 逐一(scope 预推进)roll_board;分支 3:fog 布尔唯一输入构造(链开雾格);分支 4:T_fog_min=1 经 R3 override(运行时态、域内值)/ T_fog_min=8 且表无 tier8 行经烤入根 b4_fog_gate_hot | 分支 1:雾格身份 = H(单行退化判别——r 无关;雾格恒不出 tier < T_fog_min 行);分支 2:① 每稿雾格身份恒 = H(过滤谓词零泄漏——任何泄漏以 ≈w_H/W 概率现形);② 非雾格至少一次命中 tier < T_fog_min 行 L(证明非雾侧零过滤);登记值"非雾格 = L"降为诊断信息不作硬断言(加载规则强制 H 活 ⇒ 非雾池 ⊇ {H, L} 至少两行,单稿"= L"是概率断言,忠实实现也会假失败);分支 3:无 chain/dig 通道分支(A2 EC4 同待遇半——构造性);分支 4:T_fog_min=1 → 雾池 = 全池,雾格身份 ∈ 全体活行集(登记 σ 下 = 登记值——过滤退化合法,A4 约束①仅剩 AC-19 锚侧兜底);T_fog_min=8 → 加载致命(雾态池空——AC-17 pool_empty_fog 同类别;override 通道不触发加载校验) | F2 · A2 EC4 | -| AC-7 | b4_reroll 根(登记权重刀 w=1 / 其余 w=3;K=K_dmg、N=N_draft 表读值)+ b4_nofloor 根 + 登记 σ 参考轨迹表 | 分支 1:对 σ = 0…31 逐一(每 σ 全新服务+容器,先 `open_stream("reward_roll")` ×σ 丢弃预推进至 scope=σ——σ 到达机制)roll_board;分支 2:登记 σ*(参考算术判定首稿 0 刀)roll_board;分支 3:登记 σ**(首稿清图身份 = 刀 ∧ 格刀数 = 0)roll_board;分支 4:b4_nofloor 根(无刀行 ∧ K=0)roll_board | 分支 1:每提交板 \|刀身份格\| ≥ K(每板伤害供给下界保证的行为面);分支 2:提交映射 ≠ 首稿参考映射(草稿弃用、同 scope 续流重 roll);scope 计数器每 install 恒 +1(重 roll 不开新 scope——scope 语义 = install 批非草稿批);分支 3:仍重 roll(断言仅计格奖励身份——参考轨迹判别);分支 4:roll_board true、提交板 0 刀(K_dmg=0 = 关闭——现行默认的行为面) | F5 | -| AC-8 | b4_floor_exhaust 根(manifest;safe_cell 池无刀行 ∧ K=1——每稿恒 0 刀) | `roll_board(b4_list_A)`;变体分支:b4_list_single(1 格)∧ K=2(R3 override 域内值) | N 次草稿后致命(权重配置错误 fail-fast);诊断含耗尽类别与草稿计数(N 表读值不写死);独立进程非 0 退出;变体:\|资格格\| < K 恒不过 → 同致命(F5 Output Range) | F5 | -| AC-9 | 两套全新 RngService+B4(同 master=42、同根 b4_reroll) | 同一定长序列驱动两遍(roll_board → query_identity 全格 → grant×2 → stock → use×1 → retire_mapping → roll_board〔新清单,scope+1〕→ grant_clear → clear_inventory → 全 query 面);分支 2:σ 与 σ+1 两板映射对照 | 两遍的映射投影、库存实例投影(含来源 {cell, round})、use 回执、流 scope 计数器轨迹逐项相同——同 σ 同流消费轨迹 ⇒ 同身份映射(含 F5 重 roll 分支)的确定函数性(D2 AC-15 的 B4 层前身);分支 2:σ 与 σ+1 的映射 = 登记相异对(新图新身份——E6 roll 半;库存延续半 = AC-13 分支 2) | 规则 2/10 · E6 | -| AC-10 | b4_golden 根、roll_board 完成 | 腿 1:`grant_clear()`;腿 2:两套同 σ 容器、grant_clear 前置调用序列互异再 grant_clear;腿 3:同批次再 grant_clear() | 腿 1:返回 = 登记清图身份 Φ(σ)(install 批尾一号——登记值含批尾位次假设:实现改批首取号即失配暴露);返回身份满足正当量(道具类 power ≥ 1 表读值 ∨ buff 类 effect_id 非空——条款④"清图奖励>0"的行级兑现面);腿 2:返回恒 Φ(σ)(身份 install 期已定、兑付期零 roll;图类型战斗域恒定不逐图重掷的判别形式——兑付期重掷将随前置序列漂移);腿 3:同一身份 + 诊断(兑付恰一次归 B1×③——E18) | F3 · 规则 6 · A3 条款④ | -| AC-11 | b4_clear_buff 根(clear_default 唯一活行 = defense_up,effect_id 非空——正当量成立)加载通过(加载校验不拒 buff 行) | roll_board → `grant_clear()` | 返回 {category=buff, effect_id=defense_up}(分流数据面);B1 调 B3 apply_effect 与运行时满层拒绝(零兑付 + "奖励未生效"明细行,合法例外口径)归 B1×②/B3,OOS;失衡预警④清图 buff 零兑付单独计数 = playtest 域 OOS | E13 · F3 | -| AC-12 | b4_golden 根、roll_board(b4_list_B〔4 格〕) 完成 | 腿 1:按规范序逐格 grant(连锁批量受理的冒烟构造序——B1 义务①同侧等价);腿 2:grant 返回快照与 grant 时表值对照;腿 3:同格再 grant | 腿 1:逐格返回 = 登记身份序列(受理序 = 规范序);buff 类格返回 {category=buff, effect_id}(B4 只定"给哪行"——层数语义归 B3 合并产生,施加经 B1 调 B3,规则 3);道具类格(damage_item/heal_pack)返回 {category, power}(治疗包 = 道具类路由、非自动兑付——grant 不触发任何使用语义);即时类格(instant_aoe/instant_heal)同样返回 {category, power} 快照——grant 零路由差别,当场兑付的编排归 B1×②(B4 半 = 返回快照非库存语义);腿 2:返回的 power/effect_id = grant 时表读值(E10 快照时点 = grant——差分判别在 AC-15);腿 3:同一快照 + 诊断(受理恰一次归 B1×②——E18);满层起逐格"奖励未生效"行协议 = OOS B1×②(E3 后半) | 规则 3/7 · E3 前半 | -| AC-13 | b4_golden 根、roll_board + grant(道具格) 完成、冒烟(扮演 B1)stock ×N(N = 登记大数 64) | 腿 1:query_inventory;腿 2:retire_mapping() → roll_board(新清单) → query_inventory;battle_over(映射退役)后 query_inventory;腿 3:clear_inventory() → query → stock | 腿 1:恰 N 件、每件 {item_id, source{cell, round}, 快照投影}(来源归因保 P2——D1 窗口数据契约);N 件全部 InStock、零拒绝(数量无上限——规则 4/E17,稀缺性由权重承载;无 cap API 负空间);腿 2:query_inventory 逐字不变(含来源——库存关卡域跨图且跨战斗延续,与映射生命周期正交;跨战斗构造 = 共享容器重 roll,切片连续关卡模式同型);映射退役后逐字不变(库存不再随战斗清空——义务⑤ 改写的行为面);腿 3:true、query 空(不跨关卡);此后 stock → false + 诊断(AC-3 分支 3 已载——注记) | 规则 4/5 · E6/E17 | -| AC-14 | b4_golden 根、库存含刀(damage_item)与治疗包各 ≥2 件 | 腿 1:`use(刀)`;腿 2:同句柄再 use;腿 3:use(刀) 于任意游戏态前置(含"道具段无存活敌"等价构造——B4 无敌态输入面,实现若存在存活/血量守卫则本分支失败);对照腿:use(治疗包) 同前置;腿 4:任意序 use 多件 | 腿 1:true + 回执 {category, power=该实例授予时快照值〔E14〕, source{…}};同 reward_id 多件实例回执 power 逐字相同(恒定表值非 roll 值——F4);实例状态 → Used;腿 2:false + 诊断(Used 不可逆);Used 实例 query_inventory 保留只读可查("已消耗未生效"行的数据面——B2 Dead 句柄同款);腿 3:恒 true + 标记 Used、零效果由 B1 判定(选定即承诺:已选刀照常消耗、逐件"已消耗未生效"明细行归 B1 编排读 B2 存活集〔义务④〕+流水,OOS);相位守卫不在本分支豁免域——Unrolled/Cleared/Retired 相位的 use 照旧 false + 诊断(同输入同答案);use(治疗包) 同样无条件受理(满血守卫归 B1 编排读 B2 hero hp——F4/义务④;"拒绝不烧包"半 = B1 不调 use 的编排纪律 + usable_now 预判呈现,OOS);腿 4:每件独立受理、Used 序 = 调用序(窗口选用序的 B4 半——选择收集归 D1×②、段内细则归 B1×①;同窗顺序多包的逐件动态守卫归 B1×④) | 规则 5 · E9/E10 | -| AC-15 | b4_golden 根 roll_board + grant(道具格) + stock 完成(已授予实例)、另设未授予格(映射中 reward_id 引用) | 经测试通道换根加载 b4_reloaded(`load_tables(root, collect_only=true)` 直调——非 D2 `reload()` 路径,门语义归 D2 AC-16/B1,B2 AC-11 同款);再对未授予格 grant;分支 3:对返回快照投影原地改写;分支 4:换根后 use(已授予实例) | 已授予实例快照投影逐字不变(授予时冻结);未授予格 query_identity 的 reward_id 不变(映射仅持引用——热重载拒绝门 D2 EC8 的 B4 侧纵深);对未授予格 grant → 返回漂移后表值(快照时点 = grant——引用非活值的判别后半);分支 3:容器内实例投影不变(快照拷贝非活引用——B2 AC-11 分支 3 同款);分支 4:回执 = 授予时快照值非漂移值(AC-14 腿 1"快照值"措辞的行为级判别) | 规则 9 · E14 | -| AC-16 | RewardTable schema 类(行级 + 跨字段)class_name 直引实例(不经 load()/preload()) | `validate()` 作用于越域代表值:category ∈ {resource, aux_item}(预留值拒绝——B2 pattern 先例)、pool_tag = "clear_fog"(clear_ 命名空间预留拒绝——规则 6,A1 elite_ 同款)、pool_tag = "nonsense"(未知枚举)、use_timing ∉ {pre_settlement}、weight ∈ {−1, 1000}、tier ∈ {0, 9}、power ∈ {−1, 1000}、跨字段 buff 行 effect_id 空(buff⇒必填)、跨字段非 buff 行 effect_id 非空(非 buff⇒恒空)、跨字段 item 类 power=0(damage_item/heal_pack ⇒ power ≥ 1——F4 加载校验);再作用于域内代表值:weight=0、buff 行 power 任意、tier ∈ {1,8}、item 类 power ∈ {1,999} | 越域各含对应域错误类别(零静默);域内零诊断(防过度约束锁死内容——weight=0 与 buff 行 power 不校验是承重点) | 规则 1/9 | -| AC-17 | 致命根 ×8(独立进程、游戏通道——D2 AC-2b 协议):b4_pool_empty_safe(safe_cell 全 0 权)/ b4_pool_empty_fog(全行 tier < T_fog_min——雾态空)/ b4_clear_empty(clear_default 池空/全 0 权)/ b4_clear_no_value(clear_default 唯一活行 = power 0 道具行——恒非空的可判定形式,A3 条款④表侧兑现)/ b4_no_live_buff_row(safe_cell 有活行但零活 buff 行——tier_min_buff 无定义,F1 对偶致命)/ b4_dangling_effect(buff 行 effect_id = "ghost_buff"——B3 StatusEffectTable 无此行;条件性夹具:默认根已含 effect_id 引用行 ⇒ 悬空校验已激活——dangling_ref_policy 首引兑现点)/ b4_floor_supply(K_dmg ≥ 1 ∧ safe_cell 池无 power ≥ P_min 活刀行——F5 加载护栏 (i))/ b4_nodamage(K_dmg = 0 ∧ 全池零活刀行——F5 加载护栏 (ii) 零伤害世界后闸,B2 OQ9 并案) | 各根经 `--data-root` 注入加载(collect_only=false);对照腿:默认根加载 | 各进程非 0 退出且错误清单含对应类别;默认根干净通过(引用全解析——defense_up 存在) | F1/F3/F5/F6 · E13 | -| AC-18 | ConfigDB 默认根加载;分支 2:b4_attackup_row 根(safe_cell 追加 attack_up 引用行) | 读 RewardTable;分支 2:该根加载 → roll_board → grant(attack_up 格) | category 值域 ⊆ {buff, damage_item, heal_pack}(三值封闭定值);pool_tag 值域 ⊆ {safe_cell, clear_default}(MVP 二值封闭定值);clear_default 池 ≥1 正当量活行(默认根通过自身表级校验的行为断言——AC-17 对偶);权重比例与数值不作定值断言(provisional 归 C3);默认根当前不含 attack_up 行 = 内容态事实、非结构禁止(随奖励改造批重审);分支 2:加载通过、roll_board/grant 正常受理(授予 buff 行 = {category=buff, effect_id=attack_up} 快照——消费于主角战斗段先手攻击,B1 域 OOS;B2 AC-14 的 atk 域断言跨引) | 规则 1 · E16 · F4 | -| AC-19 | 默认根加载(或调参后根——对账随内容态重跑) | `equivalence_supply()`;分支 2:fog 池最低档活行 tier 推导对账 | 返回全活行投影(F6 扩面)与 tier_min_buff = min{活 buff 行 tier}(默认根 = defense_up_basic 行 t=2——登记对账常数;行集空 → 加载致命,AC-17 no_live_buff_row 已载);分支 2(A4① 锚对账——档位序检查):fog 池最低档活行 tier(min{tier : weight>0 ∧ tier ≥ T_fog_min},均表读值推导)≥ tier_min_buff(约束①"雾内奖励档位下界 ≥ 最低档安全格 buff 当量"的 B4 侧可判定形式 = 档位序检查——真当量换算归 B1 条款①对照表〔未设计〕,落定后本分支升级为当量对账;当前内容态不等式成立为登记对账记录,C3 调参后须重跑——登记对账对 (knife_adv, attack_up_basic) 漂移检测;锚参照对象 = attack_up 当量,attack_up 入池时 tier_min_buff 重算、对账对随批重制;两行互异 = 非平凡判别——判据名"档位序检查"已入 registry terminology;tier 与当量零耦合的假阳性边界见 analysis);A4 约束②③ = MVP 结构性不可闭合/静默绿灯风险——依赖节显式宣告 + B1 检查点——OOS | F6 · A4① | -| AC-20 | ConfigDB 默认根加载完成 | 脚本解析 `design/registry/entities.yaml` | ① rng_service.scope_event_binding 的 reward_roll 语义 = "每次 board install(格奖励批 + 清图奖励批)"(规则 2 的回写落点——AC-1 scope 观测面的登记侧);② stream_seed_derivation.golden_vectors 含 reward_roll m=42 scope0 向量(derive_at 测试通道的登记前提);③ variation_table.pricing_constraints 注记存在(A4 三约束为 B4 验收项的登记);④ status_effect.dangling_ref_policy 注记含 "B4 RewardTable 首个 effect_id 引用" 条款(AC-17 条件性夹具激活条件的登记侧)+ status_effect.anchor_warning / clause3_supply.direction_precheck 含 attack_up 参照回迁注记(registry 同批回写);⑤ reward_table 条目 fields 九键(reward_id/category/effect_id/display_name/power/weight/pool_tag/tier/use_timing)与 ConfigDB RewardTable schema 字段名逐一相等、MVP 内容注记与默认根行集一致(与 AC-18 对账);⑥ reward_config 条目存在,fields 四键(t_fog_min/k_dmg/n_draft/p_min)与 ConfigDB RewardConfigTable schema 字段名逐一相等;生效前提 = 回填完成(不写"若存在"软口径);边界:本 AC 断言 registry 登记面——D2 GDD 正文与 registry 的对齐 = delta 复核对账项 | 规则 9 · 接口漂移登记 | -| AC-21 | B4 文件集(映射容器/库存容器/RewardTable schema/roll 与保底逻辑/冒烟脚本/夹具规格)纳入 D2 AC-9 模式项目级扫描域成员清单(owner Technical Setup——B3 先例;本条分支 1 承载登记义务,清单更新 = Technical Setup 门禁项) | 静态扫描 | randomize() / RandomNumberGenerator / 自建 RNG 零命中(零随机出 roll_board 一线——唯一 RNG 入口 = open_stream("reward_roll"));ConfigDB 外 data 表加载零命中(schema 直引实例化豁免——AC-16 前提);extends Control / .tscn preload 零命中(Core 层零 UI 债——headless 实跑 AC-1 合成判定);A2 事件订阅 API 零命中(规则 10 零主动订阅);B2/B3 API 符号零引用(相邻零运行时依赖——含冒烟脚本;StatusEffectTable/HeroTable 经 ConfigDB 表读合法、API 引用非法);重掷类命名扫描(reroll/resign/rebind 等——规则 8 负空间,warning 级 + 人工复核);零随机的行为级硬证据 = AC-9 | 规则 10 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按 v2 骨架重写——design 只收结论;公式推导论证、候选取舍、体验论证、审计登记(接口漂移/缺口预检/覆盖矩阵)与验收执行规格(测试口径/夹具/manifest)迁入 `analysis/b4-reward-item-economy.md`;规则/EC/AC/F/OQ 编号与全部数值不动,零规则变更 | -| C3 修订批回写 | 2026-09-14 | /design-review C3 修订批(X-9 回执,registry 同批回写):**clear_blast 清图槽换位**(原 clear_knife 入库刀→instant_aoe p40 当场兑付全体存活敌、不入库不占可选类供给、完美 ×2)· **K_dmg 默认 1→0 + "C3 禁区默认值"条款解除**(刀保底语义由供给控制器战斗首件保证取代,no_damage_row 后闸保留)· **RewardConfigTable +2 参数**(active_p0=0.4 / active_decay=0.5)+ pool_tag 枚举增 active_inject · **供给控制器机制本体承接登记**(RewardSupplyController——install 期注入,E[战斗获取]≈1 标定目标)· 默认根行集重登记(减伤墙批 defense 24→16 + 注入池权重 60/30/10);B1 条款⑤计价基元随换位重推(C = power = 40——clause5_dominance.c3_ruling) | -| v1-lean | 2026-09-13 | lean 格式迁移:legacy 原稿按 B1 lean 样例重排——修订注记出正文收敛至本表;散文/枚举/边界情况/义务清单/失衡预警/覆盖矩阵/缺口预检/AC 全部转表格;流程转字符画;F1–F6 公式、Variables、验算数据与 21 条 AC 全保留;语义与 2026-09-12 对齐状态一致,零规则变更 | -| 摘要同步 | 2026-09-12 | 六处旧口径摘要对齐关卡域权威版(Interactions D1/B5 行、边界情况、依赖、Tuning Knobs、Visual/UI、覆盖声明)——零语义变更 | -| 两级奖励批 | 2026-09-11 | 用户裁决:奖励按交付轴两类(即时 75% / 可选 25%,枚举扩至五值);库存生命周期改关卡域(跨战斗延续、关卡末清空——原战斗域口径退役);治疗两级稀缺化(heal_pack 权重 6%、power 12);道具使用窗口单件制;buff 时长改当次结算(attack_up/defense_up D=1);attack_up 复活(HeroTable.atk 基础攻击恒存在、域 [1,999]、0 加载拒绝)——默认根八行重登记、F5 供给闸 P_min=8、AC-18/AC-19 改写、锚参照回迁 attack_up 当量 | -| full design-review 修订 | 2026-09-09 | 五专员对抗 + creative-director 终审 NEEDS REVISION——14 条 blocking 同日修订核销:道具使用窗口锚点移至授予段后(当轮拾取当轮可用)、B4 配置值落 RewardConfigTable、D1 义务 3→5 扩容、E18–E21 输入域语义补裁、reward_roll scope 语义改写回写(registry/D2 同步)、失衡预警重校准(①拆短缺/浪费双指标、④按吸收上限重推、⑤补雾板分层、新增⑥⑦⑧)、缺口预检 11 项;CD 情绪定位终审与预读/寻路 MVP 呈现面如实降级同批落位;待 delta 复核放行 | -| v1 | 2026-09-09 | lean 门禁一次会话定稿(systems-designer / qa-lead 代理起草):F1–F6 + 21 条 AC + B1/D1 义务清单 + 失衡预警预注册落位;核心拍板——奖励身份 install 期预分配、结算段序(增益/减益 > 道具 > 战斗)、奖励分流与幂等受理、RewardTable/RewardConfigTable schema | diff --git a/design/archive/gdd-2026-09-14/c2-adventure-structure.md b/design/archive/gdd-2026-09-14/c2-adventure-structure.md deleted file mode 100644 index 21bdf71b..00000000 --- a/design/archive/gdd-2026-09-14/c2-adventure-structure.md +++ /dev/null @@ -1,304 +0,0 @@ -# C2 冒险结构(Adventure Structure) - -> **状态**:Approved · **版本**:v2(两件套迁移)· 2026-09-14 · 作者:DK + design-system -> **一句话**:C2 管一次冒险的骨架——关卡序列怎么排、通关给什么、死了怎么重来;位于 C1 关内行进之上、B1 战斗结算之下。 -> **推演件**:`design/gdd/analysis/c2-adventure-structure.md`(本文件只收结论;公式推导、候选取舍、复核审计与开放问题在那里) - -## 设计目的 - -C2 是冒险/序列层编排系统:冒险生命周期、关卡序列、跨战斗 HP 账本、关卡大奖励、失败重开——C1 关内行进的上层结构,B1 战斗结算的入参供给方。承载支柱:P4 地牢下探的探险氛围(主)、P3 恢复点/囤积决策、P1 冒险级掌控。 - -1. 下探节奏(P4):"又清完一层,再往下"——序列推进 + 关卡大奖励是下探途中的喘息台阶;每关一个可命名的新层(display_name),难度台阶可感知(雾解锁 / 数值跳升 / 通关率带下移)。 -2. 恢复点囤积(P3):"Boss 前把血囤满"——HP 账本跨战斗延续 + 恢复点按比例回血;血是冒险内唯一带得走的资源,恢复点位置就是决策压力点。 -3. 冒险级掌控(P1):"这局我到第二层"——冒险摘要(到达层 / 通关数 / 代币记账)给每次死亡一个可对照的坐标;重开 = 新种子新局面,不是同一关的复读。 -4. 锚点时刻:"这层清完了"——Boss 倒下 → 大奖励兑付 → 下一层开门的节拍;死亡 → 摘要结算 → 一键再来。 - -## 系统范围 - -负责: - -- 冒险状态机与结果语义 -- 关卡序列定义——LevelTable 行集内容 owner + 推进规则 -- HP 账本——跨战斗 HP 持久性的 C2 半边兑现 -- 关卡大奖励 -- 失败重开语义 -- master_seed 接线——冒险 = 种子域单位 -- 冒险摘要 - -不负责: - -- 关内节点行进与节点兑付触发(C1) -- 战斗结算与关卡清库调用(B1) -- 奖励内容与库存语义(B4/C3) -- 数值曲线(C3) -- 代币持久化与天赋(C4/D3) -- 呈现(D1) - -## 核心循环与冒险生命周期 - -``` -新冒险(Idle) - │ ① reseed(master_seed)——RngService 种子注入,冒险域单位恰一次 - │ ② HP 账本置满 · 序列位置 = 1 - ▼ -start_level(1) ──► 关内行进(C1 域:节点链逐节点推进) - │ ├─ battle/boss 节点 ─► C1 组装 begin_battle(L, D, hero_hp, override) → B1 - │ ├─ reward 节点 ─► B4 节点奖励入库(关内域库存) - │ └─ rest 节点 ─► C2 账本恢复(比例 = rest_heal_pct) - │ - │ 关卡收束点 = Boss 战胜利 ∨ 英雄死亡 - │ C1:调 B1 level_clear(库存关卡域清空 + 快照计数)→ level_end{cleared | defeated}(C1 → C2) - ├─ cleared 且当前关 < N ─► 关卡大奖励(上限提升 · 血回满 · 代币记账)→ start_level(L+1)(回上面行进) - ├─ cleared 且当前关 = N ─► 冒险完成结算 ──────────────┐ - └─ defeated ∨ abandoned ─► 冒险失败结算 ──────────────┴─► 冒险摘要 → Idle(重开 = 全新一轮) -``` - -| 出口 | 触发 | 动作序列 | 约束 | -|---|---|---|---| -| 下一关 | level_end(cleared) 且当前关 < N | 大奖励兑付 → start_level(L+1) | 大奖励在清库之后(C1 收束点已先调 B1 level_clear) | -| 冒险完成 | level_end(cleared) 且当前关 = N | 冒险结算(不再发上限提升——没有下一战可受益) | 摘要标记 run_completed | -| 冒险失败 | level_end(defeated) | 冒险结算 | 库存已由收束点清空;血条归零即终 | -| 冒险放弃 | 玩家发起、非战斗期受理 | 冒险结算(结果 = abandoned) | 已获大奖励不追回;与失败同型 | - -## 领域一:冒险状态机与结果语义 - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| Idle | 冷启动 / 冒险结算完成 | 唯一出口 = 开始新冒险(reseed → 置账本 → start_level(1)) | -| RunActive | start_level(L) 受理 | 关内行进委托 C1;C2 只守账本写口与收束监听;放弃请求非战斗期受理 | -| Settling | level_end 或 abandoned 受理 | cleared 非末关 → 大奖励 → start_level(L+1) 回 RunActive;末关 cleared / defeated / abandoned → 摘要产出 → Idle | - -不变式: - -1. [状态机]在 RunActive 期间保持恰一关卡在飞;master_seed 冒险内恒定;HP 账本恒在 [0, max_hp_eff]。 -2. [状态机]在已进入 Settling 后收到重复 level_end 宣布时拒绝重复兑付并给诊断——账本与摘要零变化(幂等)。 -3. [状态机]在整个冒险内保持零流消费——RngService open_stream 零命中。 -4. [C1]在宣布 cleared 收束时账本入账 hp 必须 > 0;英雄死亡但战斗判定胜利为结构不可达(B1 判定 hero 先判)——违者防御断言拦截。 - -结果与收束枚举(封闭枚举): - -| 层级 | 值 | 触发 | 标记 / 后续 | -|---|---|---|---| -| 冒险结果 | completed | 末关 level_end(cleared) | 摘要 run_completed = true | -| 冒险结果 | failed | level_end(defeated) | run_completed = false | -| 冒险结果 | abandoned | 玩家放弃(非战斗期受理) | run_completed = false | -| 关卡收束 | cleared | Boss 节点战斗胜利 | 末关判定 → 大奖励 + 推进 / 冒险完成 | -| 关卡收束 | defeated | 任意战斗英雄死亡 | 冒险失败结算 | - -冒险摘要(结算产出;消费方 C4 / D3 / playtest 日志): - -| 字段 | 类型 | 语义 | -|---|---|---| -| run_completed | bool | 冒险是否打穿序列 | -| levels_cleared | int | 已通关数(代币记账乘子) | -| level_reached | int | 止步关卡序号(失败 / 放弃时 = 当前关) | -| tokens_recorded | int | levels_cleared × token_per_level | -| master_seed | int64 | 本冒险种子(复盘 / 快照域标识) | - -## 领域二:关卡序列与深度标号 - -| 项 | 语义 | -|---|---| -| 节点类型 | battle / boss / reward / rest——reward、rest 不占深度、不查战斗表;battle、boss 占深度 | -| 深度标号 | 战斗节点深度 = 该节点之前(含同链)已排 battle/boss 节点数,从 0 起计;Boss 恒为链末节点且深度 = Dmax | -| 链模板(MVP) | battle(D0) → battle(D1) → reward → battle(D2) → battle(D3) → rest → boss(D4)——每关 7 节点 5 战斗深度;L1/L2 同构复用,模板修订随内容批 | -| 覆盖义务 | 冒烟断言:行集内每个 battle/boss 节点 (L, D) 在 enemy / board_gen 两表存在精确行(D2 跨表校验复用 + 序列关数断言)——序列关数 ⊆ 内容覆盖,越界 = 内容生产缺口 | -| 生效前提 | N=2 行集扩展前提 = C3 L2 深度轴行值填充批落地;未填充期冒险以单关行集运行(N=1 合法态——切片现状) | - -序列规则: - -1. [C2]让冒险从序列第 1 关起步、倒下即终、清完末关即成:关卡通关(Boss 战胜利)自动进下一关;MVP 线性序列,不做跳关、不做回头路。 -2. [C2]把冒险关数锁定为行集关数:加关必须链行 + 敌我数值 + 变异解锁同批落,禁止只加序列不加内容——冒险关数 ⊆ 表内容覆盖,越界关卡 = 内容生产缺口;序列难度排布消费 C3 通关率带(L1→L2 带下移 + 雾解锁台阶)。 -3. [冒烟断言]在 MVP 全行集上校验覆盖义务:每个 battle/boss 节点 (L,D) 在 enemy / board_gen 有精确行、序列关数 = 行集关数;行集战斗节点缺行即拦截。 -4. [C2]对 start_level 越界请求与关卡行缺失(LevelTable 无该 level_index 行)一律防御 fail-fast——序列配置违约、非玩家可达态;运行时战斗表 floor 兜底属 D2 既有语义,与本层分属两层。 - -设计意图:让内容缺口在冒烟期暴露、由内容批补齐,而不是运行期兜底吞掉。 - -**F1 冒险通关率合成(设计期工具式)**:P(冒险通关) = Π P(L_i 通关);MVP N=2 合成带 = [6%, 20%](L1 [30,50]% × L2 [20,40]%)——冒险长度即难度总闸。 - -``` -P_run = Π_{i=1..N} P(L_i) (逐关独立满血开局口径) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 各关通关率 | P(L_i) | float | (0,1) | C3 期望表逐关目标带(L1 [30,50]% / L2 [20,40]% / L3+ [10,25]% 预留) | -| 冒险关数 | N | int | [1, 行集关数] | LevelTable 行集关数——MVP 2 | - -| 验算 | 读数 | 判定 | -|---|---|---| -| N=2 合成 | [0.30×0.20, 0.50×0.40] = [6%, 20%] | 单次通关率带合理(Roguelike 体感:多数局止步中途) | -| 口径闭合 | C3 带按每关满血开局校准;大奖励血回满使该口径跨关成立 | ✓(若未来大奖励改部分恢复,本式失效须改口径) | - -## 领域三:HP 账本与恢复 - -1. [C2]让主角一条血走完整个冒险——账本收支四口:冒险开始置满 / 每战开始交出 / 战后收回 / 恢复点与大奖励入账;关卡切换零结算,关卡只换地图不换血条。 -2. [C2]把血限定为冒险内唯一跨战斗资源:buff 战斗域清(B1)、库存关卡域清(C1 收束点)、RAP 战斗域清(A3)——冒险内无跨关遗留物,冒险层账本与摘要是唯一跨关状态。 -3. [C1]在每场战斗结束后向 C2 报英雄 HP 终值(胜负皆报):victory 腿 hp ∈ [1, max_hp_eff];defeat 腿 = 0,血条归零即冒险终。 -4. [C2]在恢复点节点兑付时按比例回血并 clamp 上限;满血触发回复 0,合法(账本静默——无明细行协议,与战斗域"奖励未生效"族不同层)。 - -**F2 HP 账本结算式**:账本三写口全部 clamp 于 [0, max_hp_eff];大奖励回满使每关开局恒满血——血条跨关只降不自动回,恢复只来自恢复点与大奖励两个显式口。 - -``` -战后回写: hp := report_battle_end(hp) (victory 腿 hp ∈ [1, max_hp_eff];defeat 腿 = 0 → 冒险终) -恢复点: hp := min(hp + floor(max_hp_eff × rest_heal_pct ÷ 100), max_hp_eff) -大奖励: max_hp_eff := max_hp_eff + level_clear_hp_bonus; hp := max_hp_eff -战斗输入: begin_battle(hero_hp = hp, hero_max_hp = max_hp_eff, hero_atk = 表值通道) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 账本血量 | hp | int | [0, max_hp_eff] | C2 冒险域持有;战斗内由 B2 承载 | -| 生效上限 | max_hp_eff | int | [表值, 表值+加成×已通关数] | HeroTable.max_hp + Σ大奖励提升 | -| 恢复比例 | rest_heal_pct | int | [0,100] | LevelTable 逐关行字段(切片 30 转正 provisional——数值复验归 C3) | -| 上限提升 | level_clear_hp_bonus | int | [0,999] | AdventureTable 单行全局(默认 10) | - -| 验算(示例轨迹,表值上限 50) | 账本读数 | -|---|---| -| 冒险开始 | 50/50 | -| D0–D3 逐战后(示例) | 43 → 31 → 24 → 17 | -| 恢复点(30% × 50 = 15) | min(17+15, 50) = 32 | -| Boss 胜后(假设余 8)→ 大奖励 | max_hp_eff = 60、HP = 60 | -| L2 开局 | 60/60 满血(C3 带口径闭合) | - -## 领域四:关卡大奖励 - -1. [C2]在关卡收束清库之后、下一关开始之前兑付大奖励——顺序不可换(清库已由 C1 收束点先调 B1 level_clear)。 -2. [C2]按三件固定构成兑付、不进背包不占库存域;上限已有加成时后续大奖励累加——每关一份,N=2 冒险至多一次。 -3. [C2]在末关通关时不兑付大奖励——没有下一战可受益;代币照记,只做冒险完成结算,不发上限提升、无 start_level(N+1)。 - -设计意图:奖励的收益面只朝"下一战"生效——所以清库后才兑付、末关不兑付。 - -| 件 | 内容 | 载体 | 数值 | -|---|---|---|---| -| 上限提升 | max_hp_eff += level_clear_hp_bonus(冒险内生效——经 begin_battle 覆盖值传入后续每战) | C2 账本 + AdventureTable | +10 provisional(C3 区间平移换算率锚:+10hp ≈ +1 轮) | -| 血回满 | HP 账本 = 提升后 max_hp_eff | C2 账本 | 结构定式(非 knob——与 C3 满血开局校准口径闭合) | -| 代币记账 | tokens += token_per_level | 冒险摘要 | 10/关 provisional(消费方 C4) | - -**F3 冒险代币记账式**:tokens = levels_cleared × token_per_level——通关与中途死亡同式,差异只在 run_completed 标记;通关加成位预留(MVP 不启用,裁决归 C4)。 - -``` -tokens_recorded = levels_cleared × token_per_level (token_per_level 默认 10,消费方 C4) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| 通关数 | levels_cleared | int | [0, N] | 摘要字段 | -| 每关代币 | token_per_level | int | [0,999] | AdventureTable 单行全局——值归 C4 | - -| 验算 | levels_cleared | tokens | -|---|---|---| -| 死在 L1 | 0 | 0 | -| 清 L1 死在 L2 | 1 | 10 | -| 打穿 N=2 | 2 | 20 + run_completed 标记 | - -## 领域五:失败重开、放弃与种子域 - -1. [C2]在任意战斗英雄死亡时终止冒险——失败 = 冒险终,无关卡重试、无检查点(Roguelike 语义已锁);血条归零即终。 -2. [C2]把重开做成全新一轮:新种子 / 第 1 关 / 满血 / 空手——重开不是关卡重试;保留面 = 冒险摘要,清零面 = 账本 / 库存 / 种子域。 -3. [C2]把中途放弃按与失败同型结算:已获大奖励不追回、已到手的保留;放弃请求仅非战斗期受理,战斗中拒绝(战斗域单事务在飞;入口呈现仅非战斗期可达——MVP 无 UI 入口)。 -4. [C2]在冒险开始时注入 master_seed 恰一次:冒险内雷图生成 / 奖励抽取 / 遭遇掷骰全部派生自该种子、冒险内不重置;切片逐关播种为其无冒险层的历史简化,本条转正为冒险域单种子;冒险可复现域 = master_seed + 三流计数器。 -5. [实现层]把重开种子与上局相同视为合法态(熵源小域):约束 = 种子生成禁走玩法随机通道、冒险内计数器随 reseed 归零;种子值生成源裁决归实现期 ADR。 - -## 领域六:C1/C2 编排边界(接口契约) - -1. [C1]拥有并执行关内一切行进——节点移动 / 兑付触发 / 战斗发起;关卡收束点(Boss 战胜利或英雄死亡)在 C1 宣布。 -2. [C1]在收束点先调 B1 level_clear(库存关卡域清空 + 快照计数)、再向 C2 宣布 level_end——库存清空触发源唯一。 -3. [C2]在收束上只接结果:零战斗域直调、零库存域直调,不碰库存域——关卡末清库由 C1 收束点触发 B1 level_clear。 - -| 接口 | 方向 | 载荷 | 时点 | -|---|---|---|---| -| start_level(level_index, ctx) | C2 → C1 | ctx = {level_index, hero_hp, hero_max_hp_eff} | 冒险开始 / 每次关卡推进 | -| report_battle_end(hp) | C1 → C2 | 战后英雄 HP 终值(胜负皆报) | 每场战斗结束后 | -| heal_clamped(pct) | C1 → C2 | rest 节点恢复请求(比例取关卡行 rest_heal_pct) | 恢复点节点兑付 | -| level_end{result, hp, node_index} | C1 → C2 | result ∈ {cleared, defeated}(C1 已先调 B1 level_clear) | 关卡收束点 | -| 冒险放弃(abandoned) | D1 → C2 | 无载荷 | 非战斗期受理(MVP 无 UI 入口——语义预留) | -| 战斗发起组装 | C1 编排 | begin_battle(L, D, hero_hp, hero_atk, hero_max_hp):L / hero_hp / hero_max_hp 取 C2 下放,D 取链位,hero_atk 传表值通道(MVP 冒险内不提升攻击) | battle/boss 节点行进至 | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | C3 | hard | 期望表逐关通关率带 = 序列难度排布输入;L2 深度轴行值(enemy / board_gen 的 (2, D1–D4))随批填充 = N=2 生效前提;大奖励 / 恢复点数值联动复验(区间平移换算率锚) | -| 上游 | D2 | hard | LevelTable schema(切片建表——C2 为行集内容 owner)· AdventureTable 新表走 D2 接口漂移规则(单行全局,C2 回填 owner)· ConfigDB 单点读取 · RngService 种子注入入口(新面——义务登记)· 跨表校验复用 | -| 上游 | B1 | hard(下游消费面) | begin_battle 入参 (L, D, hero_hp, hero_atk, hero_max_hp) 供给方转正 = C1 组装 / C2 供值;level_clear 调用方 = C1 收束点(C2 零直调);战后 HP 读回 = B1 呈现面英雄投影(载荷自包含) | -| 上游 | B2 | 间接 | hero hp_persistence 归 C1/C2——本 GDD 兑现 C2 半边(账本);B2 单位接口零变更 | -| 上游 | B4 | 间接 | 库存关卡域清空触发源 = C1 收束点;节点奖励兑付归 C1;大奖励不进库存域(零接触) | -| 上游 | A4 | 间接 | 雾 unlock_level=2 = L2 台阶的内容面(序列难度排布消费) | -| 下游 | C1 | hard | 接口契约四件套 + 收束点语义 + 战斗发起组装权(领域六契约表全文)——C1 GDD 强制输入,门禁评审核对项;切片 level_runner 为其实现先例(冒险域职责切出后归 C2 侧新 owner) | -| 下游 | B1 | 下游(消费 C2 供值) | begin_battle 入参面;B1 依赖表 C1/C2 provisional 行由本 GDD 收编转正 | -| 下游 | C4 | 远 | 冒险摘要 = 代币入账位;冒险开始参数面 = 天赋注入预留位(MVP 空参数——开始新冒险时注入,结构同 begin_battle 覆盖值通道) | -| 下游 | D3 | 远 | 快照契约域单位 = 冒险(master_seed + 三流计数器);摘要字段含 master_seed 供复盘 | -| 下游 | 呈现层(D1) | soft | 冒险摘要结算画面 / 关卡推进指示 / 放弃入口(非战斗期)——数据源 = 本 GDD 摘要与状态投影 | - -跨 GDD 义务台账(对侧修订批逐项核对,缺项即阻塞级按各自门禁): - -| 对侧 | 内容 | 状态 | -|---|---|---| -| C3 | L2 深度轴行值填充(enemy 四行 + board_gen 四行,(2, D1–D4))——OQ1"内容与数值同批"机制的兑现批 | N=2 生效前提 | -| D2 | RngService 种子注入入口登记(reseed——provisional 名,实现载体随 ADR) | 义务登记 | -| D2 | AdventureTable 建表(单行全局两字段——Rule 4 豁免,HeroTable/SettlementTable 先例;C2 回填 owner) | 接口漂移 | -| B1 | begin_battle 入参供给方转正(依赖表 C1/C2 行收编——本 GDD 为 C2 半边定义源) | 转正登记 | -| registry | level_table / adventure_table / hero_override_parameter_passing 三条目登记(本定稿批执行) | 本批 | -| C1 | 接口契约四件套 + 收束点语义全款承接(C1 GDD 门禁评审核对——C2 在 C1 之前设计,本表即其接口基线) | 待 C1 定稿核对 | -| C4 | token_per_level 记账消费 + 天赋注入位消费 | 远(C4 期) | - -## P0 最小闭环 - -1. 玩家在 Idle 开始新冒险——reseed 恰一次注入新 master_seed、HP 账本置满、序列位置 = 1。 -2. C2 受理 start_level(1),把 {level_index, hero_hp, hero_max_hp_eff} 下放 C1,C1 开始节点链行进。 -3. C1 行进至 battle/boss 节点,组装 begin_battle(L, D, hero_hp, hero_max_hp) 调 B1 结算。 -4. B1 战斗结束,C1 report_battle_end(hp) 回报,C2 账本回写(defeat 腿 = 0 → 跳第 8 步)。 -5. rest 节点:C1 发 heal_clamped 请求,账本按比例回血;reward 节点:B4 节点奖励入库(关内域库存)。 -6. Boss 胜利 = 关卡收束点:C1 先调 B1 level_clear 清库,再向 C2 宣布 level_end{cleared}。 -7. 非末关:C2 兑付大奖励三件 → start_level(L+1) 回第 2 步;末关:冒险完成结算(进第 8 步)。 -8. 冒险结算(完成 / 失败 / 放弃)产出冒险摘要 → Idle——重开即全新一轮,回到第 1 步。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | L2 行集扩展批(N=2 生效) | 前提 = C3 L2 深度轴行值(enemy/board_gen (2, D1–D4))填充批;未落地前以单关行集运行(N=1 合法态) | -| P1 | 放弃入口呈现(UI) | MVP 无 UI 入口——仅语义预留(非战斗期受理、同失败型结算);细节归 D1 / UX 批(OQ4) | -| P2 | 大奖励形态扩展(三选一 / 攻击型 / 通关加成) | AdventureTable 扩列结构位已留;设计随 C4 元进度(OQ2) | -| P2 | 天赋注入位消费 | 冒险开始参数面预留(MVP 空参数——开始新冒险时注入,结构同 begin_battle 覆盖值通道);归 C4 | -| P2 | 冒险长度扩展(N > 2) | MVP N=2(约 15–25 分钟)vs 愿景单局 20–40 分钟;扩关 = 内容批,节奏按真人单关时长数据定(OQ1) | - -## 调参表 - -| 字段 | 域 | 默认 | owner | 说明 | -|---|---|---|---|---| -| LevelTable 行集(N 与链模板) | level.tres 逐关行 | L1 现行 + L2 随批 | C2 内容批 | 加关 = 内容批(链行 + C3 数值 + 变异解锁同批);过长 = 内容缺口,过短 = 冒险时长不足(愿景 20–40 分钟 vs MVP 两关,真人数据后定扩展节奏) | -| LevelTable.rest_heal_pct | int [0,100] 逐关行 | 30 provisional | C3(数值复验) | 恢复点比例;100 = 恢复点变全满泉、0 = 死节点 | -| AdventureTable.level_clear_hp_bonus | int [0,999] 单行全局 | 10 provisional | C3(值锚) | 大奖励上限提升;值锚 = C3 平移换算率(+10hp ≈ +1 轮);上调须 C3 重扫 L2 带 | -| AdventureTable.token_per_level | int [0,999] 单行全局 | 10 provisional | C4 | 代币记账消费方 | -| 链模板节点构成 | level.tres nodes 数组 | 战×2→奖励→战×2→恢复→Boss | C2 内容批 | 节点类型序列修订 = 内容批(随 C3 数值同批验带),非调参 | - -- 非 knob(结构冻结):序列线性无跳关、Boss 恒末节点、死亡即冒险终、大奖励三件构成、冒险内零流消费、收束点编排边界。 -- knob 交互:level_clear_hp_bonus × C3 L2 通关率带(回满 + 上限共同抬开局强度——上调走 C3 重扫);rest_heal_pct × 通关余量带(C3 通关余量 p10 ≥ 3 的对冲杠杆)。 - -## 验收标准 - -| AC | Given | When | Then | -|---|---|---|---| -| AC-1 | 冒险 Idle | 开始新冒险 | reseed 恰一次注入新 master_seed;HP 账本 = 表值上限满血;start_level(1) 受理;L1 行集加载零诊断 | -| AC-2 | RunActive 当前关 < N | level_end(cleared) | 大奖励恰一次:max_hp_eff += level_clear_hp_bonus、账本 = max_hp_eff、tokens += token_per_level;随后 start_level(L+1) | -| AC-3 | RunActive 当前关 = N | level_end(cleared) | 冒险完成结算:无上限提升、无 start_level(N+1);摘要 run_completed = true、tokens = N × token_per_level | -| AC-4 | RunActive 任意战斗 | 英雄死亡 → level_end(defeated) | 冒险失败结算;摘要 levels_cleared = 已通关数、level_reached = 当前关;账本封闭 | -| AC-5 | 冒险结算后 | 开始新冒险 | 全状态重置(账本 / 序列位置 / 库存域空 / 摘要新生成);reseed 新种子注入 | -| AC-6 | RunActive 全程 | 逐战核对入参 | begin_battle.hero_hp = 账本当前值、hero_max_hp = max_hp_eff;战后账本 = 英雄终值投影(载荷自包含) | -| AC-7 | MVP 全行集 | 冒烟跨表断言 | 每关 battle/boss 节点 (L,D) 在 enemy / board_gen 有精确行;序列关数 = 行集关数 | -| AC-8 | C2 文件集 | 静态扫描 | RngService 流消费(open_stream)零命中;reseed 每冒险恰一次调用 | -| AC-9 | Settling 已受理 | level_end 重复宣布 | 拒绝 + 诊断;账本与摘要零变化 | -| AC-10 | 生效前提未兑现(L2 行集缺行) | 冒烟运行 | 以单关行集载体运行(N=1 合法态);N=2 断言显式 SKIP 非 FAIL | -| AC-11 | RunActive 战斗中提交放弃请求 | 请求受理判定 | 拒绝;非战斗期受理 → abandoned 同失败型结算、已获大奖励不追回 | -| AC-12 | 大奖励后首战 | begin_battle 入参核对 | hero_max_hp = 旧上限 + level_clear_hp_bonus(覆盖值通道);hero_atk 走表值通道(MVP 恒不覆盖) | -| AC-13 | rest 节点兑付 | 满血 / 缺血两腿 | 恢复 = floor(max_hp_eff × rest_heal_pct ÷ 100) clamp 上限;满血腿回复 0 合法 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1 | 2026-09-14 | 初版 solo 出稿:七核心规则(冒险骨架 / 序列覆盖 / HP 账本 / 大奖励 / 失败重开 / 种子接线 / C1-C2 编排边界)+ F1–F3 + 13 AC + 给 C1 接口契约四件套;MVP N=2 + AdventureTable 单行全局 + N=2 生效前提登记;切片 level_runner 关卡域先例切分转正(冒险域归 C2、关内行进归 C1) | -| v1.1 | 2026-09-14 | 评审通过状态同步:状态头 In Design → Approved、复核注记更新(--solo APPROVED + 日志路径登记);零规则变更 | -| v2 | 2026-09-14 | 两件套迁移:按 v2 骨架重排为 design 件(设计目的 / 系统范围 / 核心循环 / 领域章节×6 / 依赖与输出 / P0 / P1·P2 / 调参表 / 验收标准 GWT)——零规则、零数值、零 AC 变更;公式推导与论证、复核审计注记、开放问题(OQ1–OQ5)迁至 `design/gdd/analysis/c2-adventure-structure.md` | diff --git a/design/archive/gdd-2026-09-14/c3-difficulty-curve.md b/design/archive/gdd-2026-09-14/c3-difficulty-curve.md deleted file mode 100644 index f1cdf33c..00000000 --- a/design/archive/gdd-2026-09-14/c3-difficulty-curve.md +++ /dev/null @@ -1,456 +0,0 @@ -# C3 难度曲线与精英/Boss(Difficulty Curve & Elite/Boss) - -> **状态**:In Design · **版本**:v2-两件套 · 2026-09-14 -> **承载支柱**:P4 地牢下探的探险氛围(主)· P1 推理的掌控感 / P3 风险与收益同源(难度即压力源) -> **一句话**:敌人强度、雷图压力、奖励供给与精英/Boss 修饰的唯一数值所有者。 -> **推演件**:`design/gdd/analysis/c3-difficulty-curve.md`(本文件只收结论,推导与论证在那里) - -## 设计目的 - -C3 定义"难度 = f(关卡序号, 节点深度, 精英/Boss 修饰)"中每一项随进度如何变化。定位是数值 owner 而非机制 owner:表结构归 D2、生成算法归 A1、结算规则归 B1、敌种机制归 B2——C3 以行值与参数驱动已定稿机制,形成"越下越险"的进度体感。玩家不直接感知本系统(Indirect),它是体感背后的统一坐标系。 - -1. 每层一个可感知、可解释的难度台阶("这一层开始有雾了")——新敌种/新行为环段/新变异解锁 + 基准数值跳升,跃升可归因于可见变化而非纯数字膨胀;第二层首遇熊地精(三拍行为环 vs 地精单拍)让跃升有具体面孔。 -2. 首关基线明显吃紧但多数玩家能过;天赋提升产生可测量的通关期望改善(区间平移换算率:+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)——"我变强了"是可推导结论。 -3. Boss 房开门前是恢复点/囤刀决策压力的顶点——供给稀缺性在此兑现价值,Boss 血量压迫由血量锚承载;击杀 Boss 有"这层我算下来了"的完成感。 -4. 每次修订走同一条七步流程、期望偏离必须登记——玩家已适应的曲线不会被静默改掉。 - -设计意图:参考感受合成 = Peglin 地图难度爬升 × 杀戮尖塔 Act 结构(普通→精英→Boss 三段节奏)→ 关间大台阶 × 关内小坡度 × Boss=Dmax 关底压轴。 - -## 系统范围 - -负责: - -- EnemyTable / BoardGenTable / RewardTable / RewardConfigTable / HeroTable 行值与参数 -- DifficultyTable 修饰结构位(MVP 空表) -- 难度期望表:按 (L,D) 的期望胜轮带 / 期望承伤占 max_hp 比 / 通关率目标带 / 通关余量带——调参的"正确行为"基准 -- 生存链区间模型:每战 S/K 区间三档判定 + 关级通关恒等式 + 输出占比带 -- A4 变异 unlock_level 门控序列投放计划 -- 七步调参流程 · P_perfect 乘数调参权 · m_w 调参通道(终值共裁 B4/B1)· B1 对账约束清单的承接与消解 - -不负责: - -- 表结构(D2)· 生成算法(A1)· 结算规则与护甲克制矩阵机制(B1——C3 投值) -- 敌种机制(B2)· 变异机制框架(A4——C3 只投内容行)· 精英节点完整语义(C1 联动) -- 元进度天赋数值(C4——C3 是其世界侧对照物)· 呈现(B2/B5/D1)· encounter 掷骰执行(B1 编排)· 供给控制器机制本体(B4——C3 投参数) - -## 核心循环 - -### 难度曲线生成(设计期直填 → 运行时直读) - -``` -设计期(本 GDD 唯一产出物 = 表行值) - │ ① L 轴台阶:每关 ≥1 项新内容投放(新敌种/新环段/新变异)+ base 跳升 k_L ∈ [1.3, 1.6] - │ ② D 轴坡度:同敌种 hp 平缓上移(坡度域)+ 板参数温和加压(target ≥ 0.85 绝对锚) - │ ③ Boss 行:Dmax 直填行(数值大台阶 + 专属行为环 + 本关最大板形) - │ ④ 七步调参流程走查 → 行值写入 enemy / board_gen / reward / reward_config / hero .tres - ▼ -运行时(C3 零公式;机制归各 owner) - │ ⑤ B1.begin_battle 实例化期:unit_count 区间均匀骰(encounter 封闭流)→ 本战实际数量 - │ ⑥ B2.spawn(L, D):R1 floor 解析 → 行值快照 → DifficultyTable 修饰套乘(快照之前;MVP 空表无修饰) - │ ⑦ A1 读 BoardGenTable 行生成 → 挖掘期 → B1 结算(既有乘区:护甲克制 / 状态池 / 充能伤害) - ▼ -战斗/挖掘按既有系统运作(C3 运行时零公式) -``` - -| 出口 | 触发 | 动作/去向 | 约束 | -|---|---|---|---| -| 调参通过 | 七步全 PASS | 行值生效 → 期望表复算 → 调参日志登记 | 期望偏离必须登记,禁止静默出带 | -| 调参失败 | 任一步 FAIL | 回滚行值或登记开放问题 | 禁止带病前进 | -| 红档组合 | 任一战 S_max ≤ K_min | 扫描步拦截,行值禁止入表 | 配置事故——区间模型判定 | -| 期望表偏离 | 调参后越出通关率/余量带 | 回滚或开放问题登记 | 禁止静默出带(状态表同名行) | -| 投放断档 | 某关无新敌种且无新环段 | 流程投放检查项拦截 | 内容生产缺口——C3 调参无法修补(数值不是内容) | - -## 基表行值与投放 - -规则: - -1. C3 把全部 (level_index, node_depth) 维度的最终数值**直填**各基表行(EnemyTable / BoardGenTable / RewardTable——切片已验证的工作方式:R1 floor 解析直读、零新机制);DifficultyTable 仅承载"按坐标施加的全局修饰"结构位,MVP 不产生任何修饰行;Boss 走 Dmax 直填行、不走修饰表(Core Rule 1)。 -2. 难度 = f(L, D) 双轴语义:L 维(关间)= 大台阶——每关至少一项新内容投放(新敌种 或 新行为环段 或 新变异解锁)+ 基准数值跳升;D 维(关内)= 小坡度——同敌种数值平缓上移(坡度域见 F1)、板参数温和加压(尺寸/密度小步上调,推理率 target 不低于 0.85 绝对锚);Boss = 各关 Dmax 行(Core Rule 2)。 -3. 每关至少一个新敌种或既有敌种新环段投放;MVP 投放 = L1 三段(goblin→bugbear→ogre_chief,见行值总表);DND 更名批生效:grub→goblin、ambusher→bugbear、boss_guardian→ogre_chief——registry/B2/D1/art-bible 键集随本修订批对齐;多敌种同深度选择:MVP 每行集恰一敌种(B2 锁定),C1 分支地图定稿时若需同深度多敌种选择,走预登记改键通道——本 GDD 预留不定义(Core Rule 3)。 -4. 垂直切片调参登记的行集有实测依据,转正为 MVP 默认曲线——权威枚举 = 下两张表(v3,出处 = 切片 .tres),旧登记表(grub 时代值)由本表替代;后续 L2+ 曲线数值随关卡内容扩展填充(Core Rule 4)。 - -### MVP 行值总表(权威枚举,出处 = 切片 .tres v3) - -| 关卡 | 深度 | enemy_id | display_name | hp | atk(区间) | unit_count(_max) | pattern | armor_type | -|---|---|---|---|---|---|---|---|---| -| L1 | D0 | goblin | 地精 | 24 | 7 [4,10] | 1 (2) | [attack] | none | -| L1 | D1 | goblin | 地精一伙 | 13 | 5 [2,8] | 2 (3) | [attack] | none | -| L1 | D2 | bugbear | 熊地精 | 40 | 9 [6,12] | 1 | [attack, charge, heavy] | a | -| L1 | D3 | bugbear | 熊地精双雄 | 18 | 6 [3,9] | 2 (3) | [attack, charge, heavy] | a | -| L1 | D4 | ogre_chief | 食人魔酋长 | 150 | 9 [6,12] | 1 | [attack, attack, charge, heavy] | b | -| L2 | D0 | bugbear | 熊地精 | 30 | 7 [4,10] | 1 | [attack, charge, heavy] | a | - -### 转正行集(登记值) - -| 表 | 转正行集 | -|---|---| -| BoardGenTable L1 深度轴 | D0/D1 10×10 · D2–D4 12×12 · d0.25/t0.88 · attempts 24 | -| HeroTable | atk = 6 · max_hp = 50 | -| RewardTable 要点 | 格子池四行即时类(attack_up 20 / defense_up 16 / spark_aoe 16 / heal_minor 15)· 注入池三行可选类(knife_t1 60 / knife_adv 30 / heal_pack 10——供给控制器注入)· clear_blast 40(clear_default 槽,instant_aoe 当场兑付,完美 ×2) | -| RewardConfigTable | t_fog_min=2 · k_dmg=0(保底语义由战斗首件保证取代)· n_draft=32 · p_min=8 · active_p0=0.4 · active_decay=0.5 | -| SettlementTable 增补字段 | damage_a_per_cell=1 · damage_a_cap=8 · damage_b_per_flag=2 · armor_effectiveness 克制矩阵(base/dmg_a/dmg_b × none/a/b——特化 ×150 / 无甲 ×100 / 对位 ×50)· p_perfect=200 · D_ref=12 | - -- 实测依据:期望扫描 N=15–30 × 多种子 + 8 种子密度实验 + 试玩批次 1 + 减伤墙批。 -- v3 数值批(试玩批次 1 裁决):atk 4/4/6/4/7 → 7/5/9/6/9(约 +50%,承伤侧主杠杆);D0 24 保持防秒杀(20hp 会被首轮盲挖粉尘秒杀——12+9);Boss 130→150(用户拍板可上调)。 -- 区间批(现行):奖励五行 power 区间化(heal_minor [2,6] / knife_t1 [5,11] / heal_pack [6,18] / knife_adv [10,22] / clear_blast [25,55]——身份批内 roll,中点恒等原值)+ 敌方 atk 区间化(上表 [min,max],遭遇骰同流 spawn 期整战持久,±3 provisional)——宽度均 provisional 归本 GDD 测量迭代;A3 条款①当量锚以中点口径维持;验收口径 = 完美策略档 0 加成通关 ≤40%(OQ7)。 -- 加难走廊(带锚定稿预登记):L1 基线通关率目标 [30%, 50%],现扫描 60% 越上界——杠杆候选 = r_boss 上探走廊(Boss 180–207,见 F3)+ 群战上探 + 供给 decay 0.5→0.6;扫描验证待执行(OQ7),落带前 v3 值维持 provisional-pending-scan。 - -### 遭遇随机化(区间 unit_count) - -1. EnemyTable 行 unit_count 升级为**区间语义** [unit_count, unit_count_max](域 [unit_count, 3],B2 上界锁定不变),掷骰经 RngService encounter 封闭流;接口漂移登记完成:registry 流集合含 encounter、B1 begin_battle 掷骰增补、B2 spawn override 参数与 unit_count_max 字段增补、D2 schema 两字段增补(Core Rule 8)。 - -| 项 | 语义 | -|---|---| -| 区间语义 | unit_count 升级为 [unit_count, unit_count_max];unit_count_max 可省略——缺省 = 定值,旧行零迁移 | -| 域 | [unit_count, 3](B2 unit_count 上界锁定不变) | -| 掷骰时点 | B1.begin_battle 实例化期(扫雷开始前)按区间均匀骰定本战实际数量(B1 GDD 增补条款) | -| 敌种不变 | 同敌种掷骰——不触碰 B2"每行集恰一敌种"锁定 | -| 随机通道 | RngService `encounter` 封闭流(registry 流集合已登记);scope_event_binding = 每次战斗实例化恰一 scope;发生在挖掘决策域之外(P1 合规) | -| 消费方式 | B1 掷骰 → B2.spawn 以 override 参数接收实际数量(B2 零随机纪律保持——收到的即确定值;B2 GDD 增补条款) | -| 教学位豁免 | 新敌种首遇节点固定数量不加骰(D0 goblin ×1、D2 bugbear ×1 固定——行值总表) | -| 可回放性 | 同种子全程可回放(流取号确定性不变) | -| 设计原则 | 数量是比单体质变更优先的深度表达(F1 Example 延伸);期望总量对齐关级恒等式检算 | - -| 字段 | 域 | 语义 | -|---|---|---| -| unit_count | int [1, 3] | 区间下界;旧行语义 = 固定数量 | -| unit_count_max | int [unit_count, 3],可省略 | 区间上界——缺省 = 定值,旧行零迁移;掷骰 = B1 实例化期区间均匀骰 | - -| 流 | scope 绑定 | 消费点 | 语义 | -|---|---|---|---| -| encounter | 每次战斗实例化恰一 scope | B1.begin_battle 实例化期(扫雷开始前) | unit_count 区间均匀骰——同敌种数量随机;发生在挖掘决策域之外(P1 合规);同种子全程可回放 | - -## Boss / 精英 / 全局变异语义 - -规则: - -1. Boss = 关卡末节点 = Dmax 行(LevelTable 末节点必须 Boss——schema 校验);Boss 战胜利 = 关卡通关(C1/C2 域编排);Boss 数值台阶 = hp 取本关普通战斗 hp 期望总和的 0.5–1.1 倍 + atk ≥ 本关普通战最高行 atk(现值 Boss 9 ≥ bugbear 9 ✓)+ 专属行为环(含 charge 拍——玩家可规划的安全挖掘拍);Boss 板 = 本关最大板形 + 密度上探,受可推理率 target 绝对锚约束(Core Rule 5,A1 第三轴登记约定兑现)。 -2. 精英节点 MVP 不实现:`elite_` / `boss_` 前缀字段命名空间预留保留;精英修饰完整语义(独立节点类型/词缀系统/出现规则)归 C1 关卡节点地图定稿后的联动设计;分支地图中"同深度并存精英与普通节点"触发棋盘生成端强制重审(改键走 D2 接口漂移规则);本 GDD 承诺 DifficultyTable 结构位 + 命名空间预留足以承载,不预写语义(Core Rule 6)。 -3. `scope=global` 变异 = 该变异施加于整板全部合格格(区别于 region 的区域布置);全局变异仅 Boss/精英图可产生(普通图禁用——加载期校验:global 变异的布置行须伴随 elite/boss 标记;MVP 无标记字段前 = MVP 不产生 global 行,A4 既有 warning 承载);MVP 不定义任何具体全局变异行(岩浆/冰冻无 MVP 容器——A4 锁定),本条只锁定语义框架与禁用面(Core Rule 7)。 - -### DifficultyTable(新表,MVP 空表——结构位) - -| 项 | 值 | 语义 | -|---|---|---| -| 键 | (level_index, node_depth) | 按坐标施加的全局修饰 | -| 乘数域 | [0.1, 10](registry 预登记) | 套乘施加点 = B2.spawn 实例化时、行值快照之前;越域 → clamp 至域界 + warning(registry 登记的显式例外——组合事故非配置事故,非 fail-fast 场景) | -| MVP 行集 | 空(零修饰行) | 首个使用场景 = 精英节点;Boss 走 Dmax 直填行、不走修饰表;建表走 D2 接口漂移规则 | - -### DifficultyTable schema(difficulty.tres 待建——D2 接口漂移建表) - -| 字段 | 类型/域 | 默认 | knob | -|---|---|---|---| -| level_index + node_depth(复合键) | int × int | — | ✗(结构键) | -| 修饰乘数 | float [0.1, 10](registry 预登记域) | —(MVP 空表无行) | ✓(精英节点上线时启用;越域 clamp + warning——域界 = 玩法硬顶) | -| elite_ / boss_ 前缀预留字段位 | 命名空间预留(D2 schema 断言期望暴露) | 无 | ✗(预留,随精英节点语义定稿) | - -### A4 变异 unlock_level 门控序列(投放计划归 C3) - -| 序 | 内容 | 门控 | 说明 | -|---|---|---|---| -| 1 | 普通图(无变异) | 基线 | — | -| 2 | 雾 | unlock_level = 2(A4 锁定) | 雾参数 f≤8d / ≤0.25(P1 度量绝对上限) | -| 3 | 岩浆/冰冻 | 随关卡扩展 | 无 MVP 容器(A4 锁定)——投放计划归 C3 | - -设计意图:Boss 用直填行、精英留结构位——大台阶要一行可读可断言,修饰留给未来按坐标注入。 - -## 难度模型公式(设计期工具式) - -> 定位声明:C3 是数据系统——运行时零新增公式(数值直填基表行,运行时仅经既有 B1 乘区 / B2 接口 / R1 直读运作)。本节全部公式为设计期工具式(曲线拟合基准、区间估算、对账复算),执行载体 = 调参期批量工具(level_monte_carlo.gd / reward_expectation.gd),不进入游戏运行时。全部数值 provisional 起步,随 playtest 修正。 - -### F1 关内深度坡度(D 轴小坡度) - -**结论**:hp_D = round(hp_0 × (1 + s_hp × D))——每档 +5%–20%,Dmax=4 处 1.2–1.8 × D0、Dmax=5 处 1.25–2.0 × D0(同敌种内);MVP 直填行近似此式、不运行时计算;敌种切换(新敌种登场)不受本式约束——台阶值直接定。 - -``` -hp_D = round(hp_0 × (1 + s_hp × D)) - hp_0 ∈ [1,999](该敌种 D0 行 hp)· s_hp ∈ [0.05, 0.20](每深度档增幅)· D ∈ [0, Dmax](节点深度,Boss = Dmax) -``` - -- Example:goblin 24hp 的 D1 理论值 24×1.1 ≈ 26——切片实际以"群×2"(13hp ×2–3 只)表达深度压力:数量是比单体质变更优先的深度表达(保持单拍环低威胁读数、总量受控)。 - -### F2 关间台阶(L 轴大台阶) - -**结论**:base(L+1) ≈ base(L).Dmax × k_L、k_L ∈ [1.3, 1.6]——k_L 作用于**同敌种基准**(敌种延续场景,如 L2 bugbear 延续至 L3);新敌种登场时基准按其环复杂度重定(三拍环单位 hp 低于单拍环同关值——切片先例:bugbear 40/18 < goblin 群总量但威胁更高)。相邻关数值倍率 1.3–1.6,叠加新敌种环复杂度实际体感台阶更大。 - -``` -base(L+1) ≈ base(L).Dmax × k_L k_L ∈ [1.3, 1.6] -``` - -- 反例(边界):L1 Dmax 酋长 150hp → L2 D0 bugbear 基准 ≈ 210 的直推不成立——新敌种登场基准按环复杂度重定,k_L 仅适用于敌种延续场景(L2 锚行 30/7 为内容行非 k_L 直推)。 - -### F3 Boss 血量锚 - -**结论**:boss_hp ≈ round(Σ普通战斗hp期望 × r_boss)、r_boss ∈ [0.5, 1.1]——"Boss 是本关最大的单场消耗",量级上探至全关消耗;**加难走廊 [1.1, 1.35] 预登记**(带锚定稿——L1 通关率压带首选杠杆,扫描终裁后落带)。 - -``` -boss_hp ≈ round(Σ普通战斗hp期望 × r_boss) r_boss ∈ [0.5, 1.1](走廊 [1.1, 1.35]) - Σ普通战斗hp期望 ∈ [1,999]×N:本关全部非 Boss 节点敌方 hp 期望合计(含 unit_count 区间骰期望——口径与击杀侧恒等式统一) -``` - -| 验算 | 读数 | 判定 | -|---|---|---| -| L1 v3 | Σ = 36(D0 [1,2]×24)+ 32.5(D1 [2,3]×13)+ 40(D2)+ 45(D3 [2,3]×18)= 153.5 → Boss 150/153.5 ≈ **0.98** | 带内 ✓ | -| 走廊验算 | Boss 180/153.5 ≈ 1.17、200/153.5 ≈ 1.30 ∈ [1.1, 1.35] | 走廊内 ✓ | -| 败北分布 | 向 Boss 集中(4/6) | 符合压迫预期 ✓ | - -### F4 生存侧:期望承伤与 S 区间 - -**结论**:E[承伤/场] ≈ Σ_rounds Σ_enemies E[beat_dmg] × (1 − E[减伤] − weaken覆盖);对照带 ≤20%/普通场、≤50%/Boss 场。派生**生存区间** S = [(HP进战 + 治疗下界) ÷ 入伤峰值, (HP进战 + 治疗上界) ÷ 入伤谷值]——区间模型三档判定的生存侧输入。 - -``` -E[承伤/场] ≈ Σ_rounds Σ_enemies E[beat_dmg] × (1 − E[减伤] − E[weaken覆盖]) -S = [ (HP进战 + 治疗min) ÷ 入伤峰值 , (HP进战 + 治疗max) ÷ 入伤谷值 ] - E[beat_dmg] ∈ [0,999]:敌 atk × 拍别乘数(heavy=2)+ 伏击 flat(+3×层数,帽 4)——行为环确定性轮转 - E[减伤] ∈ [0,0.6]:defense_up 授予率 × 当次减伤(−30×2 层帽 −60%——减伤墙批现行值) - E[weaken覆盖] ∈ [0,0.65]:标中旗 −65% 输出对战斗轮的覆盖期望——生存侧最大单一杠杆(P3 兑现点) - 入伤峰值/谷值 d_max / d_min ∈ [0,999]:峰值 = heavy 齐射尖峰 + 伏击满层、零减伤;谷值 = charge 拍 + 全减伤 -``` - -| 验算 | 读数 | 判定 | -|---|---|---| -| D0 goblin ×1(7atk 单拍环) | 每结算恒 7 × (1−0.22 平均减伤) ≈ 5.5/轮 → 裸 R_survive ≈ 50/5.5 ≈ 9 轮 | L1 五战 S 区间手算见 F6 | -| 减伤墙批注 | defense_scan 实测墙轮 39%、真人 12/12 轮零承伤满血通关 → defense_up −50→−30、石肤权重 24→16 | 承伤带复验责任随批(B3 侧注记已挂) | - -### F5 通关率目标带(期望表核心) - -**结论**:通关率按 (L, 天赋档) 目标带验收——**L1 基线 30–50%**(带锚定稿,替换原 40–60%);区间机制解释:+100% atk → K 区间近似减半 → K_max ≈ S_min 转绿档 → ≥95%。**真人方向更正**:批次 1 实测真人显著强于模拟者(v2 真人 100% vs 模拟 80%)——带按模拟口径定义,真人系数批次 2 标定(OQ3)。 - -| 目标带 | 基线(无天赋) | 中天赋(+100% atk) | 高天赋(+200%) | -|---|---|---|---| -| L1(首关) | **30–50%** | ≥95% | 100% | -| L2 | 20–40%(provisional,随 OQ1 校准) | 60–80% | ≥90% | -| L3+ | 10–25%(provisional) | 40–60% | 60–80% | - -| 验算 | 读数 | -|---|---| -| v3 扫描 | 基线 60%——**越 [30,50] 上界** → 加难杠杆批内即调(带锚定稿杠杆:r_boss 走廊 + 群战上探 + decay 0.6 候选);扫描落带前登记 provisional-pending-scan(OQ7) | -| 完美策略档扫描(OQ7) | 区间批后复测:0 加成通关仍 **100%**、剩余 HP 均 47.4/50、承伤均 3.9(区间前 3.5)、踩雷 0.00/局——+50%~+200% 恒 100%;承伤带与 F5 带对技能轴上界零分辨力——数值区间杠杆族对 ≤40% 验收线无效已实测坐实,结构性杠杆三选待裁决(详见推演件 OQ7) | -| 败北分布 | 向 Boss 集中(4/6)✓;+200% 天赋 100% ✓ | -| 机制钩子 | 天赋列由区间位移承载(K 减半 → 绿档),非独立拍脑袋带 | - -### F6 生存链区间模型(替代关级供给带) - -**结论**:原关级供给带(比值 ∈ [1.1, 2.0])由本模型替代;现行 = **生存链区间模型**:每战 S/K 区间三档判定(绿=稳定通过 / 黄=期望通过 / 红=配置事故禁止入表)+ 关级通关恒等式 + 输出占比带。设计期工具式,运行时零公式。 - -``` -S = [ (HP进战 + 治疗min) ÷ 入伤峰值 , (HP进战 + 治疗max) ÷ 入伤谷值 ] (生存区间——F4) -K = [ (Σ敌hp − 一次性伤害max) ÷ 输出峰值 , (Σ敌hp − 一次性伤害min) ÷ 输出谷值 ] (击杀区间) - -绿档: S_min > K_max —— 最坏也能过,与运气无关(教学位必须绿档) -黄档: E[S] ≥ E[K] + 1 且非绿 —— 有失败分支,期望占优(margin ≥ 1 轮最低阈值) -红档: S_max ≤ K_min —— 最好也打不过,配置事故(七步流程第③步拦截) - -关级恒等式: atk × Σ R_survive(i) + Σ奖励输出 ≈ Σ敌hp期望 × (1 + 缓冲) - (actuals 逐项审计闭合——五项输出 × 三项输入全部入账) -``` - -| 输入项 | 来源 | 构成 | -|---|---|---| -| 入伤 | 表值 + actuals | 敌 atk × 拍别乘数 + 伏击 flat − 减伤 − weaken(F4) | -| 输出 | 表值 + actuals | 基础攻击 6×(1+attack_up) + 伤害A(开格充能 1/格 帽 8,甲A ×1.5/甲B ×0.5)+ 伤害B(标雷充能 2/雷,甲B ×1.5/甲A ×0.5)+ 刀(8/16,不吃 percent) | -| 一次性伤害 | 表值 + actuals | clear_blast 40×清图数(完美 ×2)、囤刀倾泻 | -| 治疗 | 表值 + actuals | heal_pack 12 + heal_minor 4(注入/格子池期望) | -| 数量骰 | 表值 | unit_count 区间 [unit_count, unit_count_max] | - -| 验算与口径 | 读数 | -|---|---| -| L1 五战区间手算(≈ 估算,p10–p90 口径) | D0 goblin×1(教学位固定):S≈[7,12] vs K≈[2,4] → **绿** ✓ · D1 ×[2,3]:S≈[4,10] vs K≈[2,6] → 黄 · D2 bugbear(首遇固定):S≈[4,12] vs K≈[2,6] → 黄 · D3 ×[2,3]:S≈[2,6] vs K≈[2,7] → 黄偏红 · Boss 酋长:S≈[4,15](旗覆盖率主导)vs K≈[7,18](囤刀+甲B 对策)→ 黄红边缘 | -| L1 形态带 | ≥1 绿(教学位)+ 中段黄 + Boss 黄不红——手算形态符合 ✓ | -| 输出占比带 | 奖励侧输出(刀+clear_blast+A/B 充能)÷ 总输出 ∈ **[15%, 40%]**——<15% 奖励摆设、>40% 供给依赖(AC-14) | -| 口径注记 | 区间两口径:公式包络(必过/必死结论)与 actuals p10–p90(日常判定——B1 actuals p10 纪律同构);HP 持久化耦合各战区间,联合分布由 monte_carlo 裁决 | -| C4 平移换算率 | +10hp ≈ +1 轮(÷d̄≈8–10);atk 翻倍 ≈ K 减半——区间位移机制承载通关率天赋列,非独立拍带 | - -设计意图:区间模型直接建模"能不能过/赢得多惨",与 monte_carlo actuals 同构——供给带为何反指、恒等式如何闭合,见推演件。 - -## 调参纪律与状态 - -规则: - -1. C3 每次行值修订必须走满七步调参流程,且不得触碰已锁约束边界——四条边界见下表;B1 条款③⑤对账输出与预警⑥是"禁止独立调参"纪律的量化边界,C3 调参必须在其内工作或显式扩界(Core Rule 9)。 -2. 联动网络六组禁止独立调参(见下表);任一步 FAIL → 回滚或登记开放问题,禁止带病前进。 -3. 设计期任一行值恒处于状态表五态之一;期望表偏离禁止静默出带;C3 无运行时状态机(数值系统)。 - -### 七步调参流程(每次修订强制走完) - -``` -① 改表值(C3 直辖 knob) - │ ② smoke_all 全绿(含 A1 生成质量闸——d0.28 回退先例的拦截点) - │ ③ level_monte_carlo 扫描(通关率带 + 三档判定 + 通关余量 + 输出占比) - │ ④ B4 登记常数与对账重制(AC-19 对账对漂移检测 / AC-6 分支 4 / AC-18 重跑——B4 义务 #10) - │ ⑤ 对账复算(条款③⑤ / 预警⑥) - │ ⑥ README 调参日志登记(含期望偏离) - ▼ -行值生效(任一步 FAIL → 回滚或登记 OQ——禁止带病前进) -``` - -**批量样本量 N**:≥256(正式)/ 15–30(切片临时);正式批量工具 = level_monte_carlo 扩展(逐行聚合 + N 参数化 + 区间分位/降级统计)——扫描执行本体归 A1 F4 工具交付,C3 的扩展为消费方(A1 工具产出 actuals → C3 扫描消费,非替代)。 - -| 流程锚点 | 内容 | -|---|---| -| 第②步闸 | A1 生成质量闸——切片 d0.28 回退先例:d0.28/t0.87 → best≈0.81 降级告警 → 回退 0.25/0.88 | -| 第④步依据 | B4 义务 #10:无"登记常数与对账重制"步骤则相关 AC 假失败——T_fog_min/K_dmg/N_draft/P_min/默认根行值调参 → B4 AC-19 对账对 (knife_adv, attack_up_basic) 漂移检测、AC-6 分支 4、AC-18 重跑 | -| Output | 任一步 FAIL → 回滚或登记 OQ,禁止带病前进 | - -### 调参约束边界(四条) - -| # | 约束边界 | 内容 | -|---|---|---| -| ① | 条款③满配破线 | unit_count>1 的行须满足"降密度或降 m_amb"补偿——registry clause3_supply 已登记;切片群战行 hp/atk 下调为合规先例 | -| ② | 条款⑤清图支配性 | 约束包①需求对 clear_blast(instant_aoe,C = power = 40)重推:缺口 = 46.1−40 = 6.1(L1)/ 91.8−40 = 51.8(L2)——登记为非支配设计态 + OQ4 playtest 观测弃图率(原 clear_knife C=8/16 模型由现行登记替代) | -| ③ | 可推理率绝对锚 | target ∈ [0.85, 1] 不可下探(P1 生成端保证) | -| ④ | 期望表对照 | 调参后期望表必须复算并在 README 调参日志登记偏离 | - -### 联动网络(禁止独立调参清单) - -| # | 联动 | 纪律 | -|---|---|---| -| 1 | 敌 hp ↔ 奖励供给(registry 已锁) | 单边移动必走区间模型恒等式联合检算 | -| 2 | unit_count ↔ 密度/m_amb(条款③) | 群战行上线前的强制复算 | -| 3 | 密度 ↔ target ↔ attempts(A1) | d0.28 回退先例的三元组 | -| 4 | ap_per_round ↔ RAP 体系 ↔ refresh 上限(A3 + 轮内刷新批) | 跨字段校验闸承载 | -| 5 | m_w(weaken −65)↔ 锚对照表(B1 F0) | 终值共裁 B4/B1,调参走 C3 提案通道 | -| 6 | armor_type ↔ 伤害A/B 充能 ↔ 克制矩阵(B1 域) | 敌种甲型变更须复算 Boss/普通战 K 区间 | - -### 行值状态 - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| 未调参行 | 新增 (L,D) 行仅有结构占位 | 经七步流程 → 已调参 | -| 已调参行 | 行值经批量仿真 + 期望表对照 + 对账复算 | 任何修订 → 重走七步流程 | -| SLICE-TUNED 转正 | 切片临时值经本 GDD 背书(行值总表 v3) | → 已调参(切片行集转正条款) | -| provisional-pending-scan | 加难杠杆候选值已登记、扫描步未执行 | 扫描落带 → 已调参;越带 → 回滚候选 | -| 期望表偏离 | 调参后期望值越出目标带 | → 回滚或 OQ 登记(禁止静默出带) | - -### 边界情况 - -| 条件 | 行为 | -|---|---| -| unit_count>1 行与高密度板组合 | 条款③满配语境破线(B1 F4 双轴约束)——该组合**禁止入表**;切片先例 = 群战行 hp/atk 下调补偿;对账复算在流程第 5 步强制执行(Core Rule 9①) | -| 关卡深度轴缺行(如 D3 缺失、D4 存在) | **调参期冒烟断言拦截**(跨表存在性检查——C3 调参工具域载体;D2 R1 fail-fast 语义不动);R1 floor 解析静默兜底至低档(难度降而非崩)+ ConfigDB warning 四元组仅作运行时兜底——缺行根因是调参事故而非运行时事件(AC-1) | -| 请求越界关卡(level 999) | R1 floor 解析至表尾行(难度封顶 = 尾行值)+ warning——冒险结构(C2)应在其内容覆盖范围内生成关卡序列;越界 = 内容生产缺口,非玩家可达态(D2 R1) | -| 玩家天赋拉满(atk+200%)打最低难度行 | 速杀退化(预警⑥——战斗 1–2 轮终局、奖励系统饿死自己的高光);处置 = 预警⑥仪表监控(战斗结束未开资格格占比 >70% 警)+ 接受——低难度行被高天赋速杀是 Roguelike 成长兑现的合法形态,无需修复(区间形态:K_min < 2 = 预警⑥观测位) | -| 密度上探压垮推理率(d0.28 案例) | best inferability ≈0.81 < target 0.87 → 降级告警"接受最优出图";处置 = **回退**(切片先例:0.28/0.87 → 0.25/0.88)——密度与 target 是联动对(A1 求解器能力的天花板内联动调参),禁止为难度牺牲 P1 度量达标;流程第 2 步闸拦截 | -| 条款⑤清图支配性反转(弃图率 >30%) | 玩家普遍发现"挖一半就弃图刷 RAP"优于"推到底清图"→ 清图奖励与清图体验被支配;处置 = OQ4 playtest 观测(自动模拟者不弃图,测不到真人策略);届时杠杆 = C 量级上调(B1 约束包①,现值 clear_blast 40)或弃图成本重定价(A3 域)——MVP 接受当前非支配设计态(缺口 6.1/51.8,实测后再裁) | -| 投放节奏断档(某关无新敌种且无新环段) | OQ8 违例——敌信息总量见底,学习曲线枯竭;处置 = 流程投放检查项(每关至少一项新内容——敌种投放节奏条款);违规 = 内容生产缺口,C3 调参无法修补(数值不是内容) | -| 全部行值调至域上限(hp 999 等) | 数值可行但可玩性崩塌;处置 = 通关率带对照拦截(期望表全面越带 = 配置事故)+ 域校验既有护栏;本场景属调参事故而非玩家可达态(F5 / D2 域校验) | -| DifficultyTable 修饰行与直填行值叠加后越域(首个精英节点上线时) | B2.spawn 套乘后 hp >999 → **clamp 至域界 + warning**(fail-fast 不适用——修饰乘数是合法配置,越界是组合事故;域界 = 玩法硬顶);MVP 空表无此场景,规则预登记 | -| 通关余量越带 | p90 >13(赢得从容)→ 生存侧杠杆优先(治疗稀有度下调 / 敌 atk 上探),击杀侧杠杆次之;p10 <3(1–2 血惨胜成常态)→ 治疗供给上浮或 Boss 前恢复点增益——余量是形态指标,与通关率带联合判读(AC-13) | - -## 依赖与输出 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 上游 | D2 | hard | 全部基表 schema、R1 解析、ConfigDB 单点读取归 D2;C3 产出 = 行值;DifficultyTable 新表走 D2 接口漂移规则(registry `difficulty_table` 已登记);禁绕过 ConfigDB 自建 load(D2 Rule 2);RngService `encounter` 封闭流(registry 已登记);EnemyTable schema +2 字段(unit_count_max、armor_type)——接口漂移已回写 D2 | -| 上游 | B2 | hard | EnemyTable/HeroTable 行值由 C3 填(B2 拥有字段语义与校验域);修饰施加点 = B2.spawn(实例化时套乘、行值快照之前);spawn override 参数 + unit_count_max 字段语义 + 物种集 {goblin, bugbear, ogre_chief}——接口漂移已回写 B2;投放节奏 OQ8 共担;多敌种同深度选择规则共裁(OQ7——C1 联动) | -| 上游 | B1 | soft(事实依赖) | 条款③⑤对账输出 = 调参约束输入(B1 F4/F5 = 约束生成器);P_perfect 乘数调参权归 C3(B1 登记);begin_battle encounter 掷骰增补 + 护甲克制结算(armor_effectiveness/damage_a/damage_b 字段)——接口漂移已回写 B1;期望口径双读数纪律(锚行读数不得用于 unit_count=2 放行);对账复算义务随每次修订 | -| 上游 | B4 | soft | RewardTable/RewardConfigTable 参数值归 C3;供给控制器机制本体归 B4(转正登记——首件保证 + 指数递减注入,active_p0/active_decay 参数归 C3);clear_blast 换位 + K_dmg=0 转正(B4 保底语义迁移);敌 hp 曲线与奖励供给禁止独立调参(registry 联动重算义务——区间模型恒等式为联合检算工具);调参期批量仿真义务载体 | -| 上游 | A1 | 类型依赖 | BoardGenTable 行值归 C3(含 max_gen_attempts 策略);禁反向调用生成(仅经 D2/编排器传值);F4 批量红线(严格零降级)= 调参闸;F4 全量批量工具 = A1 交付物(A1 OQ1),C3 level_monte_carlo 扩展为消费方;d0.28 回退先例 = 密度×target 联动调参的实证;黄金向量/solver_rules 冻结不经 C3 | -| 上游 | A4 | soft | scope=global 语义由本 GDD 定稿(Core Rule 7);unlock_level 门控序列投放计划归 C3(随关卡扩展);AC-11 未来腿 = elite/boss 标记字段落地时 A4 warning 升闸——已登记为 A4 接口漂移义务 | -| 上游 | A3 | soft | ActionEconomyTable 联动观测(ap_per_round 双重身份——节奏兼 RAP 转存规模)——联动评估归 C3,调参所有权归 A3(措辞更正:A3 GDD 无调参权授予回执);跨字段校验(动作成本 ≤ ap_per_round)约束内观测 | -| 上游 | B3 | soft | StatusEffectTable 四行强度(attack_up +50 / defense_up −30 / weaken −65 / ambush +3)provisional 归 C3 联动评估(B1 免伤轮合法性注记——强度评估归 C3 对账联动);减伤墙批(−50→−30)为 B3 侧行值批,C3 承伤带复验随批 | -| 下游 | C1 | — | 节点深度语义消费;精英节点形态联动(精英节点预留条款 / A1 定稿强制重审);未设计——Boss=Dmax 约定即为其预留的接口 | -| 下游 | C2 | — | 关卡序列的难度排布消费本 GDD 期望表;越界关卡 = 内容生产缺口(边界情况表);未设计 | -| 下游 | C4 | 远 | 元进度天赋数值的"世界侧对照物":通关率目标带(F5)是 C4 天赋强度的标定基准;区间平移换算率(+10hp ≈ +1 轮、atk 翻倍 ≈ K 减半)为 C4 设计输入;未设计 | -| 下游 | 呈现层(B5/D1) | — | Boss 登场仪式感 / 难度台阶可感知性——视觉义务归 B2/B5,C3 仅提供"何时变难"的数据(见下方呈现义务转注) | - -### 对账约束(活契约——B1 对账输出承接) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| 条款③ | 满配破线两轴:unit_count>1 行须满足"降密度或降 m_amb"补偿(B1 F4 双轴约束)——registry clause3_supply 登记在案 | B1 / registry | 已登记——切片群战行 hp/atk 下调为合规先例 | -| 条款⑤ | 清图支配性:46.1/91.8 需求 vs **clear_blast C=40 现值(缺口 6.1/51.8,对 clear_blast 重推)**——登记为非支配设计态;预留杠杆 = C 量级上调(B1 约束包①)或弃图成本重定价(A3 域) | B1(B1 F5) | 已登记——OQ4 playtest 持续观测弃图率 | -| 预警⑥ | 快杀退化:战斗结束未开资格格占比 >70% 警——高天赋速杀低难度行 = 合法形态,仪表监控不修复;区间形态钩子 = K_min < 2 观测位 | B4 / B1 | 已登记 | -| unit_count 约束 | 区间 [unit_count, unit_count_max] ⊆ [1,3];>1 行联动条款③复算(流程第 5 步强制) | B1 / B2 | 已登记 | -| 期望口径双读数 | 锚行读数(2.0×/2.6× 类)不得作为 unit_count=2 的放行依据 | B1 | 已登记 | - -### 呈现义务转注 - -> C3 无自有视觉/音频/UI 资产(数值系统)——义务转注如下;无新增资产需求、无 D1 新增义务登记。 - -| # | 义务 | 归属 | -|---|---|---| -| 1 | Boss 登场呈现(仪式感锚点——体验锚点"压迫的顶点");设计输入 = Boss=Dmax 行的数据面(本 GDD 提供) | B5 战斗表现 / D1 | -| 2 | 难度台阶可感知性:新敌种 = 新图像线索 = 台阶的可视面孔(意图推测型——图像线索档位编码,"这只比上层的硬"可读) | B2(D1×4 义务) | -| 3 | 变异解锁的"这一层有雾了":图例与首遇提示(已登记义务) | A4 / D1 | -| 4 | 期望表 / 批量仿真输出 = 调参期开发工具(headless——非游戏内 UI) | 开发工具 | -| 5 | 恢复点/奖励点呈现:C1-lite 切片已实现的节点覆盖层;正式形态归 D1/C1 | D1 / C1 | - -## P0 最小闭环 - -1. 设计期:C3 按三轴(L 台阶 / D 坡度 / Boss 行)把行值直填 enemy / board_gen / reward / reward_config / hero .tres,经七步流程背书。 -2. 冒险推进到 (L,D) 战斗节点,C1/C2 发起战斗。 -3. B1.begin_battle 实例化期经 RngService encounter 流按 [unit_count, unit_count_max] 均匀骰定本战实际数量(教学位/新敌种首遇固定不加骰)。 -4. B2.spawn(L, D):R1 floor 解析 → 行值快照 → DifficultyTable 修饰套乘(快照之前;MVP 空表无修饰)→ 生成敌人。 -5. A1 读 BoardGenTable 行生成棋盘 → 挖掘期 → B1 结算(护甲克制 / 状态池 / 充能伤害既有乘区)。 -6. 战斗产出 actuals(承伤/输出/治疗/通关余量)——行值经 ConfigDB 单点读取,是唯一数值来源。 -7. 调参期:level_monte_carlo 消费 actuals 复算期望表(通关率带 / 三档判定 / 通关余量 / 输出占比)。 -8. 偏离回滚或登记(禁止静默出带)→ 修订后的行值生效,回流步骤 1。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | L2+ 曲线数值行(enemy/board_gen (2, D1–D4)) | 内容与数值同批——C2 关卡序列定稿后随 L2 内容扩展填充(OQ1) | -| P1 | 加难杠杆扫描落带(r_boss 走廊 180–207 / 群战上探 / decay 0.6) | 七步流程第③步扫描待执行;落带前 v3 值 provisional-pending-scan(OQ7) | -| P1 | 完美策略档结构性杠杆(承伤硬地板 / weaken 饱和语义) | 数值区间杠杆族已被实测证伪,结构杠杆待用户裁决(OQ7 主项) | -| P1 | 真人修正系数标定 | 带按模拟口径定义;真人系数待 playtest 批次 2 定量(OQ3) | -| P1 | 轮内刷新难度杠杆(密度联动上探) | 批次 1 刷新零使用、根因盲猜墙不足;杠杆有回退先例风险,保持开放(OQ6) | -| P2 | 精英节点完整语义(独立节点/词缀/出现规则) | C1 分支地图定稿后的联动设计;A1 定稿强制重审随之触发(OQ5) | -| P2 | DifficultyTable 首个修饰行 | 首个使用场景 = 精英节点;Boss 走 Dmax 直填行 | -| P2 | 全局变异具体行(岩浆/冰冻) | 无 MVP 容器(A4 锁定);投放计划随关卡扩展 | -| P2 | 同深度多敌种选择 | C1 分支地图定稿时走预登记改键通道;MVP 每行集恰一敌种(B2 锁定) | - -## 调参表 - -> C3 是全项目 knob 保有量最大的系统(数值 owner)。全部值 provisional 起步;域与校验归各表 schema(D2);本表只登记所有权、联动与危险方向。 - -| 字段 | 域 | 默认 | owner | 联动与危险方向 | -|---|---|---|---|---| -| EnemyTable.hp / atk(逐行) | [1,999] / [0,999] | 行值总表 v3(provisional) | C3 | 与 B4 供给禁独立调参(区间模型恒等式联合检算);cap×atk 禁独立(B2);过高=打不死/战斗冗长,过低=快杀退化(预警⑥) | -| EnemyTable.unit_count / unit_count_max(逐行) | [1,3] / [unit_count,3] | 1 / 省略=定值 | C3 | >1 行须降密度或降 m_amb(条款③);区间骰经 encounter 流;过高=条款③破线,过低=压力不足/遭遇零随机 | -| EnemyTable.pattern(逐行) | MVP 三值组合 | 行值总表 v3 | C3 | OQ8 投放节奏(每关新环段);过高=信息过载,过低=学习曲线枯竭 | -| EnemyTable.armor_type(逐行) | {none, a, b} | none | C3 | 克制矩阵联动(settlement armor_effectiveness);伤害A/B 充能消费面(B1 域,C3 投值);过高=克制失配,过低=特化对策失效 | -| HeroTable.atk / max_hp | [1,999] | 6 / 50(provisional) | C3 | 全部输出式的分母锚(F4/F6);过高=奖励价值稀释,过低=挫败感 | -| BoardGenTable 尺寸/密度/attempts(逐行) | 域见 schema | 行值总表 v3 | C3 | 密度×target 联动(d0.28 回退先例);unit_count>1 行联动;过高=推理率不达标降级,过低=板退化(低密度先布后删) | -| BoardGenTable.inferability_target(逐行) | [0.85,1] 绝对锚 | 0.88(L1 行值,provisional) | C3 | 与密度成反耦;过高=生成耗时/降级,过低=P1 空心化 | -| BoardGenTable 雾参数 | f≤8d / ≤0.25 | unlock_level=2 起用 | C3 | P1 度量绝对上限;过高=P1 度量空心,过低=雾内容缺位 | -| RewardTable.weight / power / tier(逐行) | 域见 schema(五行 power 已区间化) | 行值总表 v3 | C3 | 区间模型恒等式;攻击面稀释;clear_blast 单行槽;过高=即时类淹没明细/可选类贬值,过低=窗口空转/重 roll 频发 | -| RewardConfigTable.t_fog_min | 域见 schema | 2(provisional) | C3 | 雾档过滤下限 | -| RewardConfigTable.k_dmg | [0,999] | 0(保底断言关闭——保底语义由首件保证取代) | C3 | 过高=保底永不触发,过低=种子轮盘致命 | -| RewardConfigTable.n_draft / p_min | 域见 schema | 32 / 8(provisional) | C3 | 同上联动(B1 AC-19 对账对随调参重制) | -| 供给控制器 active_p0 / active_decay | [0,1] / (0,1] | 0.4 / 0.5(provisional) | C3 | E[战斗获取]≈1 目标(B4 机制本体承接);与敌 hp 联动;过高=速杀+囤积回归,过低=可选类绝育;加难候选 decay 0.6(OQ7) | -| SettlementTable.damage_a_per_cell / damage_a_cap / damage_b_per_flag / armor_effectiveness | 域见 schema | 1 / 8 / 2 / 克制矩阵(provisional) | C3 | Boss 甲B 对策 = B 充能;A 克制甲A;联动网络 #6;过高=Boss 裸打过慢,过低=充能失效 | -| ActionEconomyTable.ap_per_round / rap_refresh_cost / refresh_max_per_round | 域见 schema | — | A3(C3 联动评估) | ap 兼 RAP 转存规模;调参所有权归 A3;过高=轮次冗长,过低=决策密度坍缩 | -| SettlementTable.P_perfect(乘数) | {100,200} | 200(provisional) | C3 | 完美排雷×清图支配性互 feed;过高=钓鱼线(护栏 B),过低=高光缺位 | -| m_w(weaken −65) | registry 已锁 | −65 | B4/B1 共裁(C3 提案通道) | 锚对照表(B1 F0)联动——联动网络 #5 | -| DifficultyTable 修饰乘数(MVP 空表) | [0.1,10](registry 预登记) | —(MVP 空表无行) | C3 | 精英节点上线时启用;越域 clamp + warning | - -## 验收标准 - -| AC | Given | When | Then | -|---|---|---|---| -| AC-1 | LevelTable 任一 battle/boss 节点 (L,D);ConfigDB 加载全部表 | 调参期冒烟断言逐节点查两表 | board_gen 与 enemy 两表存在该 (L,D) 精确行(跨表护栏⑧转正——载体 = C3 调参期冒烟断言;运行时 floor 兜底属 D2 R1 既有语义) | -| AC-2 | MVP 全部 (L,D) 行 | 逐行扫描 inferability(批量 N=256/行——A1 F4 工具交付后的正式红线) | 全部行 inferability ≥ target ≥ 0.85(P1 绝对锚)且 A1 断言族(退化板/R₀≠S)零违例 | -| AC-3 | EnemyTable 全部 unit_count>1 行 | 条款③复算(密度 × m_amb 组合) | 无破线组合存在(Core Rule 9①) | -| AC-4 | MVP 全部行集(区间模型) | level_monte_carlo 逐战 S/K 区间扫描 | **零红档组合**(S_max ≤ K_min 禁止入表);教学位绿档;L1 形态带 = D0 绿 + 中段黄 + Boss 黄不红(F6 三档判定) | -| AC-5 | 期望表目标带(F5) | level_monte_carlo 全带扫描(基线/+100%/+200%) | L1 基线通关率 ∈ [30, 50](现值 60% 越上界——加难杠杆批内执行,扫描落带前 provisional-pending-scan);越带须 OQ 登记——禁止静默出带 | -| AC-6 | L1 全部行集 | 枚举敌种与环段 | 每关至少一项新投放(新敌种或新环段——OQ8;L1 = goblin→bugbear→ogre_chief 三段 ✓) | -| AC-7 | Boss 行(Dmax) | F3 检算(期望口径 Σ=153.5) | r_boss 记录在案(现值 0.98 带内 ✓;越带须 OQ 登记——加难走廊 [1.1,1.35] 走 OQ2/扫描) | -| AC-8 | 每轮刷新 | 计数达 refresh_max_per_round | 第 N+1 次拒绝(表值驱动——A3 域行为,C3 侧验收 = 联动评估记录存在) | -| AC-9 | 任何 C3 直辖 knob 修订 | 检查其联动网络(调参表六组) | 对应联合检算记录存在于调参日志(禁止独立调参纪律的流程面) | -| AC-10 | DifficultyTable MVP 空表 | B2.spawn 任一 (L,D) | 无修饰行被消费(结构位不产生行为)且未来首行上线时套乘点 = 行值快照前 | -| AC-11 | scope=global 变异行 | MVP 腿:扫描 VariationTable 全行 | MVP 无 global 行存在(表级约束)且 A4 warning 通道在位;未来腿:elite/boss 标记字段落地时加载/生成期拒绝(A4 接口漂移义务——X-10) | -| AC-12 | 每次调参批 | 检查 README 调参日志 | 七步流程的执行记录齐备(流程纪律的可审计面) | -| AC-13 | 通关余量(新指标) | level_monte_carlo 通关轨迹采集 | E[HP_end \| 通关] 的 p90 ≤ 13 且 p10 ≥ 3("只剩一点血"量化带——越带按边界情况表杠杆处置) | -| AC-14 | 关级恒等式闭合 | actuals 逐项审计(流程第③步输出) | 输出侧五项(基础攻击/刀/clear_blast/A+B 充能/attack_up)与输入侧(承伤/治疗/减伤)合计闭合 Σ敌hp期望×(1+缓冲),残差 <5%(provisional 阈值)且奖励输出占比 ∈ [15%, 40%] | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2-两件套 | 2026-09-14 | 格式迁移:按两件套 v2 标准拆分——本文件只装结论,公式推导、数值锚定论证、候选取舍、评审史、X-1~X-10 回执、试玩批次记录移 `design/gdd/analysis/c3-difficulty-curve.md`;规则/数值/AC/OQ 编号全部保留,语义零变更;生产前人工复核保留义务随迁 | -| v2 | 2026-09-14 | /design-review 修订批(8 blocking 核销 + 4 项用户拍板):**F6 供给带退役 → 生存链区间模型**(S/K 区间三档判定 + 关级恒等式 + 输出占比带 + C4 平移换算率——用户设计)· **带锚定稿**(通关率 [30,50] / 通关余量 p90≤13 & p10≥3 / L1 形态带)· F3 口径统一 Σ=153.5 / r_boss 0.98(旧验算 142 替代)+ 加难走廊预登记 · F4 升级生存侧(S 区间)· F5 带 [30,50] + 真人方向更正 · **MVP 行值总表 v3 转正**(切片 .tres 权威源,旧 SLICE-TUNED 表替代)· DND 更名生效(goblin/bugbear/ogre_chief)· **四批转正登记**(armor_type / K_dmg=0 / clear_blast 换位 / 供给控制器归 B4——用户拍板)· B1/B2/D2/registry 接口漂移回写(X-6~X-10)· F7 六步→七步(B4 对账重制步)· AC-4/5 重写 + AC-13/14 新增 · 条款⑤重推(C=40,缺口 6.1/51.8)· Boss atk 台阶重定义 · 减伤墙批补录 · OQ7 新增(扫描执行) | -| v1-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;规则/枚举/边界情况/对账登记/AC 转表格;曲线生成与调参流程转字符画;公式、Variables 与验算数据全保留;F3 带按现行 [0.5, 1.1] 成文;语义零变更 | -| 试玩批次 1 / v3 数值批 | 2026-09-12 | 遭遇随机化引入(unit_count 区间语义 + RngService encounter 封闭流——Roguelike 局感引入批,Peglin 对比报告结论 2 的本切片落地项);F3 带修订 [0.35, 0.55] → [0.5, 1.1];v3 数值批(atk 7/5/9/6/9、Boss 130→150、D0 24 保持防秒杀)+ DND 命名批 + 护甲克制批;OQ2/3/4/6 读数登记(条款⑤非支配设计态采信) | -| 初稿 | 2026-09-12 | solo 模式出稿:九核心规则 + F1–F7 + 12 AC + 六 OQ;SLICE-TUNED 转正声明;Boss=Dmax 约定、DifficultyTable 结构位与 scope=global 语义定稿 | diff --git a/design/archive/gdd-2026-09-14/d1-hud-framework.md b/design/archive/gdd-2026-09-14/d1-hud-framework.md deleted file mode 100644 index 953cbd1b..00000000 --- a/design/archive/gdd-2026-09-14/d1-hud-framework.md +++ /dev/null @@ -1,681 +0,0 @@ -# D1 HUD 与界面框架(HUD & UI Framework) -> **状态**:Designed · **版本**:v2 · 2026-09-14 · 作者:user + agents -> **承载支柱**:P1 主("我算对了"看得见的感知面)· P2 主(逐行归因的呈现半边)· P4(地牢氛围容器) · **层级**:Layer 4 Presentation · Milestone MVP(设计顺序第 10 位) -> **一句话**:D1 把 A1–B4 的全部玩法事实变成玩家看得见、点得动、归因得了的界面——零玩法状态的双层边界呈现框架。 -> **推演件**:`design/gdd/analysis/d1-hud-framework.md`(本文件只收结论,理由在那里) - -## 设计目的 -D1 是项目首个零玩法上游假设的表现层系统:战斗屏(MVP 唯一玩法屏,五区常驻双舞台布局,屏级 spec = `design/ux/battle.md`)+ 一族共享呈现设施——toast 提示体系、模态覆盖层家族、输入翻译、模态层级管理、面向呈现的信号载荷契约、ux 遥测。少了 D1,A2 的三事件流没有读者、B1 的流水协议没有呈现面、27 项上游呈现义务没有兑付点。 - -1. 「我看见的每一步都是真的」——四种格态一瞥可辨、每次拒绝可感知、结算逐行可归因(P1 感知面)。 -2. 「这个结果是我哪步扫雷带来的」——结算明细逐行兑现且每行带来源标注;四类未生效行不静默、零值行不被吞(P2 呈现半边)。 -3. 「挖掘期一块干净的玻璃,结算期一场丰收」——能量档转场由 D1 承载:挖掘 2/10 → 结算 7/10 → 清图 8/10 → 失败 1/10(P4 容器)。 -4. 「完美被加倍看见」——完美排雷全屏喝彩级反馈、标中旗与 H2 清图奖励金框行(高光节拍)。 -5. 界面绝不替玩家思考、绝不静默改判、绝不用装饰伪装逻辑差异——玩家对 D1 的正确感觉是"一块干净的玻璃"。 - -## 系统范围 -负责: - -- 五区布局落位与常驻组件呈现形态(战斗屏) -- 输入翻译(鼠标意图 → A2 意图对象)与单意图帧收集 -- toast 提示体系 / 图例面板 / 一次性提示 -- 模态覆盖层家族(图例 / 明细回看 / 胜负终局)与模态层级纪律 -- 13 项面向呈现的信号载荷 schema 与消费侧断言 -- 命令式回执刷新面(零事件外发动作的界面刷新契约) -- 程序化占位策略与 art-bible §4.6 键位映射表挂接 -- ux 遥测六行族(playtest JSONL `ux` 行) -- F1 呈现几何与 F2 可读性判据的执行 - -不负责: - -- 任何玩法状态与玩法数值(各玩法 GDD;数值表归 D2)——读经核心只读面、写经组合根 -- 合法性判定与机制语义裁定(A2 / A3 / B1 等上游系统) -- 屏级布局/组件/交互/动画时长的裁决权威(`design/ux/battle.md`) -- 美术裁决与终稿资产(art-bible / asset-spec 批);动画密度(B5) -- 音频(D4)· 教学内容(D5)· 本地化文本生产(D6——D1 仅消费契约) -- 任何随机消费(呈现层零 RNG) - -## 核心循环 -``` -玩家输入(D 区,仅挖掘期可交互;全部操作纯鼠标可完成——Gamepad Partial 非 MVP) - │ 左键已开格 = 移动 ─ 左键未开相邻格 = 挖 ─ 右键 = 插拔旗 ─ 停手按钮 = settle_batch([stop]) - ▼ -单意图帧收集(一帧内 collected 意图整批;stop 点击终结当帧收集;F4 语义序仲裁退为防御性兜底) - ▼ -组合根 ──► A2 settle_batch(intents) [唯一写路径;零直调 A3] - │ - ├─ 回执链(零事件外发动作:旗插拔 / 移动 / AP / RAP / 库存——规则 2 命令式回执) - │ settle_batch 返回 → 组合根立刻重查只读面(current_board / A3 getter / query_inventory) - │ → 视图 setter 只读注入 → 就地更新(字段级 setter,禁全量重建) - │ - └─ 事件链(A2 cell_revealed / flag_judged → B1 按轮缓冲) - ▼ - B1 结算编排(七段)→ 步骤流(13 类行协议——呈现层唯一订阅面之一) - │ - ├─ 明细带:逐行来源标注「{行为} {值} → {目标}(来源)」→ 84px 实时流(挖掘期收起为 24px 摘要) - ├─ 窗口锚点(授予段后、增益/减益段前):E 区原位激活(usable_now 投影;空库存 skip 不弹窗) - ├─ 高光:flag_hit 金框行 ─ clear_reward_h2 金框 ─ perfect 独立高光行(全屏喝彩级) - ├─ 状态栏刷新(B3 零信号外发):绑 B1 结算编排完成时点(命令式) - ▼ - 判定段 → 判定行(终局呈现数据锚)→ presentation_snapshot()(despawn 前捕获——规则 18①) - ▼ - 终局呈现(胜利金蜡封 / 失败暮蓝 overlay)→ 状态槽全清 + RAP 清零反馈(battle_over) - ▼ - level_clear(关卡末)→ 库存清空反馈「剩余道具 ×N」→ 下一节点 / 返回(runner 推进,写经组合根) -``` - -| 出口 | 触发 | 呈现动作 | 约束 | -|---|---|---|---| -| 继续挖掘 | settle_batch 回执、轮次未结束 | 命令式重查刷新对应面;明细带保持上轮摘要 1 行 | 每帧至多一批提交(单意图帧) | -| 结算展示 | `round_end`(A2 棋盘路径 / A3 stopped 直发——双发射源同构) | D 区锁输入(去饱和 + 金橙色相偏移、明度不变、数字保持全对比);明细带展开 84px 逐行兑现;阶段指示→"结算中";能量 7/10 | 呈现订阅面 = B1 步骤流;零直订 A2/A3 | -| 清图换图 | cleared 判定 | 金粒喷泉 + 彩纸 3–5s 即收;H2 清图奖励行金框强调;随后换新图 install(200ms 淡入) | 完美排雷高光叠加于清图瞬间之上 | -| 道具窗口 | B1 授予段完成(窗口锚点信号) | E 区原位激活(规则 13);选用/跳过 → 回结算流(结算阶段续) | 空库存直接 skip 不弹窗、结算零停顿 | -| 战斗终局 | 判定行 verdict=win / lose | 胜利 = 金蜡封 + 暖白金 overlay;失败 = 暮蓝 overlay(明度不变);终局数据全部来自流水行 + `presentation_snapshot()` | 出口 = 下一节点(win)/ 返回(lose)——写经组合根 | -| 关卡结束 | level_clear 编排 | 库存清空反馈「剩余道具 ×N 随关卡结束清空」(N = 清空前快照计数) | 与 battle_over 反馈不合并、时序不倒挂 | - -## 呈现边界与数据通道 -### 规则 1:界面只当翻译不当裁判——数值不写死、对错不自己判、核心数据不碰 -1. D1 显示任何玩法数字时,全部从上游系统只读接口现读现显;不写死玩法数值。 -2. D1 遇到"动作合不合法、结果算什么意思"时一律交上游裁定;只把裁定结果翻译成画面,不自行判对错。 -3. 玩家改变游戏状态的操作(挖格 / 插旗 / 选道具),D1 只递话;写调用唯一发生在组合根一处。 -4. 界面单元只做两件事:向外发信号、被 setter 注入数据后就地刷新(字段级 setter,禁全量重建)。 - -依据:视图单元九件套 = BoardView / HUDView / HudPresenter / BattleLogView / ItemWindowOverlay / NodeOverlay / LevelStripView / TunePanel / UiKit(切片九单元形态转正);读表口径 = D2 Rule 1 对呈现消费面的适用;写路径唯一入口 = 组合根(ADR-0003 Key Interfaces)。无计算。 - -### 规则 2:界面听消息只走中转,不私接玩法系统的线 -1. D1 永不直接订阅 A2 / A3 的通知;要听的消息全部由组合根接线转发,或直接来自 B1 步骤流信号与 runner 信号。 -2. 棋盘 / AP / RAP / 库存等"不发通知"的数据面,D1 在动作调用返回后由组合根立刻重查只读面刷新(命令式回执);不干等通知信号。 - -依据:订阅纪律固化自 ADR-0001;battle.md §Events Fired 的"呈现订阅 A2 三事件"表述按本条收窄为"经组合根转发或命令式回执"(冲突清单⑥,见 analysis 附录 C)。无计算。 - -### 规则 3:读数据只走登记过的口子,内部字段一律不碰 -1. D1 要显示的每个数据只允许从成文读数清单(下表)拿;清单之外的私有字段直读一律禁止。登记载体 = registry `d1_presentation_surface`。 - -| 数据从哪来 | 允许读的口子 | -|---|---| -| A2 扫雷 | `current_board()`(格态/旗/小人/变异只读投影)、`reveal_record()`、`compute_move_path(cell)`(不可达返回空——预览与执行同源) | -| A3 行动经济 | `phase / ap / rap / last_round_end`(getter-only) | -| B1 结算编排 | `presentation_snapshot() / is_battle_live() / stock_count() / query_reward_identity()` + 步骤流信号 | -| B2 战斗单位 | `hero_unit() / all_enemies()` 投影 | -| B3 / B4 | 零直读——经 B1 呈现面与流水投影(协作对象私有化) | -| runner | 节点链 / 当前节点 / HP 携带(A 区) | - -依据:读接口白名单 = 上表(封装收口批 entry 39/40 转正);接口漂移见 OQ3(analysis 开放问题)。无计算。 - -### 规则 4:界面的每个动作都走同一条提交通道,总闸只有组合根 -1. 玩家在界面上能发起的每类操作各只有一条提交通道,全部先过组合根这道总闸再转给对应系统;不存在绕过总闸的第二写入口。每帧至多提交一批意图(规则 7)。 - -| 玩家动作 | 提交通道 | -|---|---| -| 挖掘 / 插拔旗 / 移动 / 停手 | A2 `settle_batch(intents)`——停手也打包成 stop 走同一接口,不直调 A3 | -| 窗口里选道具 | B1 `submit_window_selection(窗口条目位置序)`——传窗口条目位置,不传库存句柄 | -| 弃图刷新 | 组合根提交刷新意图 → B1 `refresh_board` 编排:A3 扣费 → A2 retire → A1 generate → A2 install → B4 roll_board | -| 节点推进 | runner | - -依据:窗口选择传位置序 = 切片缺陷④的契约修正;停手不经 A3 直调 = 义务 A2×6①。无计算。 - -### 规则 17:界面收到的每份消息,字段清单先写成合同 -1. D1 消费的每一份跨系统载荷(事件 / 快照 / 回执 / 遥测行)都必须先把字段清单写成文(13 项,下表);清单既是实现契约也是消费侧断言——逐字段断言防缺字段、防多字段(信号参数没有运行时类型检查)。 - -| # | 载荷 | 来源 | 字段 schema | 状态 | -|---|---|---|---|---| -| 1 | `cell_revealed` | A2 | `{cell, kind ∈ {safe,mine}, digit(仅 safe 携带,恒真透传), variant_ids, channel ∈ {initial,chain,dig}, reward_eligible}` | A2 Core Rule 2 已 schema——引用 | -| 2 | `flag_judged` | A2 | `{cell, hit}`(轮末判定批、行主序) | 同上 | -| 3 | `round_end_board` / `round_end_stopped` | A2 / A3 | `{path_tag ∈ {ap_exhausted,cleared}, continuation_hint ∈ {same_board,new_board}}`(双发射源 payload 同构;信号实名 per ADR-0001) | 同上 + ADR-0001 | -| 4 | 流水行 ×13 类 | B1 | 公共 7 字段 `type / source_class / origin_cell(板级行可空)/ round_index / display_name / value / highlight?({flag_hit, clear_reward_h2, perfect_broken})` + 特有:伤害行/道具行(生效)→ `target`;效果行 → `effect_id` + `pool_value`;未生效四类 + 标旗未中行 → 聚合计数/批次字段;source_class 值域 ⊆ `source_label_map` 键集(B3 source_class ∪ {道具/判定扩展, enemy_action, flag_miss, hero_attack}) | B1 Core Rule 14 已 schema——引用+重述 | -| 5 | 结算快照 | B1 | `presentation_snapshot()` 返回(终局呈现数据面——despawn 前全量状态);独立 `settlement_snapshot` 信号系切片实现、B1 GDD 未登记契约——D1 现行消费 = 步骤流判定行 + `presentation_snapshot()`;若需独立信号回 B1 修订批补登记(OQ3) | 切片实现 / 契约待登记 | -| 6 | 意图回执 | A2 | `ActionOutcome{accepted, outcome ∈ {executed, voided, rejected}, reject_reason ∈ {board_face, resource_face, phase, board_invalid}, sub_reason(仅 board_face:not_adjacent / target_revealed / target_concealed / flag_present / flag_absent / no_path / out_of_catalog)}` | A2 已 schema——拒绝呈现数据源 | -| 7 | 资源面拒绝 | A3 | 无载荷(`try_spend` / `request_refresh` 仅 bool + debug 诊断)——呈现文案按动作上下文映射(诚实登记:资源面原因客户端推断,双源可辨由"动作种类 + 拒绝源"组合承载) | A3 AC 前言口径——引用 | -| 8 | 窗口载荷 | B1 组装 | `query_inventory` 逐件 `{item_id, source{cell,round}(不呈现于库存列表与 tooltip), 行值快照投影, 状态 InStock/Used}`(枚举序 = stock 受理序)+ `usable_now`(B1 守卫预判——满血治疗包 false) | B4/B1 已 schema——引用 | -| 9 | 奖励身份投影 | B1 呈现面 | `query_reward_identity(cell) → {reward_id, category, tier} \| null`(引用级投影;未开格可查但 MVP 不呈现) | B4 AC-2 已 schema——引用 | -| 10 | 状态投影 | B3 经 B1 | `query_active(side)` 元素 = 六归因字段 + `display_name` + 授予时快照 `(magnitude, unit)`;有效值 = L×快照 magnitude | B3 已 schema——引用 | -| 11 | 单位投影 | B2 | 敌单位七字段 `enemy_id/hp/max_hp/atk/heavy_multiplier/pattern/cap` + `beat` + 存活态;hero 投影 `hp/max_hp/atk`(经 `hero_unit()/all_enemies()`) | B2 已 schema——引用 | -| 12 | 零事件外发动作刷新面(命令式回执清单) | A2/A3/B3/B4 | 旗插/拔与移动成功(A2 零事件外发)→ `settle_batch` 回执后重查 `current_board()`;AP/RAP(A3 无推送)→ 每次写路径回执后重读 getter;状态效果(B3 零信号)→ B1 结算编排完成时点刷新;库存(B4 查询面)→ 写路径回执后重查 `query_inventory` / `stock_count()` | battle.md 更新触发注记——本行成文为契约 | -| 13 | D1 自有遥测 | D1 | `ux_round_input_ratio{ratio}` · `ux_round_exit{path_tag}` · `ux_refresh_attempt{result ∈ {accepted,rejected_rap,rejected_cap}, round_refresh_index ∈ [1,2]}` · `ux_window_choice{selected_item_id, usable_now, skip}` · `ux_reject{source ∈ {board,resource,phase}, sub_reason}` · `ux_hint_shown{hint_id}`——写 playtest JSONL `ux` 行族(playtest_logger 扩展) | 本 GDD 成文(新) | - -依据:口径对齐 A2 三事件先例;消费侧断言 = ADR-0001"信号参数无运行时类型检查"的缓解;AC-24 承载。无计算。 - -### 规则 18:对象销毁前先拍快照——界面永远不回读已销毁的东西 -1. 核心对象销毁前后,D1 不准"回头查"核心内部——只许用三样东西:消息载荷自带的数据、销毁前已取好的快照、封装好的只读投影。 - -| 细则 | 内容 | -|---|---| -| 销毁前捕获 | 终局与死亡的呈现数据(血条归零、卡体灰化、判定行)在核心对象销毁前已进流水行与快照 | -| 载荷自包含 | 每行流水自带来源 / 值 / 目标——界面不按行序反推目标状态机、不回查容器补数据 | -| 生命周期态禁读 | "战斗还能不能刷"只准问 `is_battle_live()` 与阶段投影,禁止读核心对象内部状态位 | - -2. 敌卡死亡灰化后仍留场的呈现 = 就地更新保留的最后已知投影(规则 6);不回读 Dead 句柄以外的任何东西。 - -依据:销毁时序 = B1 判定段先于 battle_over 清理序列(快照含 despawn 前终局);自包含字段 = `target` / `effect_id` / `pool_value` / `origin_cell`;生命周期观测口经组合根;AC-20 静态扫描承载。无计算。 - -### 规则 20:切片里的临时名字统一换成正式名 -1. D1 正式实现时,切片阶段的临时名换成本 GDD 正式名——只换名字、不改任何行为;`can_request_refresh` 不引入(上游 A3 没有这个接口)。 - -| 切片 provisional 名 | GDD 正式名 | 载体 | -|---|---|---| -| `request_refresh_active()` | `request_refresh` | A3 API(Active 相位受理——A3 Rule 11 现行口径) | -| `can_request_refresh()` | 不引入(A3 无此 API) | 入口可用性 = 组合根按只读观测量预判 + `request_refresh` 返回值兜底(规则 16) | -| `refresh_max_per_round` | `refresh_cap_per_round` | ActionEconomyTable 结构位(默认 2)——D2/registry 字段回写随实现批(A3 Schema 定稿节已预留) | -| `during_round`(A2 装板参数) | 无独立参数(受理域语义) | A2 `install_board` 受理域增 Active·仅弃图刷新路径(B1 `refresh_board` 编排内)——A2 Core Rule 3 | -| `round_end`(信号名) | 实名 `round_end_board`(A2 面)/ `round_end_stopped`(A3 面) | ADR-0001 信号实名映射 | - -依据:入口可用性 = 组合根按只读观测量预判 + `request_refresh` 返回值兜底(规则 16);AC-25 grep 断言承载。无计算。 - -设计意图:呈现层零玩法状态、零写、零 RNG,是切片两起呈现层崩溃之后的结构性防线。 - -## 战斗屏布局与组件 -### 规则 5:战斗画面分五区常驻同屏,棋盘与敌人不切场景 -1. 1280×800 基座下(canvas_items/expand 拉伸),战斗画面固定分成五块常驻区域;战斗画面与扫雷图同屏常驻是硬形态:挖掘期敌人在上方待机可见、结算期原地展开明细,全程不切场景。 - -| 区 | 位置 / 尺寸 | 内容 | 数据源 | -|---|---|---|---| -| A 关卡进度条 | 全宽 28px | 节点链步进、当前高亮、已过暗金(LevelStripView) | runner | -| B 战斗画面 | 全宽 252px | 英雄卡 + 敌人卡 ×1–3 + 轮次·阶段指示 + 结算明细带(24px 摘要 / 84px 实时流) | B2 投影 + B1 步骤流 | -| C 角色信息 | 左下 240×520 | HP / 攻击值含修正显示 / RAP 数据框(直角细线素面)+ 状态效果槽固定 4 槽 + 小人立绘占位 | A3 getter + B3 投影(经 B1) | -| D 扫雷图 | 中下 ~760×520 | AP 点阵条 44px(停手按钮居左、图例与弃图刷新按钮居右——刷新按钮置雷图右上角)+ BoardView 棋盘 + toast 槽(上缘内侧) | A2 呈现面 | -| E 道具栏 | 右下 280×520 | 库存常读列表 + 窗口态原位激活 | B4 库存载荷(经 B1) | - -依据:分区尺寸与组件落位的屏级权威 = `design/ux/battle.md`;拉伸模式 = ADR-0002;五区布局为结构冻结项(非调参 knob,修订走 GDD 流程)。无计算。 - -### 规则 6:敌人卡把"它是谁、下拍干什么、还剩几滴血"全写在脸上 -| 卡面元素 | 玩家读出什么 | -|---|---| -| 敌像 | 这是谁——姿态即线索 | -| 血条 | 还剩多少血(hp/max_hp 数字可读) | -| 顺位徽标 | 它第几个出手(固定顺位可读) | -| 意图徽标 | 下一拍它要干什么——把即将执行的一拍的视觉状态摆出来;挖掘期全程可见,结算期不另设播片 | -| 行为环点 | 行动周期多长(环点数 = 环长)、现在走到哪(当前位置高亮) | -| 状态槽 | 它身上挂着什么增益减益 | - -1. 伏击层数是全体敌人共享的一个数——各卡显示同一个值(数据源 = B1 流水经 B3 投影)。 -2. 敌人死亡 = 血条直角递减归零 → 卡体灰化 + 碎裂退场;禁止瞬间消失。 -3. 战斗段被短路掐灭的重击不单独产行动明细行(从行序可推断)。 -4. 敌卡刷新必须就地更新(字段级 setter),禁止逐行重建——全量重建会把死亡灰化态吞掉。 - -依据:敌像线索键 = art-bible §4.6.4;意图预告时序 = B2 Rule 8⑤;义务源 = B2×4④ / D1×4③④;禁瞬消 = B2 资产下限;就地更新 = 切片 entry 36 教训。无计算。 - -### 意图线索映射目录(B2×4① 成文载体——继承 battle.md 目录 + art-bible §4.6.4 键契约;资产定稿归 B5,本表为 D1 侧成文占位) -| enemy_id(§4.6.4 冻结键集) | 视觉状态(下一拍预告) | 强度档位编码 | 环长编码 | -|---|---|---|---| -| grub(蛆虫) | 攻击 ×1 态 | 小体量墩形 = 轻击(§3.1 普通怪) | 环点 1(单拍环——无蓄力态 = 每拍都动手) | -| ambusher(伏击兽) | 攻击 / 蓄力 / 重击 ×3 态 | 垂直延伸体量 = 重击(heavy_multiplier 直觉) | 环点 = 拍数;蓄力态在场 = 环里空一拍("可以贪") | - -- 预告时序 = 下一拍预告、挖掘期全程可见、结算期不另设意图播片(B2 Rule 8⑤);精确数值只在结算明细兑现(B2 Rule 8④——图像不报数)。 -- 映射键 = enemy_id,跨 run 恒定、禁重掷(B2 Rule 8③);形状 + 色相双通道;蓄力姿态必须含可辨识蓄力记号(§4.6.4)。 -- 资产需求下限三类(受击反馈 / 死亡表现 / 顺位标记)在程序化占位中先行(占位纹样挂键);终稿归 B5/样张批。 -- 键集注记:切片 DND 更名(goblin/bugbear/ogre_chief)与 GDD 键集 {grub, ambusher} 差异登记冲突清单②——键位映射表以 GDD 键集为锚,切片更名随 B2/C3 修订批对齐。 - -### 规则 21:弹层排队进出——打开哪层,哪层就真的能用 -1. 全部模态弹层(图例面板 / 明细回看 / 胜利 overlay / 失败 overlay)走同一张登记序栈:统一入栈出栈、后开置顶、关闭逐层恢复;任何一层打开时,被它遮住的东西要么隐藏、要么锁输入。 -2. 道具窗口不是模态:不入栈,但锁 D 区输入(规则 13)。 -3. TunePanel 显式初始化为不可见;它是切片调试入口,正式侧归 C4 天赋树——C4 落位时退役;Playtest 诊断按钮(卡死转储)保留为调试设施。 - -依据:退役时点 = battle.md OQ10 承接;AC-21 承载。无计算。 - -### 战斗屏状态机 -触发全部来自核心信号/回执——呈现层不自持玩法状态;"阶段"投影枚举 = {挖掘中, 结算中, 道具窗口}。 - -| 屏状态 | 进入触发 | 变化 / 出口 | -|---|---|---| -| 挖掘阶段(默认态) | 轮次开始 / 结算完毕回 Active | D 区可交互(AP 条点亮、可挖域呼吸微光);B 区敌人待机(意图徽标全程可见);明细带收起为上轮摘要 1 行;能量 2/10 | -| 结算阶段 | `round_end`(A2 棋盘路径 / A3 stopped 直发) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);明细带展开 84px 逐行滚动;阶段指示→"结算中";能量 7/10;B1 步骤流驱动逐行兑现 | -| 道具窗口态 | B1 授予段完成(窗口锚点信号) | E 区原位激活(规则 13);空库存直接 skip 不弹窗;选用/跳过 → 回结算流(结算阶段续) | -| 清图瞬间 | cleared 判定(round_end) | 金粒喷泉 + 彩纸 3–5s 即收(§2.3);H2 清图奖励行金框强调;随后换新图 install | -| 完美排雷高光 | B1 高光行(perfect_sweep) | 全屏喝彩级:金光带加倍扫射 + 「完美排雷 ×2」横幅(叠加于清图瞬间之上) | -| 标中旗高光 | 流水行 highlight=flag_hit | 该旗化暴击弹道加重 + 明细行金框(当轮即兑付) | -| 敌人死亡呈现 | 流水行击杀标记(target 字段) | 该敌卡血条归零 → 灰化 + 碎裂退场(禁瞬消、就地更新) | -| 胜利终局 | 判定行 verdict=win | 金蜡封落于扫雷图区中央 + 暖白金 overlay + 判定行 + 状态槽全清反馈 + RAP 清零反馈;出口 = 下一节点(runner) | -| 失败终局 | 判定行 verdict=lose | 暮蓝氛围 overlay(明度不变)+ 旗化光点收回 + 判定行 + 明细回看 + 状态槽全清反馈 + RAP 清零反馈;出口 = 返回 | -| Boss 遭遇变体 | encounter=boss | 战斗开始一次性紫赤影子爬棋盘 + 敌卡体量最大 + 阶段指示附 Boss 名 | -| 雾图变体 | 板含雾格 | 雾纹带 + 首遇提示(每 run 一次)+ 已开雾格 tint 残留 + 雾区全开合并域完成信号 | -| 空态:无状态效果 | query_active 双侧空 | 状态槽隐藏、数据框上移补位(规则 11) | -| 空态:零库存 | 关卡初 / 清空后 | E 区「道包空空——安全格里藏着补给」(指引性空态,非报错) | -| 调试变体 | 测试模式 | TunePanel 入口(正式侧归 C4 退役)+ Playtest 诊断按钮 | - -不变式:全部状态触发来自核心信号/回执——呈现层不自持玩法状态;模态子栈(规则 21 统一登记序)= 图例面板 / 明细回看 / 胜利 overlay / 失败 overlay——任一打开时遮挡物隐藏或输入锁定;非模态层 = toast(自动消退)与窗口态(锁 D 区)。 - -## 挖掘输入与棋盘可读 -### 规则 7:鼠标点哪就是哪个意思,一帧内的操作合成一批提交 -| 鼠标操作 | 翻译成 | -|---|---| -| 左键点已开格 | 移动(免费) | -| 左键点未开的相邻格 | 挖 | -| 右键 | 插旗 / 拔旗 | -| 点停手按钮 | 提交 stop——本轮结束 | - -1. 单意图帧:一帧内收集到的意图整批提交,点到停手当帧收集立即终结;F4 语义序仲裁只作防御性兜底(生产面造不出会乱序的输入)。 -2. 悬停预承诺:光标按目标切换三种语义、目标格边框高亮——点下去会发生什么,先看见再点。 -3. 可挖域常驻指示:小人八向相邻的未开格呼吸微光,是挖掘期唯一在动的元素。 -4. 悬停不可挖域 = 禁止光标 + 每 run 一次提示「需先走近(点击已开格移动,免费)」。 -5. 点击远格自动"先移动再挖"的复合意图本期不做(见 P1/P2 后置表)。 - -依据:光标三语义见「光标语义」;no_adjacent 提示见「一次性提示 hint_id」;义务源 = A2×6①③⑥。无计算。 - -### 规则 8:悬停已开的格,先画给你看小人会怎么走 -1. 玩家悬停任何已开格时,D1 立刻把小人到该格的合法路径用蓝色细线点迹画出——它是合法性指示,不是穿行动画。 -2. 移动执行用不超过 150 毫秒的短滑表现;不做"穿行动画轨道"。 -3. 路径数据 = `compute_move_path` 的 BFS 结果(不可达返回空)——预览与执行同源。 - -依据:短滑 ≤150ms 与再议挂 playtest 观测(battle.md OQ5,knob = move_slide_ms);义务源 = A2×6⑤(继承 battle.md 布局决策 D3)。无计算。 - -### 规则 9:四种格子一眼分得清,黑白截图也能逐格分类 -1. 四种格态必须一眼可辨,灰度截图下也能逐格分类——这是左键双义的消歧前提(点已开格 = 移动、点未开格 = 挖),误挖不可逆(花 1 AP、可能触雷)。 -2. 已引爆的雷格要"可通行可读":已开的底 + 巢穴纹(危险红族)+ 可作移动目标的视觉线索。 -3. 数字显示判定数据源 = `variant_ids`(digit 恒真透传、雾格隐藏呈现——A2 Core Rule 2);呈现层禁读真实数字自行判定。 - -依据:绘制优先级栈 = 数字 > 小人 > 旗 > 徽章 > 变异纹理 > 底色,任何元素不遮挡数字、小人与旗不得覆盖文本(art-bible §1.2);义务源 = A2×6②④。无计算。 - -### 四种格态(A2×6②——灰度截图逐格可分类) -| 格态 | 视觉构成 | 语义 | -|---|---|---| -| 已开 0 格 | 裸土地板 | 携带"八邻无雷"推理信息——与已开雾格必须灰度可判定区分(混淆即污染推理) | -| 已开雾格 | 地板无字 + 底色层淡雾 tint 残留 | 雾格只是不显示;tint 为残留视觉锚(battle.md OQ8 采纳) | -| 未开格 | 掩尘完整砖 | 左键 = 挖(1 AP) | -| 未开雾格 | 掩尘砖 + 雾纹带 | 左键 = 挖;雾语义 = 无雷盲区(图例恒在条目) | - -### 光标语义(A2×6③⑤——悬停预承诺) -| 光标 | 悬停目标 | 伴随指示 | -|---|---|---| -| 移动箭头 | 已开格 | `compute_move_path` 路径蓝细线点迹(规则 8)+ 目标格边框高亮 | -| 挖镐 | 可挖未开格 | 目标格边框高亮(可挖域另有常驻呼吸微光) | -| 旗形 | 旗插拔语义 | 目标格边框高亮 | -| 禁止 | 不可挖域 | + 首 run 一次 no_adjacent toast | - -### 规则 15:雾格有雾的样子,整片雾开完只报一次"开完了" -1. 未开的雾格 = 掩尘完整砖 + 雾纹带——雾身份走形状通道、色相不承载。 -2. 开过的雾格 = 地板无字 + 底色层淡雾 tint 残留——残留 tint 与"已开 0 格"必须灰度可判定区分(0 格携带"八邻无雷"推理信息,混淆即污染推理)。 -3. 整片连续雾区全开时,完成信号以视觉合并域为单位一次呈现——相邻两个雾区规则上是独立实例、呈现上合并成一片;禁止逐实例响两次。 - -依据:雾语义条目(无雷盲区)见图例(规则 14);tint 与完成信号随雾重设计批可复核(art-bible 雾格资产占位——内容封禁期);双雾区相邻 = A4 EC11(边界情况表);义务源 = A4×3③。无计算。 - -### 一次性提示 hint_id(封闭枚举——遥测值域与去重键) -| 值 | 触发 | 必含要点 | 频次 | -|---|---|---|---| -| `fog_first`(雾首遇——A4×3②) | 首个实际含雾格的板进入可操作状态(挖掘阶段开始;生成期一次查询即判定,免疫降级板误触发) | 无雷盲区不赌命 / 雾格不传播连锁(连锁止于雾界属正常)/ 雾内插旗纯损 | 每 run 一次 | -| `chord`(chord 肌肉记忆——A2×6③) | 经典扫雷玩家首日尝试双击快开 | 本作无双击快开——插旗后轮末自动判定标中;点数字格可移动小人 | 每 run 一次 | -| `no_adjacent`(不可挖域——规则 7) | 不可挖域悬停 | 需先走近(点击已开格移动,免费) | 每 run 一次 | - -- hint_id 封闭枚举 = 上表三值;拒绝 / voided / 零合法板 toast 族不占 hint_id(拒绝须每次可感知——见边界情况表)。 -- 文案定稿权归实现期文案 pass(本 GDD 只锁必含要点与形态约束)。 - -### 拒绝与 voided 呈现映射(A2×6⑥——映射源 = reject_reason + sub_reason) -| 拒绝源 | 触发 | 呈现动作 | 文案 | -|---|---|---|---| -| board_face·not_adjacent | 挖非相邻格 | 目标格旗朱 `#C63D22` 边框闪 + toast | 「需先走近」 | -| board_face·target_revealed | 目标已开 | 同上 | 「该格已翻开」 | -| board_face·target_concealed | 目标未探明 | 同上 | 「该格未探明」 | -| board_face·flag_present | 目标有旗 | 同上 | 「须先拔旗」 | -| board_face·flag_absent | 目标无旗 | 同上 | 「该格没有旗」 | -| board_face·no_path | 路径不通 | 同上 | 「路径不通」 | -| board_face·out_of_catalog | 调试态 | debug 级 | 不与玩家语义混桶 | -| resource_face(AP 不足 / RAP 不足——无上游载荷,按动作上下文映射) | 资源不足 | AP/RAP 数字脉冲 + toast | 「AP 不足 · 剩 0 点」 | -| phase | 非 Active | toast | 「结算进行中」 | - -- 图标 + 文案冗余(非色相独载)。 - -## 信息与归因呈现 -### 规则 10:奖励是什么、包里有什么,随时一眼可读 -1. 已开的格子里若藏着奖励,格面显示它的家族类型徽章、拾取瞬间档位可读。 -2. 右侧道具栏是挖掘期的规划面——背包每一件一行(下表);悬停看完整描述与触发注记,但看不到来源——来源归因是结算明细行的职责。 -3. 奖励身份键全局恒定、跨 run 禁重掷。 - -| 常读条每行显示 | 说明 | -|---|---| -| 图标 | 家族键定纹样(同族不同档可互辨——刀的两档并排分得清) | -| 名称 | 道具显示名 | -| 属性简述 | 行值快照派生的一句话(伤害 / 回复 / 增益) | -| 状态 | 在包 / 已用(已用的过滤出常读条) | - -实现参照——奖励徽章与库存常读条: - -| 口径 | 内容 | 依据 | -|---|---|---| -| 格面家族徽章 | 五键 attack/defense/heal/blast/weaken——键集冻结;五键槽位在程序化占位映射表预留、未启用键不呈现 | art-bible §4.6.3 | -| 拾取瞬间 | 格面徽章 tier 档位可读 | H1 节拍 | -| 库存徽章 | 八键、reward_id 键——knife_t1/knife_adv 同族互辨是硬需求 | art-bible §4.6.2 | -| MVP 呈现范围 | 格面徽章只在已开格呈现(未开格不预告身份) | B4 Rule 8 现行锁定;冲突清单⑤ | -| 徽章栈位 | 旗之下、变异纹理之上、不进数字区、不构成格内第二焦点 | art-bible §3.4 | -| 常读条枚举序 | 入包受理序 | B4 E21 | -| tooltip | 完整描述 + 触发注记、不含来源(来源归因由结算明细行承载) | battle.md 口径 | -| Used 过滤 | 已用件过滤出常读条——查询面保留只读、过滤归呈现 | query_inventory 保留只读 | -| 身份恒定 | reward_id / enemy_id / effect_id 三键全局恒定、跨 run 禁重掷 | B4×5① | - -依据:义务源 = B4×5①。无计算。 - -### 规则 11:身上的增益减益看得见、好坏分得清、没了有交代 -| 槽位元素 | 玩家读出什么 | -|---|---| -| 图标 | 哪种效果(形状纹样定身份,色相不承载身份) | -| 层数角标(L) | 叠了几层 | -| 剩余结算次数点(R) | 还会结算几次 | -| 悬停 tooltip | 来源 + 语义 + 剩余 | - -1. C 区固定 4 个状态槽;好坏一望即知:有利 = 金族满框、有害 = 红族缺框——判别按效果键的极性表,不看数值正负。 -2. 开局没有任何状态 → 整排槽隐藏、HP/攻击/RAP 数据框上移补位;图例面板载空态说明「战斗中拾取的增益在此显示,随战斗结束消散」。 -3. 状态系统不发任何信号——状态栏刷新绑定在结算编排完成的时点(命令式)。 - -| 口径 | 内容 | 依据 | -|---|---|---| -| 图标键 | 效果图标七键——形状纹样身份、色相不承载身份 | art-bible §4.6.1(七键冻结) | -| 极性判别 | 键级极性表:attack_up/defense_up/weaken 有利、ambush 有害——禁以 magnitude 符号判极性(负值增益存在;pool 亦不足以判——enemy_output 池两向并存) | B3×4③ | -| 极性键扩容 | 提案扩展键 enrage/off_guard/sapped 随极性提案实施批 | 极性提案实施批 | -| 语义归属 | 经 SettlementTable `effect_pool_map` 成文(作用面) | B3×4③ | -| 空态裁决 | 槽整体隐藏 + HP/攻击/RAP 上移补位(D1 定稿) | B3×4① | -| 数据源 | B3 投影:六归因字段 + display_name + 授予时数值快照(经 B1 编排面) | B3 已 schema——引用 | -| tooltip 文案 | source_class 文案经 B1 `source_label_map` | B1/B3 协作 | - -依据:义务源 = B3×4①②③。无计算。 - -### 规则 12:结算逐行念账——每笔收益标明来源,该高光的当场高光 -1. 结算推进时,明细带把 B1 流水逐行实时滚出,每行标明「做了什么、多少、到谁头上、因为什么」——玩家能把每一分收益对回自己哪一步扫雷决策。 -2. 高光分三档:标中旗金框、清图奖励金框、完美排雷全屏喝彩级——庆祝不打在空兑现上。 - -| 行的类型 | 呈现口径 | 依据 | -|---|---|---| -| 生效行(伤害 / 道具入库) | 实时滚出,逐行来源标注「{行为} {值} → {目标}(来源)」——模板插值,行宽预留 40% 膨胀 + 固定槽高 + clip_contents | 切片缺陷①回归 | -| 效果行 | 两列分示:value = 单次贡献值、pool_value = 池合成值——禁相加(防"−130%×2 行 = −260%"误读) | B1 Core Rule 14 字段 | -| 零值伤害行 | 照常可见、不被吞 | B4×5③ | -| 未生效四类行 + 标旗未中行 | 聚合计数呈现(防逐行惩罚轰炸)+ 形状冗余(图标 / 划线——非色相独载,色弱清单 #9) | B4×5③ | -| 四类未生效行划分 | 道具行(入库 / 生效语境注记)/「奖励未生效」(聚合计数)/「已消耗未生效」/「使用被拒」 | B4×5③ | -| 未选用件 | 语境注记「未选用件随关卡结束清空」(关卡域口径) | B4×5③ | -| 标中旗高光行 | 旗化暴击弹道加重 + 明细行金框(chord 缺席的即时兑现补偿) | B1×3① | -| H2 清图奖励行 | 金框高亮行(轮末仪式峰值) | B1×3① / B4×5④ | -| 完美排雷 | 全屏喝彩级:金光带加倍扫射 + 「完美排雷 ×2」横幅;高光行 value = 实际有效兑付当量;首份即零兑付不发高光 | B1×3② / art-bible §2.2 最高档(创意风险 #2 落点) | - -依据:行协议 = 13 类封闭枚举(B1 Core Rule 14——字段分层见规则 17 载荷表 #4);高光使用规则 = 事件型用独立高光行、属性型强调用行字段标记(B1);义务源 = B4×5③④ / B1×3①②。无计算。 - -### 规则 13:轮末道具窗口在道具栏原地亮起,至多选一件 -1. 结算推进到窗口锚点(授予段之后、增益减益段之前)时,E 区道具栏原地激活:面板点亮金描边、标题换成「轮末道具窗口 · 至多选用 1 件」,阶段指示同步标出窗口锚点位置;棋盘区去饱和 + 金橙色相偏移并锁输入(明度不变)。 -2. 满血的治疗包灰置、悬停说明禁选原因(「HP 已满 · 禁选」)。 -3. 选中即承诺——窗口关闭、回结算流,提交的是窗口条目位置;跳过按钮恒在;政策注记常驻「未选用件随关卡结束清空」。 -4. 背包为空就不弹窗(窗口标记照常登记——回放输入完整性归 B1),结算零停顿。 -5. 窗口期棋盘输入不竞争(结算期棋盘本就锁输入);窗口激活期间跳过常读条全量重建——全量刷新会冲掉窗口态。 - -依据:E 区原位激活 = battle.md 布局决策 D2;usable_now 投影 = B1 组装载荷;去饱和 + 金橙偏移 = art-bible §2 明度恒定硬规则的合规化实例;窗口触发政策 = MVP 有库存恒弹(候选取舍见 analysis);义务源 = B4×5②。无计算。 - -设计意图:本节每条呈现口径都是"把每一分收益对回玩家哪一步扫雷决策"的落点——P2 裁剪判据的最后半米由 D1 走完。 - -## 提示·终局反馈·美术与可访问性 -### 规则 14:新机制第一次遇到给提示,忘了随时查图例 -1. toast = 棋盘区上缘内侧浮出的非模态提示:自动消退 2.5 秒、不劫持输入、不打断挖掘流。 -2. 一次性提示共三种(雾首遇 / chord 肌肉记忆 / 不可挖域走近),每个整 run 只弹一次;拒绝、voided、零合法板的提示不属于一次性族——每次都要可感知。 -3. 图例面板 = 模态覆盖层:格态 / 变异 / 雾语义三组条目,「迷雾 = 无雷盲区」条目恒在、不设解锁门、可随时回看,并载状态槽空态说明(规则 11)。文案定稿权归实现期文案 pass——本规则只锁必含要点与形态。 - -依据:义务源 = A2×6③ / A4×3①②。无计算。 - -### 规则 16:一场打完,输了赢了、剩什么没了什么,样样有交代 -1. 六种反馈各有触发与呈现(下表)。 -2. 暮蓝 overlay 是全部界面里唯一的暮蓝档、明度不变——失败氛围靠色相与运动表达、不靠变暗。 -3. 不存在"RAP 满自动刷"——刷新的决策主体恒为玩家(A3 Rule 11)。 - -| 反馈 | 触发 | 呈现 | -|---|---|---| -| 胜利终局 | 判定行 verdict=win | 金蜡封落于扫雷图区中央 + 全屏暖白金 overlay + 判定行(终局判定行 = 胜负画面数据锚)+「下一节点」+ 明细回看入口 | -| 失败终局 | 判定行 verdict=lose | 明度不变的暮蓝 `#5A6C8C` 氛围 overlay(全作唯一暮蓝档)+ 小人坐砖掸灰 + 插过的旗逐面化光点收回 + 判定行 + 返回 | -| 状态槽全清 | battle_over(B3×4④) | 状态逐槽化光收回 + 微文案「状态随战斗结束消散」(防"我的 buff 哪去了"误读——胜负两终局同款) | -| RAP 清零 | battle_over(A3) | RAP 数字滚动归零 + 微文案(防"攒的钱凭空没了") | -| 库存清空 | level_clear(B4×5⑤——关卡域口径) | 道包逐件化光点飞出 +「剩余道具 ×N 随关卡结束清空」(N = clear_inventory 返回的清空前快照计数——B1 编排义务⑤数据面) | -| Boss 遭遇变体 | encounter=boss | 战斗开始一次性紫赤影子爬过棋盘(§2.6——纯视觉预告)+ 敌人卡体量最大 + 阶段指示附 Boss 名 | -| 弃图刷新确认 | 按钮点击(A3 契约的呈现半边) | 按钮置 AP 条右端,文案实时「RAP−{rap_refresh_cost 表读值} · 本轮剩 N 次」(剩余次数 = `refresh_cap_per_round` − 本轮已用;轮内已用次数读数 = A3 只读观测量缺口,接口漂移登记见 OQ2);入口可用性 = 组合根按只读观测量预判(rap ≥ rap_refresh_cost ∧ 剩余次数 > 0)+ `request_refresh` 返回值兜底(A3 无 `can_request_refresh` API——不引入);确认微交互显式提示代价与旧板旗失效;确认交互与常规确认不同位(位置通道——破坏性确认异位,色弱清单 #7);RAP<8 / cap 超限拒绝可见(边界情况表);换图后 AP 不重置、剩余次数扣减可见 | - -依据:battle_over 与 level_clear 两反馈不合并、时序不倒挂(边界情况表);义务源 = B3×4④ / A3 / B4×5⑤。无计算。 - -### 规则 19:美术没画好先用代码画的占位图顶着,占位图同样要过硬指标 -1. 全部等终稿美术的面(砖面 / 雾纹 / 敌像 / 图标 / 徽章 / 立绘 / 蜡封)以程序化占位先行:色值直接取冻结色板、形状按形状语言参数域用代码绘制(圆角砖 / 直角数据框 / 纹带形);图标、徽章、线索按键契约挂进键位映射表(数据键 → 占位纹样 ID,一键一槽位)——终稿美术到位时零数据层改动、零运行时换图。 -2. 占位图同样要过硬指标:数字可读性(1–8 全档对格底 ≥4.5:1、0.5× 缩放可辨、纹带不侵数字字形区)必须通过。 -3. 样张定稿 = 砖面形态与色板的冻结闸、终稿资产开工的前置;样张批不阻塞 D1 其余全部验收。 - -依据:判据 = F2;色板 = art-bible §4.1 冻结色板(底 L≥0.30 ∧ 饱和 ≤0.40 ∧ 墨 L≤0.027);形状语言 = §3;样张标准 = §1.4 第一验收项;键集扩容走 §4.6 修订;终稿开工 = asset-spec 批。 - -### 规则 22:中文不缺字、字看得清、颜色不独挑大梁、不用键盘也能玩 -| 基线 | 要求 | -|---|---| -| 中文字体 | 随包内置 + 设为主题默认字体——运行时默认字体无 CJK 字形,豆腐块 = 验收硬断言 | -| 按钮文案 | 4 汉字上限(「停手」「弃图刷新」「跳过」「选用」);译英 ≤1.6× 不破版;德语长词允许两行或图标+缩写 | -| 明细行宽 | 模板预留 40% 膨胀 | -| 对比度 | 数字对格底 ≥4.5:1(WCAG AA) | -| 色弱安全 | 无信息仅靠色相承载(九对语义对逐项成立)、灰度可辨 | -| 字号下限 | 棋盘数字 ≥18px / 明细正文 ≥14px / tooltip ≥13px(@1280×800) | -| 闪烁 | 无 >3 次/秒 | -| 减动效 | 全部动画时长减半或跳终态开关;结算逐行兑现是信息载体——不可整体跳过、可加速 | -| 输入 | 纯鼠标可完成全部操作 | - -依据:对比判据引用 = F2;本地化契约消费方 = D6(CJK / 按钮宽 / 术语表);正式分层(文本缩放 / 色盲模式 / 按键重映射)待 accessibility-requirements.md 定稿(OQ7);承载 AC-23 / AC-26。无计算。 - -### Visual/Audio 执行锚点(art-bible 逐条执行) -D1 是本体系中唯一的自有渲染面系统——视觉义务从"数据供给规格"反转为"执行 art-bible"。 - -| art-bible 锚点 | D1 执行 | -|---|---| -| §1.2 绘制优先级栈 | 数字 > 小人 > 旗 > 徽章 > 变异纹理 > 底色——BoardView 分层绘制/控件叠序按此栈实现,任何元素不遮挡数字(小人与旗不得覆盖文本;小人所在格边框高亮) | -| §1.4 格子样张(引用依据) | 样张 = 砖面形态定稿闸;D1 引用其验收标准(第一验收项 = 数字可读性硬指标)作为程序化占位与正式资产的共同判据;样张未制作不阻塞 D1(规则 19);样张通过后冻结为制作标准,终稿资产替换走 asset-spec 批 | -| §3.3 UI 形状语法 | 半拟物——面板 = 石板圆角矩形(与地砖同圆角率)、按钮 = 凸圆角"可按的砖"、仪式性确认(胜利蜡封)= 圆形;数据框/准线/进度条一律直角细线无纹理("圆角 = 可触摸的物件,直角 = 须精确的信息") | -| §4.1/§4.4 UI 色板 | 数据素面墨族(#33261B 系)——棋盘与面板读同一种墨;战斗容器中性石色(防暖色渗入分走数字对比预算);语义色规则(红只说危险 / 金只说收益 / 蓝只说己方 / 紫赤只说 Boss / 绿零逻辑语义 / 禁入色相带 300°–345°)逐条适用;明度恒定硬规则(状态区分只经色相/饱和/运动/元素——去饱和 + 金橙偏移即其合规化实例) | -| §4.5 色弱安全清单(逐对执行) | 九对语义对的冗余通道(形/图标/位置/运动)在对应组件落实——四格态靠完整/碎裂形、奖励金 vs 危险红靠剪影+运动、UI 红/金强调对加图标+文案冗余、破坏性确认异位(位置通道)、图标键族一键一纹样色相不承载身份 | -| §4.6 图标键契约(键位挂接) | 效果图标 §4.6.1(七键——sapped 键冻结未入表前禁引用)、奖励徽章 §4.6.2(八键 + clear_blast 并列预留)、格面类型 §4.6.3(五键——MVP 只挂已开格)、敌种线索 §4.6.4(行为拍姿态键)——键位映射表(规则 19)为唯一挂接点,键集扩容走 §4.6 修订、禁运行时换图 | -| §2 能量档承载 | 五区布局的动效与色彩转场按 §2.1–2.6 能量档实现(挖掘 2/10 唯一微光在动 → 结算 7/10 金橙光带 → 清图 8/10 金粒喷泉 → 胜利 6/10 克制 → 失败 1/10 暮蓝最静一拍 → Boss 5/10 紫赤)——"状态间区分度自检"三条(挖掘 vs 结算靠谁在动+饱和;胜负以色相即判;Boss 以紫赤登场标记)为转场验收锚 | -| 音频(D4,Alpha 占位) | MVP 无音频;挂点清单引用 B1/B4 音频挂钩点(明细行类型流 / 负反馈聚合单次 / 开格拾取按 category 分色 / 清图奖励音)+ toast 提示触发(本 GDD 新增挂点候选);临时 SFX 随垂直切片(AD 项先例) | - -> Asset Spec:Visual/Audio 义务已定义。art-bible 已定稿(§1–4),样张批后运行 `/asset-spec system:d1-hud-framework` 产出逐资产视觉描述/尺寸/生成提示词(样张先行——§1.4 为定稿闸)。 - -### 边界情况 -| 条件 | 行为 | 依据 | -|---|---|---| -| 每次拒绝(A2×6⑥) | 棋盘面拒绝(sub_reason 七值)→ 目标格旗朱 `#C63D22` 边框闪 + toast(文案映射见「拒绝与 voided 呈现映射」);资源面拒绝(AP 不足 / RAP 不足——无上游载荷,按动作上下文映射)→ AP/RAP 数字脉冲 + toast;相位拒绝 → toast「结算进行中」;图标+文案冗余(非色相独载) | 映射源 = reject_reason + sub_reason——每次拒绝玩家可感知 | -| 轮末意图 voided(至少 stop 被清零须可感知) | toast「本轮已清图,停手未执行 · 剩余 AP 已清零」——防 [dig清, stop] 静默改判清图、剩余 AP 清零不入 RAP 的读感欺骗(F4 联合清图让位在生产面不可构造,本条为诚实兜底) | A2×6⑥ / A2 voided 语义 | -| 零合法板(A1 EC5 → B1×3③——三形态选型定稿) | B1 上抛非法产物标记 → toast 诚实提示(非模态、不打断);补偿与回退不提供(补偿逻辑归 B1 域外、确定性回退已知好种子 = 实现期 ADR 候选〔A1 OQ2 关联〕——MVP 面向玩家的形态 = 仅提示);玩家永不卡死由 A1 验收三分支保证,提示是体验债的诚实兜底(原"玩家不可见遥测域"口径由本条承接闭合) | B1×3③ / A1 EC5 | -| 弃图刷新被拒(RAP 不足) | 按钮 + RAP 读数脉冲 + toast | A3 EC13 | -| 弃图刷新被拒(本轮 cap=2 超限) | toast「本轮刷新次数已用完」 | A3 EC15 | -| 确认微交互缺一步 | 不提交(防误触——破坏性确认异位) | 规则 16 | -| 两个雾区相邻(A4 EC11) | 规则上独立布置实例、呈现合并为一片——雾区全开完成信号以视觉合并域为单元、禁实例级双响(信号只响一次);样张最坏用例含"宽度 1 雾带两侧毗邻数字格" | A4 EC11 / A4 AC-9 | -| 雾首遇触发边界 | 触发谓词 = 首个实际含雾格的板进入可操作状态——免疫 EC2 降级板(无变异)误触发、免疫贴脸雾 t=0 歧义;一次性作用域 = 每 run | A4 UI Requirements 修正口径 | -| 敌人死亡与终局同帧(despawn 时序) | 死亡呈现数据 = 流水行击杀标记 + 目标字段(despawn 前已产出——规则 18①);battle_over 清理序列后呈现层零核心回读;`is_battle_live()` false 后视图进入终局态只消费快照 | 规则 18① | -| 窗口打开时库存为空 | 不弹窗、直接 skip(结算零停顿);窗口标记照常登记(B1 回放输入完整性) | B4 E8 | -| 满血时窗口含治疗包 | usable_now=false 灰置 + 禁选原因 tooltip;强制提交(不可经 UI 达成——禁选态拦截)→「使用被拒」行兜底 | B1 守卫 | -| battle_over 与 level_clear 反馈叠加(关卡末战) | RAP 清零 + 状态槽全清反馈先行(battle_over),库存清空反馈随后(level_clear 编排)——两反馈不合并(防"N 道具消失"误读为战斗结算内容) | 规则 16 | -| 模态覆盖层叠开(图例上开明细回看) | 统一登记序栈——后开者置顶、关闭逐层恢复;任一层打开时其遮挡物隐藏/输入锁定断言成立 | 切片缺陷⑤回归 | -| 悬停文案换行 | 全部动态区固定槽高 + clip_contents——换行裁剪不推挤布局(明细行 40% 膨胀 + tooltip 独立浮层) | 切片缺陷①回归 | -| CJK 字形缺失 | 豆腐块 = AC 硬断言失败(字体随包 + theme 默认;首次导出 checklist 项) | ADR-0003 | -| 敌卡刷新与死亡灰化竞争 | 就地更新(字段级 setter)禁全量重建——死亡灰化态不被后续刷新吞掉;窗口激活期同理跳过常读重建 | entry 36 教训 | -| 减动效开启 | 全部转场/高光/演出时长减半或跳终态;结算逐行兑现降速不跳过(信息载体);无闪烁 >3 次/秒恒成立 | 规则 22 | -| 移动目标 = 当前格 | 幂等零移动——无动画、无 toast | A2 EC14(合法受理的呈现静默) | -| `compute_move_path` 返回空(不可达) | 路径预览不显示 + 禁止光标(预览与执行同源) | A2 AC-14② 对侧 | -| 键集扩容(新 effect_id / reward_id / enemy_id 上线) | 键槽映射表缺键 = 呈现层 fail-fast(debug 断言 + 占位"?"纹样 + 诊断,禁静默空图标)——扩容走 art-bible §4.6 修订(禁运行时换图) | 规则 19 / AC-15 | - -## 呈现几何与可读性判据 -D1 零玩法公式——本节仅承载呈现几何与可读性判据。全部取色禁新增色值,一切经 art-bible §4.1/§4.4 冻结色板。 - -### F1 棋盘格尺寸(cell_size) -**结论**:cell 为两档定值(battle.md 拍板)——12×12 → 36px、10×10 → 45px;F1 公式为可行性校验器而非闭式推导:floor(min(D_w − pad_h, D_h − ap_bar_h − pad_v) ÷ N) ≥ cell(N) 且 cell(N) ∈ [30, 45] 断言成立;数字字号 = max(18, ceil(cell × 0.5)),像素字体整数倍缩放。 - -``` -两档定值:cell(12) = 36px、cell(10) = 45px(battle.md 拍板值,非公式导出) -可行性校验(装板期断言,违例 fail-fast): - floor(min(D_w − pad_h, D_h − ap_bar_h − pad_v) / N) ≥ cell(N) - 且 cell(N) ∈ [30, 45] -N ∈ {10, 12}(A1 BoardGenTable 尺寸档);D 区基准 1280×800 下 D_w=760、D_h=520−44(AP 条) -@1280×800 实算(pad_h=pad_v=16):min(744, 460) = 460 - 460 ÷ 12 → 38 ≥ 36 ✓ 460 ÷ 10 → 46 ≥ 45 ✓ -数字字号 = max(18, ceil(cell × 0.5)),像素字体整数倍缩放(canvas_items stretch 保证清晰) -``` - -| 变量 | 符号 | 类型 | 范围 | 说明 | -|---|---|---|---|---| -| D 区宽/高 | D_w / D_h | int px | 布局常量 | 五区布局基准(battle.md Layout) | -| AP 条高 | ap_bar_h | int px | 44 | D 区顶条 | -| 棋盘维数 | N | int | {10, 12} | A1 行值(MVP 两档) | -| 定值档 | cell(N) | int px | {36, 45} | battle.md 拍板两档;非闭式导出(为何定值而非闭式见 analysis 问题 4) | - -- Example:12×12 → floor(min(760−16, 476−16)/12) = 38 ≥ 36 ✓(定值取 36)→ 数字字号 = 18px;10×10 → floor(460/10) = 46 ≥ 45 ✓(定值取 45)。 - -设计意图:两档值来源 = battle.md 拍板("格 36–45px 见方"两端),公式只承载界限与可行性断言。 - -### F2 数字对比恒等式(引用 art-bible §4.1——D1 不新增参数) -**结论**:1–8 全档数字对所在格底 WCAG 对比 ≥4.5:1(§1.4 第一验收项,对程序化占位同样适用)——由色板参数域结构保证:格底相对亮度 L≥0.30 ∧ HSV 饱和 ≤0.40 ∧ 数字墨 L≤0.027 ⇒ 任意底墨组合 ≥4.5:1 恒成立。 - -| 实测锚(底 / 墨) | 对比 | -|---|---| -| #33261B / #C9AF83 | 6.9:1 | -| #4A1E14 / #B39A78 | 5.3:1 | - -- D1 侧判据 = 灰度截图分类 + 对比抽测进 AC;换 biome 色板须重跑 §1.4(换皮只换四槽、永不变信)。 - -### 显式排除声明 -| 对象 | 归属 | -|---|---| -| 伤害 / 经济 / 概率 / 生成公式 | A1–B4/B1/C3 | -| AP/RAP/价目显示值 | A3 表读值投影 | -| 伤害数字 | B1 流水行 value 投影 | -| D1 拥有的全部 | F1 几何换算、F2 可读性判据的引用执行、调参表呈现常量 | -| 随机 | 零——呈现层无任何 RNG 消费(S1/S2 扫描域适用) | - -## 依赖与输出 -权威分层:冲突时以 battle.md + art-bible 为呈现形态权威、以本 GDD 为系统契约权威、以各玩法 GDD 为机制语义权威。 - -| 系统 | 方向 / 性质 | 接口要点 | -|---|---|---| -| A2 | 上游 hard | 读:`current_board()` / `reveal_record()` / `compute_move_path(cell)`(呈现面,entry 39 E2 收口);订阅:零直订(ADR-0001——B1 facts 与组合根转发);写:`settle_batch(intents)` 经组合根(D1×6①);消费其三事件 schema(规则 17 载荷表 #1–3)与 ActionOutcome(#6);D1×6 六项义务全落位(台账表) | -| A3 | 上游 hard | 读:`phase / ap / rap / last_round_end`(getter-only——entry 39 E5);刷新意图经组合根 → B1 `refresh_board` 编排内 A3 `request_refresh`(挖掘期 Active 受理、每轮上限 `refresh_cap_per_round`=2);接口漂移登记:轮内已用刷新次数读数缺口(OQ2);AP/RAP 常显、RAP 清零反馈、双源拒绝呈现(A3 契约) | -| B1 | 上游 hard(数据供给主通道) | 读:步骤流信号(13 类行协议——载荷表 #4)、`presentation_snapshot()` / `is_battle_live()` / `stock_count()` / `query_reward_identity()`(切片实现、registry `d1_presentation_surface` 登记、B1 GDD 契约登记待批——冲突⑧/OQ3);写:`submit_window_selection(窗口位置序)` / 刷新提交面;level_clear 反馈行数据面(清空前快照计数);B1×3 + B4×5 + B3×4 呈现义务的统一数据源契约 = B1 Core Rule 14 | -| B2 | 上游投影 | `hero_unit() / all_enemies()` 只读投影(entry 39 E3;切片实现、B2 GDD 契约登记待批——冲突⑧);血条/顺位/姿态/存活数据面;despawn 前捕获纪律(规则 18);B2×4 四项义务落位(规则 6) | -| B3 | 上游投影(经 B1) | 零直读(B1 协作对象私有化)——状态投影经 B1 编排面(载荷表 #10);EC12 空态、极性映射、全清反馈(规则 11/16) | -| B4 | 上游投影(经 B1) | 零直读——`query_reward_identity()` / 库存载荷经 B1(载荷表 #8–9);奖励徽章键 §4.6.2、窗口呈现、四类行、H2、关卡末清空反馈(规则 10/12/13/16) | -| A4 | 上游 soft(呈现规格) | 雾纹理双通道、图例条目、首遇提示三要点、tint + 完成信号(A4×3——规则 9/14/15);A4 UI Requirements 为本 GDD 引用源 | -| A1 | 间接 | 零直接接口——EC5 零合法板数据面经 B1 上抛(非法产物标记 → toast 告知);biome 标签 = 换皮色板数据锚(程序化占位消费);产物字段保真是呈现诚实的数据前提 | -| D2 | 数据读取 | display_name 等本地化名经核心读表面;D1 自有常量不入 D2 玩法表(调参表载体声明) | -| C1-lite(level_runner) | 上游 hard | A 区节点链 / 当前节点 / HP 携带(关卡域);胜利 overlay「下一节点」→ runner 推进(写经组合根);level_clear 编排反馈;C1 GDD 未开始——本三项为切片代码契约,C1 GDD 定稿时回填(接口漂移回 C1 批) | -| C2 | 预留 | 关卡结算屏(关卡末清空反馈的完整屏形态)归后续 spec `design/ux/level-clear.md`(battle.md OQ9)——MVP 以 overlay 反馈承载 | -| B5 | 下游 hard | D1→B5 交付物:五区布局与双舞台裁决(第三形态)、B 区演出区结构、明细带呈现位、流水行协议呈现语义、敌人卡呈现语义(死亡灰化/禁瞬消)、art-bible §4.6 键位映射表——B5 只叠加动画密度与演出(受击反馈/弹道/退场动画),呈现语义已在本 GDD 定稿;"战斗表现美术测试"以本布局出样 | -| D4 | 下游 soft | 音频挂点事件源 = 明细行类型流 + toast 提示触发(B1/B4 音频挂钩点清单引用);MVP 无音频(Alpha) | -| D5 | 下游 soft | 教学承载位 = toast 体系 + 图例面板(雾三要点 / chord 提示 / 蓄力拍提示候选 / RAP 清零 / 库存清空教学条目)——D5 GDD 定稿口径 | -| A5 | 预留 | 探测类道具显影面(未开格身份呈现深度 OQ2)——接口归 A5 GDD,本 GDD 不预写 | -| D6 | 下游 | 本地化契约消费方(CJK/按钮宽/术语表——规则 22) | - -- 索引分层注记:systems-index 依赖分层 "D1 ← A2,A3,B1"——本 GDD 实际投影消费扩至 B2/B3/B4/A4/runner,全部经 B1 编排呈现面 + 封装收口批成文呈现面(entry 39/40),零新增运行时直调边;D1 无游戏状态、无 knob 联动、无 RNG——层 4 Presentation 定位不变。 - -### 呈现义务台账逐项落位表(门禁核对用——27 项,缺项即 blocking) -| 义务源 | 义务 | 承接方式(本 GDD 落点) | 状态 | -|---|---|---|---| -| A2×6 | ① stop 意图经 `settle_batch` 提交、不直调 A3 | 规则 7 + 写路径总表(规则 4)+ AC-13 | 落位 | -| A2×6 | ② 四种格态一眼可辨 | 规则 9 + AC-4 | 落位 | -| A2×6 | ③ 悬停预承诺 + 可挖域常驻指示 + chord 首遇提示 | 规则 7 / 14② + AC-5 / AC-14 | 落位 | -| A2×6 | ④ 已引爆雷格"可通行可读" | 规则 9 + AC-4 | 落位 | -| A2×6 | ⑤ `compute_move_path` 呈现语义 = 合法性指示(裁决继承 battle.md D3) | 规则 8 + AC-6 | 落位 | -| A2×6 | ⑥ 单意图帧收集 + voided 呈现 + 每次拒绝可感知 | 规则 7 + 边界情况表 + AC-7 / AC-8 | 落位 | -| B2×4 | ① enemy_id→图像线索映射清单成文(预告时序 = 下一拍、挖掘期全程可见;含强度档位/环长直觉编码;双通道) | 规则 6 + 意图线索映射目录 + AC-10 | 落位 | -| B2×4 | ② 线索映射全局恒定(enemy_id 键,跨 run 禁重掷) | 规则 6 / 10 + AC-10 | 落位 | -| B2×4 | ③ 单位顺位与存活可读 | 规则 6(顺位徽标)+ AC-10 | 落位 | -| B2×4 | ④ 敌方 side 池呈现口径(共享单值、各卡同值) | 规则 6 + AC-10 | 落位 | -| B3×4 | ① HUD 常显 + EC12 空态规格定稿(裁决:槽隐藏) | 规则 11 + AC-12 | 落位 | -| B3×4 | ② effect_id→icon 映射键契约 | 规则 11(引用 art-bible §4.6.1 七键冻结)+ AC-15 | 落位 | -| B3×4 | ③ 有利/有害极性呈现映射(非 magnitude 符号) | 规则 11(键级极性表 + pool 语义归属)+ AC-12 | 落位 | -| B3×4 | ④ 战斗结束全清的状态栏去留 | 规则 16 + 状态机胜负终局 + AC-16 | 落位 | -| B4×5 | ① 已开格 + 库存奖励身份恒定可读(常读条 = 挖掘期规划面) | 规则 10 + AC-9 | 落位 | -| B4×5 | ② 道具使用窗口呈现(原位激活/单件/usable_now/政策注记/空库存) | 规则 13 + AC-13 / AC-17 | 落位 | -| B4×5 | ③ 结算明细四类行呈现(聚合计数 + 语境注记) | 规则 12 + AC-11 | 落位 | -| B4×5 | ④ H2 清图奖励行强调呈现 | 规则 12 + 状态机清图瞬间 + AC-11 | 落位 | -| B4×5 | ⑤ 关卡末(level_clear)库存清空可见反馈 | 规则 16 + 边界情况表 + AC-16 | 落位 | -| B1×3 | ① 高光行强调呈现(标中旗金框 / H2 金框) | 规则 12 + AC-11 | 落位 | -| B1×3 | ② 完美排雷呈现形态 | 规则 12 + 状态机 + AC-11 | 落位 | -| B1×3 | ③ EC5 零合法板提示/补偿/回退形态(裁决:仅提示) | 边界情况表 + AC-19 | 落位 | -| A4×3 | ① 图例「迷雾 = 无雷盲区」条目(恒在/可回看) | 规则 14① + AC-14 | 落位 | -| A4×3 | ② 雾首遇提示(每 run 一次、三要点、非模态) | 规则 14② + AC-14 | 落位 | -| A4×3 | ③ 已开雾格 tint 残留 + 雾区全开合并域完成信号(battle.md OQ8 采纳) | 规则 9 / 15 + AC-4 | 落位 | -| A3 | AP/RAP 常显 + 刷新入口(玩家发起)+ RAP 清零反馈 + 双源拒绝 | 规则 16 + 边界情况表 + AC-8 / AC-16 | 落位 | -| A1 | EC5 零合法板诚实呈现(数据面经 B1×3③ 上抛) | 同 B1×3③ | 落位 | - -### 屏级 spec 与配套文档(UI 要求) -| 项 | 要点 | -|---|---| -| 权威屏级 spec | `design/ux/battle.md`(APPROVED,B1 UX Flag 的 /ux-design 产物——覆盖子屏:挖掘主界面 / 结算明细 / 道具窗口 / 终局 / 明细回看):本 GDD 为其系统级承接(布局/组件/交互裁决全部继承);本节不重复 spec 内容,stories 引用 `design/ux/battle.md` 而非本 GDD 直引组件细节 | -| UX Flag 处置 | B1 UX Flag(结算明细屏 + 道具窗口 → Phase 4 前置 /ux-design)已由 battle.md 兑现闭合;D1 自身无新增屏(战斗屏 = 唯一 MVP 玩法屏);相邻域屏 NodeOverlay / 关卡结算 = 后续 spec `design/ux/node-reward.md` / `design/ux/level-clear.md`(battle.md OQ9——本 GDD 只锁出口锚点) | -| pattern 库 | `design/ux/interaction-patterns.md` 已建(核心 8 条:双源拒绝反馈 / 原位窗口激活 / 逐行兑现明细带 / 悬停预承诺光标 / 点阵资源显示 / 模态 overlay 层级纪律 / 破坏性确认异位 / 禁用态即理由全文)——本 GDD 组件全部对号入座;12 目录占位(实现期回写义务) | -| accessibility | `design/accessibility-requirements.md` 未建(gate-check Pre-Production 缺口在案)——本 GDD 内建基线承诺(规则 22),正式分层(文本缩放/色盲模式/按键重映射)待该文档定稿 | -| 场景探针标配(code-conventions) | 每个可交互 UI 区域配套场景级探针——切片三探针(ui_probe / ui_click_probe / ui_tune_probe)扩展 + 战斗屏场景级探针(AC 硬性块);探针即呈现层契约的活文档 | - -## P0 最小闭环 -1. 玩家进入战斗屏——五区同屏就绪,≤500ms 内首格可点。 -2. 挖掘期鼠标操作经单意图帧整批提交 `settle_batch`(唯一写路径,经组合根)。 -3. 回执链:组合根立刻重查只读面 → 视图字段级 setter 就地刷新。 -4. 停手或 AP 尽 → `round_end` → D 区锁输入,明细带展开 84px 逐行兑现(B1 步骤流驱动)。 -5. 窗口锚点:E 区原位激活,选用/跳过 → 回结算流。 -6. 判定行 → 终局呈现(胜利金蜡封 / 失败暮蓝)+ 状态槽全清 + RAP 清零反馈。 -7. level_clear → 库存清空反馈「剩余道具 ×N」→ 下一节点 / 返回(runner 推进,写经组合根)。 - -## P1 / P2 后置 -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | 远格点击自动"先移动再挖"复合意图 | 移动免费高频,两击摩擦符合观测假设——先经 playtest 验证 P4 ≤2 观测假设 | -| P1 | Gamepad 焦点序 | Partial 支持非 MVP(OQ5) | -| P1 | 相邻域屏 node-reward / level-clear 完整屏形态 | 归后续 spec(OQ6 / battle.md OQ9);MVP 以 overlay 反馈承载 | -| P1 | accessibility 正式分层(文本缩放/色盲模式/按键重映射) | 待 accessibility-requirements.md 定稿(OQ7) | -| P2 | 存档级"一生一次"提示作用域 | 归 D3/C4 后重议(hint_once_scope) | -| P2 | TunePanel 退役 | C4 天赋树落位批(OQ12);Playtest 诊断按钮保留 | -| P2 | 探测类道具显影面 | 接口归 A5 GDD,本 GDD 不预写 | -| P2 | 未开格预读徽章 | 随极性提案实施批(冲突⑤/OQ9)——B4 Rule 8 现行锁定 MVP 不呈现 | -| P2 | 音频挂点出声 | MVP 无音频(Alpha,归 D4) | - -## 调参表 -D1 knob = 呈现节奏与可读性常量(非玩法数值——D2 Rule 1"全部玩法数值入表"纪律不适用);单一来源登记防散落,载体 = presentation 主题资源/常量单点(实现期裁决载体形态);修订走本 GDD 流程非调参。 - -| 字段 | 域(尺度) | 默认 | owner | 调过高 / 调过低 | -|---|---|---|---|---| -| toast_display_ms | 每条提示 | 2500 | D1 | 信息滞留、遮挡节奏 / 读不完即消(拒绝原因漏读) | -| move_slide_ms | 每次移动 | ≤150 | D1 | 移动拖沓(违反 P4 摩擦护栏)/ "太瞬"无方向感(battle.md OQ5 playtest 观测调) | -| board_install_fade_ms | 每次装板 | 200 | D1 | 换图迟滞 / 闪切无地牢感 | -| clear_celebration_ms | 每次清图 | 3000–5000 | D1 | 拖节奏(§2.3"三五秒即收"上限约束)/ 丰收感不足 | -| font_min_board / detail / tooltip | @1280×800 基座 | 18 / 14 / 13 px | D1 | 挤占格内空间 / 可读性下限击穿(可访问性基线) | -| hint_once_scope | 每提示项 | per_run | D1 | —— / ——(存档级"一生一次"归 D3/C4 后重议) | -| reduce_motion_scale | 每动画 | 0.5(或跳终态) | D1 | 减动效失效 / 等效关闭动效 | -| detail_band_height | 摘要 / 实时流 | 24 / 84 px | D1 | 挤压 B 区演出区 / 行数不足(逐行归因截断) | - -- 非 knob(结构冻结,修订走 GDD 流程):五区布局与分区尺寸(battle.md 拍板)、双舞台常驻、窗口原位激活形态、单意图帧纪律、模态层级纪律、键位映射契约(§4.6)、程序化占位策略、订阅纪律(ADR-0001)。 -- 性能预算(引用非 knob):同屏 draw calls < 200、进入战斗屏 ≤500ms 可交互、headless 全套 < 30s(technical-preferences / ADR-0004)。 -- Knob 交互:font_min_board × cell 尺寸(F1 字号下限随格尺寸联动——12×12 板 36px 格是 18px 下限的绑定域);toast_display_ms × 一次性提示去重(提示频率观感)。 -- 调参流程:改先测量后复测(切片 mock 数据先行——code-conventions 数值纪律);playtest 观测项 = 移动手感(OQ5 关联 battle.md)/ 明细带常驻(OQ10)/ 窗口存在感。 - -## 验收标准 -### 测试口径 -| 口径 | 要点 | -|---|---| -| 测试载体 | ADR-0004 双载体定稿(gdUnit4 deferred——D2 OQ1 关闭形态):逻辑断言类 = `godot --headless --script` 冒烟扩展;场景级类 = 场景探针(`godot --headless --path . res://smoke/.tscn` 走正常项目引导——autoload 在位、真实 SceneTree;切片三探针为先例) | -| 期望值纪律 | 呈现断言引用表读值(AP=ap_per_round 表读值、RAP 门槛=rap_refresh_cost 表读值等)与 art-bible 冻结参数,不写死玩法数值;呈现常量(toast 时长等)为本 GDD 调参表登记值可直断;每用例先 `reset_diagnostics()` | -| 覆盖声明(out-of-scope) | 玩法行为正确性(上游 GDD AC 域——D1 只断言呈现投影与上游契约一致)· 美术终稿质量(样张/asset-spec 批)· 动画密度(B5)· 音频(D4)· gamepad 焦点序(OQ5) | - -### AC 清单(编号不变,Given-When-Then) -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | 1280×800 与 16:9 全屏(canvas_items/expand) | 进入战斗屏(12×12 板) | 五区无遮挡/无重叠/无内容裁切(棋盘全部格子+数字完整可见)、分区尺寸 = battle.md 布局表值、同屏 draw calls < 200、进入后 ≤500ms 内首格可点 | 五区布局与基座 | -| AC-2 | 12×12 / 10×10 两档板 | 装板渲染 | cell = F1 定值档(36 / 45px @1280×800)且可行性校验通过、数字字号 ≥ max(18, cell/2)、像素字体整数倍缩放无模糊 | F1 格尺寸与字号 | -| AC-3 | 全部格底×数字组合 | 灰度截图 + 对比抽测 | 1–8 全档对比 ≥4.5:1(F2)、0.5× 缩放数字仍可辨、纹带不侵数字字形区;全部状态转场(去饱和+金橙偏移 / 暮蓝 / Boss 紫赤)明度恒定(无变亮/变暗表达) | 对比度与明度恒定(F2) | -| AC-4 | 含雾板 | 逐格渲染后灰度截图(+代码走查) | 四种格态一眼可辨;已引爆雷格呈"可通行可读"(已开底+巢穴纹+可作移动目标);已开雾格 = 地板无字 + 底色层 tint 残留且与已开 0 格灰度可判定区分;数字显示判定消费 variant_ids(呈现层无独立雾判定——代码走查) | A2×6②④ / A4×3③ | -| AC-5 | 小人在场 | 挖掘期任意时刻静止截图 | 8 向相邻未开格常驻呼吸微光(挖掘期唯一在动元素——其余静止截图断言);绘制优先级栈成立(徽章在旗之下纹理之上、不进数字区、无第二焦点) | 可挖域与绘制栈 | -| AC-6 | 悬停已开格 | 悬停 / 点击移动 | `compute_move_path` BFS 路径以小人蓝细线点迹高亮(合法性指示);移动执行 ≤150ms 短滑;不可达格返回空且禁止光标(预览执行同源——A2 AC-14② 对侧);点击远格无自动 move+dig 复合意图(负空间) | A2×6⑤ 定稿 | -| AC-7 | 一帧内多意图(含 stop) | 提交 | 整批经 `settle_batch` 单批到达(stop 终结当帧收集——探针断言单批);光标三语义(移动/挖/旗)随悬停目标正确切换 + 目标格边框高亮 | A2×6⑥③ | -| AC-8 | Active 挖掘期 | ① 点击停手 ② 弃图刷新成功 ③ RAP<8 或 cap 超限提交 | ① 意图经 `settle_batch([stop])` 提交(代码走查 + 探针:零直调 A3 符号)+ 按钮下压 + AP→RAP 飞行数字(RAP 增量 = 剩余 AP 读数投影)② RAP 扣 rap_refresh_cost、AP 不重置、剩余次数扣减可见、旧板旗失效提示可见 ③ 资源面拒绝可见(脉冲 + toast——EC13/EC15) | A2×6① / A3 | -| AC-9 | 已开格 + 库存 | 渲染已开格与库存常读条 | 已开格家族徽章(§4.6.3 键)+ tier 档位拾取瞬间可读;库存常读条逐件 icon+名称+属性简述、枚举序 = stock 受理序、不含来源信息(列表与 tooltip 均无);Used 件不在常读条;同族刀(knife_t1/knife_adv)并排互辨 | B4×5① | -| AC-10 | 双敌种遭遇 | 渲染敌卡 + 击杀驱动 | 意图徽标 = 下一拍预告且挖掘期全程可见、映射按 enemy_id 全局恒定(跨 run 重放同姿态)、含强度档位与环长编码(环点数 = 拍数)、蓄力态含蓄力记号;顺位徽标可读(固定顺位最前者可辨);血条 hp/max_hp 数字可读;多敌伏击层数各卡同值呈现;敌死亡 = 血条归零→灰化+碎裂退场(禁瞬消)、就地更新不丢灰化态(entry 36 回归) | B2×4①②③④ | -| AC-11 | 完整结算 | B1 步骤流驱动明细带 | 逐行明细实时可见且每行带来源标注(source_label_map 文案)、四类未生效行按聚合计数呈现且带形状冗余、零值行可见、效果行 value/pool_value 分示禁相加;标中旗行金框+弹道加重;H2 清图奖励行金框;完美排雷 = 金光带加倍+「完美排雷 ×2」横幅、value = 实际有效兑付当量、首份零兑付时高光降级不发;战斗后可经明细回看 overlay 复看完整流水 | B4×5③④ / B1×3①② | -| AC-12 | 状态在场/清空 | 渲染状态槽 | 槽显示 icon(§4.6.1 键)+层数+剩余结算次数点+tooltip(来源+语义);极性按键级表呈现(金满框/红缺框——非 magnitude 符号:负 magnitude 有利行测试例);空态 = 槽隐藏 + 数据框上移 + 图例载空态说明;battle_over 逐槽化光收回 + 微文案 | B3×4①③④ | -| AC-13 | 窗口触发 | 窗口交互 | E 区原位激活(非中央弹窗)+ 至多选 1 件 + usable_now=false 灰置带禁选原因 + 政策注记「未选用件随关卡结束清空」常驻 + 空库存不弹窗 + 选中提交 = 窗口条目位置(选中件库存态必变 Used——缺陷④回归探针)+ 窗口期不被常读刷新 stomped(entry 36 回归)+ D 区去饱和锁输入(明度不变) | B4×5② | -| AC-14 | 含雾板首遇 + 图例/提示系统在位 | 驱动各 hint_id 触发条件(含同 run 重复触发) | 图例面板「迷雾 = 无雷盲区」条目恒在可随时回看、载状态空态说明;雾首遇提示每 run 一次、非模态不劫持输入、必含三要点;chord 提示每 run 一次含「点数字格 = 移动小人」锚点;no_adjacent 首次提示;hint_id 去重生效(同 run 二次触发零 toast) | A2×6③ / A4×3①② | -| AC-15 | 程序化占位渲染全组件集 | 键位映射表挂接核查 + 未知键注入 | 全部 icon/徽章/线索经键位映射表挂接(数据键→纹样 ID);§4.6.1 七键/§4.6.2 八键/§4.6.3 五键/§4.6.4 姿态键逐一在位;未知键 = fail-fast 断言 + "?"占位 + 诊断(禁静默空图标);sapped 键未入 StatusEffectTable 前零引用 | 键契约执行 | -| AC-16 | battle_over 与 level_clear 信号(关卡末战) | 清空反馈逐项到达 | battle_over:RAP 数字滚动归零+微文案、状态槽逐槽化光+微文案;level_clear:库存逐件化光飞出+「剩余道具 ×N 随关卡结束清空」(N = 清空前快照计数);两反馈不合并、时序不倒挂 | A3 / B3×4④ / B4×5⑤ | -| AC-17 | 判定行 verdict=win/lose(Boss encounter 变体) | 终局呈现 | 胜利 = 金蜡封落于扫雷图区中央+暖白金 overlay+判定行+明细回看入口;失败 = 暮蓝 overlay(明度不变)+旗化光点收回+判定行;判定行内容 = B1 终局判定行投影(数据锚);Boss 战 = 紫赤影子爬棋盘一次性演出 + 阶段指示附 Boss 名 | 终局与变体 | -| AC-18 | 完整对局驱动 | 采集 playtest JSONL | 六类 ux 行按规则 17 载荷表 #13 schema 写入 playtest JSONL(字段名与值域逐项对表);ux_round_exit.path_tag 值域 = 上游封闭枚举 | 遥测 | -| AC-19 | 真实实例化战斗屏场景(探针场景加载、autoload 在位) | 驱动完整对局(两场遭遇 × 含雾板 × 窗口选用/跳过 × 刷新 × 胜负两终局) | 全程零脚本错误(stderr 归零)+ 五区断言 + 首格可点计时 ≤500ms(切片 ui_probe/click_probe 模式扩展) | 战斗屏场景级探针 | -| AC-20 | AC-19 对局至 despawn 与 battle_over 之后 | 静态扫描 views/ 文件集 + 终局后重放渲染比对 | 呈现层对核心生命周期状态的读数 = 零(静态扫描:views/ 文件集禁 `is_battle_live()` 以外的核心状态位读取、禁核心内部字段访问——只许成文呈现面);终局呈现数据全部来自流水行/快照(断言终局后重放渲染与实时渲染逐像素一致——快照自包含判据) | 信号时点状态可见性——缺陷②回归 | -| AC-21 | 逐一打开全部模态覆盖层(含叠开) | 逐层打开 / 关闭 | 每层打开时遮挡物隐藏/输入锁定断言成立、关闭逐层恢复;TunePanel 默认不可见(显式初始化) | 模态层级——缺陷⑤回归 | -| AC-22 | 悬停 tooltip 最长文案 / 明细行 40% 膨胀宽度构造 | 渲染后截图差分 | 全部动态区固定槽高 + clip_contents:布局零推挤(截图差分断言) | 布局稳定——缺陷①回归 | -| AC-23 | 全部中文文案界面 | 渲染 + 字形覆盖抽测 | 全部中文文案渲染非豆腐块(字形覆盖抽测——ADR-0003 硬性前置) | CJK 字体 | -| AC-24 | AC-19 对局全载荷流 + 六面回执 | 探针逐字段断言 + 代码走查 | 探针对规则 17 载荷表 #1–#9 载荷逐字段断言(消费侧校验——缺字段/多字段 = 失败,切片"窗口载荷缺 round_index"崩溃回归);#12 命令式刷新面 = 代码走查(旗插拔/移动/AP/RAP/状态/库存六面各一个回执后重查断言) | payload schema 消费断言——硬性要求①兑现 | -| AC-25 | 呈现层文件集 | 静态扫描 / grep | 零 `randomize()`/`randi()`/`randf*`(S1/S2)、零玩法数值字面量(期望值经只读面推导——人工三要素口径 warning 级 + AC-1/2/8 表读值推导合成判定)、核心写调用仅组合根(S7 呈现侧)、切片 provisional 名(`request_refresh_active` / `can_request_refresh` / `refresh_max_per_round` / `during_round`)零残留(grep 断言——entry 35 命名统一核销);每视图单元头注含「实现 GDD:design/gdd/d1-hud-framework.md(系统 ID D1)」溯源行 | 静态扫描与命名 | -| AC-26 | 1280×800 全量界面(含 AC-19 对局) | 截图抽测 + 静态扫描 + 探针 | 字号下限成立(棋盘数字 ≥18px / 明细正文 ≥14px / tooltip ≥13px);无闪烁 >3 次/秒(动画时长/频率参数扫描);减动效开启 = 全部转场/高光/演出减半或跳终态、结算逐行兑现降速不跳过(探针断言);AC-19 对局全程纯鼠标驱动(零键盘依赖) | 可访问性基线(规则 22) | - -## 版本历史 -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套迁移:按模板 v2 重排——设计推演(存在理由/候选取舍/数值论证/体验锚点论证)与审计附录(切片教训落位表/覆盖矩阵/冲突清单/复核注记)迁至 `design/gdd/analysis/d1-hud-framework.md`;规则 1–22 / F1–F2 / AC-1–26 / OQ1–12 / 27 项义务台账编号全保留,零规则与数值变更 | -| v1.1 | 2026-09-14 | /design-review(lean)NEEDS REVISION 同日核销:F1 改两档定值 + 可行性校验式(原闭式在固定边距下无法同时得出 36/45——用户裁决方案 A);呈现面 API 接口漂移登记扩条(冲突⑧/OQ3 覆盖 B1×5 函数 + B2×2 投影 + settlement_snapshot 信号);状态头 C3 状态更正(Designed 非 Approved);C1-lite 切片契约注记(C1 GDD 定稿时回填);新增 AC-26 可访问性基线(字号下限/无闪烁/减动效/纯鼠标)并扩覆盖矩阵 Rule 22→AC-23/26;"尸位"用语替换为直白表述;RAP 文案模板改表读值占位 | -| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;核心规则/枚举/边界情况/AC 转表格;呈现刷新链路转字符画 + 出口分发表;13 项载荷 schema、27 项呈现义务台账、意图线索目录、切片教训落位表、冲突清单、25 条 AC 全保留;语义与当日定稿版对齐,零规则变更 | -| v1 | 2026-09-13 | /design-system 一次会话定稿:27 项呈现义务落位 + 22 条核心规则 + 13 项载荷 schema 成文 + 25 条 AC + 三条切片硬性要求(solo 模式出稿,未经 /design-review) | diff --git a/design/archive/gdd-2026-09-14/d2-data-config.md b/design/archive/gdd-2026-09-14/d2-data-config.md deleted file mode 100644 index be63596e..00000000 --- a/design/archive/gdd-2026-09-14/d2-data-config.md +++ /dev/null @@ -1,611 +0,0 @@ -# D2 数据配置与数值表(Data Config & Balance Tables) - -> **状态**:Approved · **版本**:v2 · 2026-09-14 -> **承载支柱**:P1、P2(基础设施层,间接支撑全部四支柱) · **层级**:Layer 1 Foundation · Milestone MVP · 设计顺序第 1 位 -> **一句话**:D2 把全部影响手感与平衡的数字收进可配置、可校验的数值表,经 ConfigDB 单点发放、RngService 统一种子化——战斗可复现、平衡可热调、headless 可测的数据底座。 -> **推演件**:`design/gdd/analysis/d2-data-config.md`(本文件只收结论,理由在那里) - -## 设计目的 - -D2 是全部玩法数值的单一事实源:data/tables 的 .tres + autoload ConfigDB + autoload RngService——schema 先行、数值回填。没有 D2,参数散落硬编码:调一次难度改五处代码、战斗无法用固定种子复现、headless 自动化测试无从谈起。它是玩家永远不该注意到的地基:不制造情绪,但失职会直接摧毁 P1/P2 的信任底线。 - -1. 设计师"改数字不改代码"——全部影响手感的数字(AP、旗、折算比例、奖励值)集中一处可调,热重载即改即验,"这轮玩起来不对劲"能快速修正且不引入新毛刺。 -2. 开发与测试"同决策必同结果"——RNG 统一种子化,相同决策序列必然相同战斗结果,回放 / 审计 / 自动化测试可复现。 -3. 难度"越下越险由结构保证"——数值表天生带(关卡序号, 节点深度)两维,难度曲线可审计、可回溯,而非散落各处的魔法数字。 -4. CI 与无窗口环境照样跑完整战斗——数据层零界面依赖。 - -## 系统范围 - -负责: - -- 全部表 schema 类(data/schemas)与数据文件(data/tables) -- autoload ConfigDB / RngService · SCHEMA_VERSION 常量 -- 加载 / 校验 / 热重载状态机 · 校验双通道与诊断收集器 -- debug override 链 · 难度行解析 resolve -- 十张已定稿表 + 两张占位表的结构与键(数值由 owner 系统按设计顺序回填) - -不负责: - -- 平衡数值定值与玩法公式——伤害、掉落权重、成长曲线(owner 系统 GDD 与 registry:B1 / B4 / C3 等) -- 玩法随机预置——任何系统若需玩法随机(如结算浮动),自带方案走增流通道并通过 P1 评审(规则 5) -- 存档(D3)· 任何 UI 表现面 -- 精英 / Boss 修饰语义(C1 / C3——DifficultyTable 只预留 elite_ / boss_ 命名空间)· MetaTable 键结构(C4) - -硬约束:玩法数值零代码字面量 · 零 UI 依赖 · fail-fast 无软回退 · RNG 流集合封闭 · 表路径固定(debug 注入根除外)· release 无 override 源。 - -## 核心循环 - -### 数据加载与校验链路 - -``` -进程启动(Unloaded) - │ ConfigDB._ready() / load_tables(root, collect_only) - ▼ -Loading ──── 按表清单逐一 load() ── 文件缺失 → Failed - ▼ -Validating ── 单个资源加载成功 → schema validate(),错误入诊断收集器 - ▼ -┌ 校验双通道 ──────────────────────────────────────────┐ -│ 游戏通道 collect_only=false(默认): │ -│ 错误 → push_error 清单 → 致命错误路径 │ -│ editor / CI / headless / release 一律致命 │ -│ 测试通道 collect_only=true(仅 debug/测试构建): │ -│ 收集不升级 → 冒烟脚本逐夹具断言类别 → 一次性退出 │ -└──────────────────────────────────────────────────────┘ - ▼ -Ready ────── 全部通过 → 类型化属性可读 -``` - -### 热重载链路(仅 debug) - -``` -编辑器热重载 / 调试键 → Reloading - │ - ├─ 战斗中(set_reload_gate 已置位)→ 拒绝返回 false,停留 Ready - │ (战斗结束后手动再触发,不自动重放) - ▼ -重走 Loading → Validating - │ - ├─ 校验失败 → 保留旧表停留 Ready + debug 错误清单(唯一软着陆,不杀调试会话) - ▼ -校验通过 → Ready:新值经类型化属性可读 + config_reloaded 恰一次(仅 debug,D1 调试用) -※ RNG 状态线独立:Reloading / Failed 不触碰 RngService——计数器与 master_seed 不变(AC-4) -``` - -### RNG 取数链路 - -``` -进程启动 → 流待命(未播种取数 = 致命) - ▼ -冒险开始 → C2 set_master_seed()(仅全流计数器全零时受理) - ▼ -scope 事件:board_gen = 每次生成新扫雷图(A1 换图时) - reward_roll = 每次 board install 批(格奖励批 + 清图奖励批) - encounter = 每场战斗实例化(B1 begin_battle——unit_count 区间骰) - │ open_stream(stream):计数器 +1 → R2 派生 → 返回已播种实例(同一 scope 事件内取数共用) - ▼ -冒险结束 → 流保留供复盘;快照 = master_seed + 各流 scope 计数器 - (须在无在飞 open_stream 实例时切出——scope 事件边界之外) -``` - -### 出口分发 - -| 出口 | 触发 | 动作 | 约束 | -|---|---|---|---| -| 启动致命中止 | 启动加载任一致命错误 | 输出错误清单并中止构建;headless 独立进程非 0 退出 | 全构建一致,无软回退 | -| 热重载软着陆 | debug 热重载校验失败 | 保留旧表停留 Ready + debug 错误清单 | 唯一例外 | -| 运行期致命 | 请求越域 / 未播种流取数 | 游戏内致命错误路径;headless quit 非 0 | 不分构建 | -| 热重载成功 | debug 且门未置位且校验通过 | 新值可读 + config_reloaded 恰一次 | 战斗中被门拒绝 | -| 存档拒读 | SCHEMA_VERSION 高于当前 | 拒绝读取 | 比较归 D3,常量归 D2 | - -## 表结构与回填(schema 先行) - -规则: - -1. 规则 3(结构先行、数值回填):全部数值表按"结构 + 数据"两件套交付——结构 = data/schemas/ 下一个自定义 Resource 类(每字段带类型、范围、默认值和注释),数据 = data/tables/ 下数据文件;D2 先交付全部 schema 与占位表(含键结构),具体数值由 owner 系统 GDD 回填,先有格子、后填数字。 - 举证:无计算。十张已回填表 schema 目录见本节,逐表字段行见调参表节。 -2. 规则 4(进度坐标查行):跟着冒险进度成长的数值表(难度、生成参数、敌人配置)每行带(关卡序号, 节点深度)两维坐标——系统按坐标取数,无精确命中时取不超过请求坐标的最近已有行;敌人等实体键在命中行内按名字精确匹配,那一行没有这个名字就是悬空引用、直接致命中止,不做身份近似。 - 举证:解析规则(floor 取行、warning 四元组去重、越域前置守卫)见「难度行解析」节;悬空引用 = 加载期致命(规则 6)。 - -| 表的形状 | 行键怎么定 | -|---|---| -| 进度成长表 | 行键 =(关卡序号 level_index, 节点深度 node_depth) | -| 实体复合键表 | 进度两键之后再复合实体主键列(如 EnemyTable 的 enemy_id;合成规则写入 schema 注释) | -| 单行全局常量表 | 无成长语义的表允许只放一行 | -| 元进度表 | 存档/天赋/代币归 MetaTable,键结构归 C4 定 | - -| 两维坐标之外的数值轴 | 归宿 | -|---|---| -| 战斗内轴(胜场/轮次等) | 由 owner 公式承载或作为表列;归属登记进 schema 注释(C3 定稿时声明) | -| 难度第三维"精英/Boss 修饰" | game-concept 定稿:难度 = f(关卡序号, 节点深度, 精英/Boss 修饰);DifficultyTable 预留 elite_ / boss_ 前缀扩展字段命名空间,语义由 C3 定稿——本 GDD 不定义任何修饰数值、不预写修饰枚举 | -| 两键定不了精英性的节点形态 | 如分支地图同深度并存精英与普通节点——允许改键,按接口漂移修订规则回写(与 MetaTable 同等豁免待遇) | - -设计意图:进度坐标可以就近近似,"是哪种敌人"不能近似——身份近似会静默改变遭遇构成、损害 P2 归因。 - -### 十张已回填表 schema 目录(逐表字段行见调参表节) - -| 表资源 | 键结构 | Rule 4 豁免 | 跨字段 / 结构校验(加载期致命) | 悬空引用政策 | Owner | -|---|---|---|---|---|---| -| ActionEconomyTable | 单行全局 | 单行全局定义表(先例) | 任一动作成本 ≤ ap_per_round(schema validate() 跨字段类别承载,条件性夹具登记) | — | A3 ✓ | -| VariationTable | 按 variant_id(含 unlock_level 列) | 定义表非进度成长表——进度语义承载于 unlock_level 列(schema 注释) | info_mask=hide_numbers ⇒ cell_constraint=safe_nonzero(夹具 variation_mask_constraint) | counter_item_ids MVP 不校验——A5 首个道具 id 回填时补校验 + 条件性夹具 | A4 ✓ | -| StatusEffectTable | 按 effect_id | 定义表非进度成长表(schema 注释承载) | magnitude:percent ∈ [-100,100] ∧ ≠0 / flat ≥ 1 跨字段校验 | effect_id 校验已激活(B4 RewardTable 首引 defense_up——夹具 b4_dangling_effect) | B3 ✓ | -| BoardGenTable | (level_index, node_depth)——首个进度键表(depth-0 锚行内建;第三轴落点 = Boss:Dmax 行约定 + elite 命名空间预留 + A1 OQ6 重审;改键退路 = 规则 4 接口漂移通道) | 无(进度成长表) | fog_domain_ok(F2)+ min_safe_feasible(F2b)+ cost_feasible(F2c:attempts×W×H ≤ 16384 provisional,运行期禁墙钟逃生) | — | A1 ✓ | -| EnemyTable | (level_index, node_depth, enemy_id)——每行集恰一敌种 | 无(进度成长表,A1 同型) | 每行集恰一敌种(行集内 enemy_id 唯一,违规加载期致命) | — | B2 ✓ | -| HeroTable | 单行全局 | 单行全局定义表(ActionEconomyTable 先例) | atk = 0 加载拒绝("0 基线 × 百分比增益恒零"死锁自 schema 层杜绝) | — | B2 ✓ | -| RewardTable | 按 reward_id(多行;pool_tag 分池不参与键) | 定义表非进度成长表(schema 注释承载) | 池空(pool_tag × 雾/非雾两态各 ≥1 活行)· clear_default 恒正当量 · buff⇒effect_id 必填 · safe_cell 活 buff 行集非空 · floor_supply_missing / no_damage_row(跨 RewardConfigTable) | effect_id 精确引用 StatusEffectTable(已激活) | B4 ✓ | -| RewardConfigTable | 单行全局 | 单行全局常量表(HeroTable / ActionEconomyTable 先例) | k_dmg=0 = F5 断言关闭(现行默认——刀保底语义由供给控制器战斗首件保证取代;no_damage_row 后闸托底) | — | B4 ✓ | -| SettlementTable | 单行全局 | 单行全局常量/结构表(HeroTable / ActionEconomyTable 先例) | segment_order 恒等拍板段序校验违例致命 · effect_pool_map 键 ⊆ StatusEffectTable 活行集 · p_perfect 载体域 {100,200} 域外加载致命——三行致命 manifest:segorder_violation / poolmap_dangling / pperfect_oob | effect_pool_map 悬空加载期致命 | B1 ✓ | -| AuxItemTable | 按 item_id | 定义表非进度成长表(schema 注释承载) | target ∈ 各空间 effect_kind 支持域交集(A5 承载——真视窄域护栏校验,夹具 a5_target_violation) | counter_item_ids(VariationTable → item_id)首引已定稿〔probe_dust〕、悬空校验激活随 D2×② 对侧批 | A5 ✓(原 HelperItemTable 占位更名转正——A5 定稿登记) | - -### 未回填占位表 - -| 表资源 | 占位内容 | 键结构 | Owner | -|---|---|---|---| -| DifficultyTable | 成长参数 + 精英/Boss 修饰预留命名空间(乘数域 [0.1,10] registry 预登记;越域 clamp+warning = registry 登记的显式例外——组合事故非配置事故,非 fail-fast 场景) | (level_index, node_depth) | C3(第 12 位) | -| MetaTable | 代币/天赋字段名 | 单行全局(元进度轴豁免,C4 可改键) | C4(第 16 位) | - -### MVP 内容行(事实登记归 registry) - -| 表 | MVP 行集 | 值状态 | -|---|---|---| -| ActionEconomyTable | 单行:ap_per_round=8 · dig/插旗/拔旗=1 · rap_refresh_cost=8 · move/chain=0(冻结) | 定稿值,登记归 registry `action_economy` | -| VariationTable | 恰含 fog 行(unlock_level=2 · hide_numbers · safe_nonzero) | 岩浆/冰冻无 MVP 行(垂直切片建行) | -| StatusEffectTable | 四行 attack_up / defense_up / ambush / weaken(全 stack) | 值 provisional,锚验收归 B4/B2/B1;weaken = −65(值域 [60,85]——B1 F0 裁决,条款 2 锚闭合);defense_up = −30(减伤墙批 C3 投值,叠满两层 −60 帽——B3/registry 同批) | -| BoardGenTable | 参考行 L1 / L2 | provisional(C3 调参所有权) | -| EnemyTable | 三敌种行 goblin / bugbear / ogre_chief(C3 修订批转正——registry `enemy.mvp_content` 为准) | 值 provisional——溯源义务见登记与对账义务表 | -| HeroTable | 单行(max_hp / atk=6 原型锚) | max_hp 出处待查;atk provisional 归 C3 | -| RewardTable | 默认根行集八行:defense_up_basic / attack_up_basic / spark_aoe / heal_minor / knife_t1 / knife_adv / heal_pack / clear_blast | 值 provisional 归 C3;格子池四行即时类 + 注入池三行可选类(active_inject——供给控制器承载,原"即时 75% / 可选 25%"权重占比由注入机制替代)+ 清图槽单行 | -| RewardConfigTable | 单行 t_fog_min=2 · k_dmg=0 · n_draft=32 · p_min=8 · active_p0=0.4 · active_decay=0.5 | provisional 归 C3 | -| SettlementTable | 单行默认(D_ref=12 · p_perfect=200 · 拍板段序 · clamp −100/+100 · floor · +4 字段:damage_a_per_cell=1 / damage_a_cap=8 / damage_b_per_flag=2 / armor_effectiveness 克制矩阵——护甲克制批,C3 修订批接口漂移) | provisional 归 C3 | - -## 加载·校验·热重载 - -规则: - -1. 规则 6(出错当场中止):D2 在加载与运行期发现数据出错一律致命中止,不做软回退——错误数值上线比崩溃更伤(P1/P2 信任底线);错误分两类处置(下表)。唯一例外:debug 热重载校验失败时保留旧表停留 Ready、给出错误清单,不杀运行中的调试会话。 - 举证:未播种流取数见边界表 EC7;请求越域见难度行解析前置守卫。两类构建分流见本节「校验双通道」。 -2. 规则 7(零界面依赖):D2 自己的代码与测试一律不 import 任何 Control/场景类——纯数据层不碰表现;没有界面依赖,CI 与无窗口环境才能跑完整战斗。 - 举证:无计算。验收 = 静态扫描 + headless 实跑两项合成判定(AC-10)。 -3. 规则 8(版本拒读):版本常量 `SCHEMA_VERSION` 归 D2;表文件与存档(D3)携带版本号,存档带来的版本号高于当前支持时直接拒绝读取——旧程序不硬猜新格式的数据。 - 举证:无计算。拒读行为见边界表 EC9(比较逻辑归 D3,常量归 D2)。 - -| 错误类别 | 什么情况 | 处置 | -|---|---|---| -| 加载期校验错误 | 启动加载/热重载时查出:字段越界、类型错、NaN、表为空或某 level 无行、缺 depth-0 锚行、重复键、悬空引用、权重和 ≤0、段序违例、池映射悬空、p_perfect 越域 | 经校验双通道处理;启动路径在 editor、CI、headless、release 一律致命 | -| 运行期致命 | 运行中越界请求:关卡/深度坐标越域(解析入口前置守卫拦截)、未设种子就取随机数 | 不分构建一律致命:游戏内走致命错误路径,headless 冒烟进程 quit 非 0 | - -设计意图:MVP 有意不做软回退——带病数值上线比崩溃更伤信任底线。 - -### 校验双通道(规则 6 实现参照:ConfigDB.load_tables(root, collect_only)) - -| 通道 / 机制 | 要点 | -|---|---| -| 游戏通道(collect_only=false,默认) | 校验错误 → push_error 错误清单 → 走致命错误路径(游戏内中止构建;headless 下独立进程非 0 退出——`--script` 协议,设计顺序 #1 时无主场景可依赖);release 构建的致命表现(引擎默认错误路径的实际行为验证)显式 deferred→首次 release 导出 checklist(与 AC-18 同待遇) | -| 测试通道(collect_only=true,仅 debug/测试构建) | 收集错误不升级,供冒烟脚本逐夹具断言错误类别后一次性退出 | -| 夹具注入 | debug/test 构建允许经命令行 `--data-root=<路径>` 让 ConfigDB 从注入根加载(夹具放 tests/fixtures/);禁止把夹具拷进 data/tables/(污染 AC-1 的干净检出前提) | -| 诊断收集器 | resolve / 校验 / override 的 warning 与错误共用同一类目体系,统一经 ConfigDB 内部诊断收集器投递,同时镜像 push_warning 供开发期控制台(Godot 无进程内拦截 push_warning 的 API——冒烟断言必须走收集器);测试通道暴露只读诊断清单与 `reset_diagnostics()`;跨调用去重状态(R1 四元组注册表)随 `load_tables()` 或 `reset_diagnostics()` 清空(用例间无顺序依赖);游戏通道 warning 仅镜像控制台,不承诺收集 | - -### 状态机 - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| Unloaded | 进程启动前 | 磁盘 .tres 未加载 | -| Loading | `ConfigDB._ready()` 或 `load_tables()` | 按表清单逐一 `load()`;文件缺失即入 Failed | -| Validating | 单个资源加载成功 | 调 schema 的 `validate()`,错误入收集器 | -| Ready | 全部通过 | 类型化属性可读 | -| Failed(启动路径) | 启动加载任一致命错误 | 全构建致命中止并输出错误清单 | -| Failed(reload 路径) | 热重载校验失败 | 保留旧表停留 Ready + debug 错误清单(不杀运行中的调试会话) | -| Reloading(仅 debug) | 编辑器热重载 / 调试键 | 战斗中拒绝(返回 false,战斗结束后手动再触发);否则重走 Loading → Ready | - -不变式:RNG 与 ConfigDB 状态线相互独立——Reloading / Failed(任一路径)不触碰 RngService,计数器与 master_seed 不变(派生只依赖盐/master_seed/scope,与表数据无关;若按状态机对称性在 reload 时重置 RNG 将击穿 AC-4)。 - -### 边界情况 - -| # | 条件 | 行为 | 依据 | -|---|---|---|---| -| EC1 | 表文件缺失或 load() 失败 | 致命中止,错误清单含路径;无软回退 | 规则 6 | -| EC2 | 字段越界 / NaN / 类型不符 | `validate()` 收集后致命 | 规则 6 | -| EC3 | 表为空或某 level 行集为空 | 校验阶段致命(R1 前置条件),不会进入运行期 | 规则 6 | -| EC4 | 请求 (level_index, node_depth) 无精确行 | 按 R1 floor 解析 + warning(按四元组去重)——预期行为,不是错误 | R1 | -| EC5 | level_index 超过表最大 level | 命中最大 level 行(floor 规则的自然结果,无独立 clamp 分支) | R1 | -| EC6 | master_seed 为负 | abs() 归一化 + warning,保证 ∈ [0, 2^63);恰为 INT64_MIN → 致命(abs 恒等回绕,与 0 静默别名——机理是输出掩码抹掉 bit 63) | R2 | -| EC7 | 未设 master_seed 就取随机数 | `push_error` 后显式中止(GDScript 的 push_error 本身不终止进程——游戏内走致命错误路径,冒烟脚本 `quit(1)`),取到的值不可用——C2 未接线的显式暴露,禁止 seed=0 软回退 | 规则 6 | -| EC8 | 战斗进行中请求热重载 | 拒绝并返回 false;战斗结束后手动再触发(不自动重放) | 状态机表 | -| EC9 | 存档携带的 SCHEMA_VERSION 高于当前 | 拒绝读取(比较逻辑归 D3,常量归 D2) | 规则 8 | -| EC10 | 奖励权重表权重和 ≤ 0 | validate 致命(B4 回填后必须 > 0) | 规则 6 | -| EC11 | debug override 类型或范围与 schema 字段不符 | warning + 忽略该条(仅 debug;release 无 override 源) | R3 | -| EC12 | 同一流名被重复注册或请求未知名流 | debug 断言中止(流名封闭) | 规则 5 | -| EC13 | 两个系统同帧请求同一流 | 允许——`open_stream` 各自取号(计数器各 +1)按调用顺序串行生效;单线程假设成立(Godot 主线程玩法逻辑),不引入锁 | 规则 5 | -| EC14 | 请求越域(level_index < 1 或 node_depth < 0) | 规则 6 致命(R1 前置守卫) | R1 | -| EC15 | 某 level 行集缺 depth-0 锚行 | validate 致命(防"入口天灾":入口请求静默 floor 到深行造成难度突刺);写死开、无运行期开关,C3 如需重议走本 GDD 显式修订流程(非 knob) | 规则 6 | -| EC16 | 热重载校验失败 | 保留旧表停留 Ready + debug 错误清单 | 状态机 reload 路径 | - -## 统一取数与调试覆盖 - -规则: - -1. 规则 1(数字只写在表里):凡是设计师要调的数字(行动点、插旗成本、奖励值、敌人数值……)只存在于 data/tables/ 下的 .tres 数值表里,一处定义、处处引用;代码文件里禁止出现玩法数值字面量(引擎/工程常量除外),评审发现写死的玩法数值即评审阻塞项。 - 举证:无计算。违规检测 = 启发式扫描 + 人工复核(AC-14,随各 owner 回填定稿与里程碑 gate-check 执行)。 -2. 规则 2(取数只找 ConfigDB):全部 19 个系统读数值只有一条路——经 autoload ConfigDB 的类型化属性读取(例 `ConfigDB.action_economy.ap_per_round`);禁止绕过它自己 `load()` 表文件或长期缓存副本(副本绕过校验,热重载换新值时它也不知情)。唯一例外:debug/测试构建可从命令行注入的根目录加载。 - 举证:无计算。注入根机制见「校验双通道」夹具注入行。 - -设计意图:单点发放 + 单点读取,热调与校验才有意义。 - -### 调试覆盖链(R3 debug_override,仅 debug 构建) - -**结论**:`effective = override[key] if _has_override(key) else table_value`——仅 debug 构建加载 override 源;v1 仅支持单行全局表字段;类型/范围不符 → warning + 忽略;release 结构性不存在;永不回写 .tres。 - -| # | 边界 | -|---|---| -| ① | 覆盖判定与存储内聚于 ConfigDB(规则 2 单点),gameplay 不可见 override 来源 | -| ② | key = schema 字段点路径(与规则 2 属性路径同构,例 `action_economy.ap_per_round`);未知 key → debug warning + 忽略该条;v1 仅支持单行全局表字段——进度键表的行寻址语法(如 `difficulty.(2,0).hp`)登记为后续扩展,当前 override 对进度表无 key 空间 | -| ③ | override 值类型与范围必须与 schema 字段一致,不一致 → debug warning + 忽略该条(复用 schema 校验逻辑,防止 debug 会话注入越界值污染平衡基线) | -| ④ | release 构建不加载、不注册任何 override 源(恒等是结构保证而非"碰巧不生效");debug 谓词实现为可注入形式(`OS.is_debug_build()` 之外引入 feature 标签闸,例 `sim_release`)——AC-8 的模拟以此为基础 | -| ⑤ | override 仅为运行时状态,永不回写 .tres | - -## 随机数服务(RngService) - -规则: - -1. 规则 5(随机只从 RngService 按流取):全项目玩法代码的随机数只此一家——autoload RngService 持有封闭的三条具名流(下表),流集合封闭、只含具名消费者;要新增随机流(含 B1 若需结算随机)必须改代码走增流通道并通过 P1 支柱评审(随机须有界、可见或可推理);玩法代码禁止 `randomize()` 或自建 RandomNumberGenerator。master seed 由 C2 在冒险开始时设定——同一冒险内相同决策序列必然相同战斗结果。 - 举证:种子派生公式与黄金向量见本节「R2 流种子派生」;依据 = B4 契约源〔AC-1〕· R2 黄金向量。 - -### 封闭流与取数入口 - -| 流 | 消费者 | scope 取号事件 | -|---|---|---| -| board_gen | A1 布雷 | 每次生成新扫雷图(A1 换图时) | -| reward_roll | B4 掉落 | 每次 board install 批(格奖励批 + 清图奖励批)——B4 AC-1 为契约源 | -| encounter | B1 战斗实例化 | 每场战斗实例化恰一 scope(begin_battle 实例化期,扫雷开始前——unit_count 区间均匀骰,挖掘决策域之外 P1 合规;C3 遭遇随机化批增流,registry 已登记) | - -新增流 = 增流通道:改代码 + P1 支柱评审(随机须有界、可见或可推理)。 - -| 取数入口 | 给谁用 | 行为 | -|---|---|---| -| `open_stream(stream) -> RandomNumberGenerator` | 玩法代码(有状态流门面) | 每调用一次 = 一次 scope 取号:该流计数器 +1 → 派生 → 返回已播种实例;一个 scope 事件内所有取数共用该实例 | -| `derive_at(stream, scope)` | 测试/预览(纯函数) | 不推计数器——预览取数不污染正式序列(杜绝预览类取数的平衡 Heisenbug) | - -### R2 流种子派生(stream_seed_derivation) - -**结论**:纯派生函数——同一冒险内(master_seed 固定)同流各 scope 种子互不碰撞;同输入恒同输出;跨 Godot 版本恒定(不用运行时 `hash()`——其跨版本稳定性无承诺);输出 ∈ [0, 2^63)。跨 master_seed 的全局单射不做声明(数学上由鸽笼原理排除)。Output Range:[0, 2^63)。 - -``` -derive_at(stream, scope) = ( SALT_s XOR wrap64(master_seed + scope × GOLDEN_RATIO) ) AND 0x7FFFFFFFFFFFFFFF -wrap64 = GDScript int(64 位二补数)自然回绕 = MOD 2^64 -``` - -#### 实现级规约(必须逐条遵守,否则黄金向量失配) - -| 规约 | 要点 | -|---|---| -| wrap64 | GDScript int(64 位二补数)的自然回绕 = MOD 2^64;禁止 float 中间量(53 位尾数必丢精度)、禁止对中间量使用 `%`(带符号取余语义易误用)、禁止"主动修复溢出"(中间积本就越界——乘数 GOLDEN_RATIO = 0x9E3779B97F4A7C15 > 2^63,scope=1 即回绕,这是设计依赖的语义,不是缺陷) | -| 常量书写 | 三个常量(盐×2 + 乘数)均 ≥2^63,GDScript 十六进制字面量按二补数解析为负——统一用分段表达式书写(例 `(0x9E3779B9 << 32) \| 0x7F4A7C15`,显式括号、不依赖优先级记忆),禁止直接书写 ≥2^63 的完整字面量;注意 GDScript 的 `^` 是按位 XOR | -| 输出掩码 | 经 AND 掩码保证非负(∈ [0, 2^63))后再赋 `RandomNumberGenerator.seed` | - -**Variables:** - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| SALT_s | int64 | 编译期常量 | board_gen=0xA0761D6478BD642F · reward_roll=0xE7037ED1A0B428DB · encounter=0x8EBC6AF09C88C6E3(互异奇常数,均 ≠ 乘数) | -| master_seed | int64 | [0, 2^63) | 冒险主种子;`set_master_seed()` 对负输入 abs() 归一化并 warning;恰为 INT64_MIN → 致命(abs 在 int64 对 INT64_MIN 恒等回绕,实测与 0 在全流种子逐一相等——别名机理是输出掩码抹掉 bit 63,掩码本身是规约的一部分);仅许全流计数器全零时调用(冒险中途重播种会静默清零计数器,击穿同冒险无碰撞前提与 D3 快照语义 → debug 断言) | -| scope | int64 | ≥0 | 派生入参;有状态门面的取号值(每流独立计数器:set_master_seed() 时归零,每次 `open_stream` +1,永不重置、不随关卡/图序重置——否则不同关卡的同序号图会得到相同种子);负 scope → debug 断言中止(`derive_at` 是预览工具入口,静默负值会与 scope+2^63 经输出掩码别名) | - -**黄金向量(AC-3 的常量依据,经独立复算验证):** - -| 流 | master_seed | scope | stream_seed | -|---|---|---|---| -| board_gen | 42 | 0 | 2339089373825164293 | -| board_gen | 42 | 1 | 4485977604321908752 | -| board_gen | 42 | 2 | 2024629813010603131 | -| board_gen | 42 | 3 | 8849696722413293638 | -| reward_roll | 42 | 0 | 7422916049646135537 | -| encounter | 42 | 0 | 1061841193803499209 | - -- Example:同流同 scope 重复调用 `derive_at` 恒等(纯函数);同帧对同一流连续 `open_stream` 两次 → 计数器各 +1,得两个互异且顺序确定的种子。 - -### RNG 生命周期与快照 - -- RNG 生命周期:进程启动 → 流待命(未播种时取数即致命)→ 冒险开始设定 master_seed → 每次具名 scope 事件派生种子 → 冒险结束保留供复盘。 -- 快照 = master_seed + 各流 scope 计数器(仅记录计数器、缺 master_seed 不足以恢复序列——进程重启会从种子序列起点重放;见 D3 接口)。 -- 快照切出须发生在无在飞 `open_stream` 实例时(scope 事件边界之外):门面实例作用域限定于单次 scope 事件、消费者不得跨事件持有——在飞实例的内部取数进度不入快照,违反则续玩/复盘与实况分叉(AC-15 失效),该前提由 D3 消费侧遵守。 - -## 难度行解析(R1 difficulty_row_resolution) - -**结论**:resolve 恒返回已有行——进度键 floor 解析、实体键精确匹配;不存在 default 行兜底、不存在 clamp 外推;非精确命中记 warning(四元组去重);请求越域在解析前置守卫致命。Output Range:行资源必有值(前置条件由校验保证);极端输入(超表大关卡号)命中最大已有行。 - -``` -row = resolve(table, level_index, node_depth) (ConfigDB 公开解析方法,table 经类型化属性取得) -前置守卫:level_index < 1 ∨ node_depth < 0 → 规则 6 致命(请求越域,不进解析) -L* = max{ lv ∈ LevelKeys(table) | lv ≤ level_index };空集(请求低于表最小键,向上解析)→ L* = min LevelKeys(table) -D* = max{ dp ∈ DepthKeys(L*) | dp ≤ node_depth };空集 → D* = min DepthKeys(L*) -``` - -**Variables:** - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| level_index | int | ≥1 | 当前关卡序号(1 起);越域 → 致命 | -| node_depth | int | ≥0 | 节点深度(0=关卡入口);越域 → 致命 | -| L* / D* | int | 表内键 | 命中行键 | - -- 无兜底 / 无外推的前置:表非空、每个 level 至少 1 行、每个 level 含 depth-0 锚行是规则 6 校验前置;超表成长外推是 C3 owner 公式的职责,D2 只解析到最近已有行。 -- warning 定位为开发期异常信号(防刷屏去重是刻意的),不是难度审计工具——离线审计由曲线导出工具承担(headless 脚本导出 resolve(level 1..N × depth 0..M) 矩阵供 diff,登记为 C3 期交付物)。 -- Example:表含行 (1,0)(1,4)(2,0)(2,6)——`resolve(3,3)` → L*=2、D*=0 → 返回 (2,0) 行,warning 一条(missing_type=both);`resolve(1,4)` → 精确命中零 warning;`resolve(99,99)` → 命中 (2,6),missing_type=both(与前者去重键不同,各自一条)。 -- 去重键 = (table_id, missing_type, L*, D*) 四元组,内容含请求 (level_index, node_depth)、解析结果 (L*, D*)、缺失类型;去重注册表随每次 `load_tables()` 或 `reset_diagnostics()` 清空。 - -### missing_type(R1 warning 分类枚举) - -| 值 | 判定 | -|---|---| -| base_ceil | level 分量向上解析(请求低于表最小键)——恒记 base_ceil(depth 分量缺失与否只写入 warning 内容,不改类型) | -| level_floor / depth_floor | 单维向下解析 | -| both | level_floor 与 depth_floor 同时发生 | - -- depth 分量只有精确命中或向下 floor 两种情形(EC15 锚行保证每个 level 含 depth-0,永不 ceil);AC-5 各用例的 missing_type 均由本规则推导。 - -设计意图:解析永不发明数据——floor 到已有行并留 warning,外推归 C3 owner 公式。 - -## 依赖与输出 - -**上游(hard)**:无——Foundation 层,D2 不依赖任何系统;master_seed 由 C2 冒险开始时设定。 - -| 方向 | 系统 | 性质 | 接口要点 | -|---|---|---|---| -| 下游 | 全部其他 19 系统 | hard(规则 1) | ConfigDB 类型化读取;禁止其他取数路径(A2 经 A3 表间接承载参数) | -| 下游 | A1 | hard | BoardGenTable 回填(首个进度键表)+ VariationTable schema(biome/tag 字段)+ `board_gen` 流(换图时取号) | -| 下游 | A3 | hard | ActionEconomyTable schema 回填 | -| 下游 | A4 | hard | VariationTable 回填 | -| 下游 | B2 | hard | EnemyTable 回填(十字段 + 三敌种行 + 每行集恰一敌种校验)+ HeroTable 新增(接口漂移回写) | -| 下游 | B3 | hard | StatusEffectTable 回填 | -| 下游 | B4 | hard | RewardTable 回填(九字段 + 跨字段校验族 + 默认根行集,use_timing 承重 MVP 单值)+ RewardConfigTable 新增(单行全局)+ `reward_roll` 流(scope = 每次 board install 批——格奖励批 + 清图奖励批,B4 规则 2 接口漂移) | -| 下游 | B1 | hard | SettlementTable 回填(可回放步骤流的数据前提)+ debug 热重载门标志 `set_reload_gate()`(战斗开始置位 / 结束复位,仅 debug 构建)+ `encounter` 流(战斗实例化期取号恰一 scope——unit_count 区间骰,C3 遭遇随机化批增流) | -| 下游 | C2 / C3 | hard | `RngService.set_master_seed()` + DifficultyTable 行解析 + 曲线导出工具交付物 | -| 下游 | D3 | hard | `SCHEMA_VERSION` + 存档内 master_seed + 各流 scope 计数器快照(续玩/复盘;含只读计数器接口,快照须在无在飞实例时切出) | -| 下游 | A5 / C4 | hard(垂直切片 / Alpha) | AuxItemTable 回填(A5 定稿登记——原 HelperItemTable 占位更名转正;counter_item_ids 表值回填与悬空校验激活随 D2×② 对侧批)/ MetaTable 回填 | -| 下游 | D1 / D4 / D5 / D6 | soft | 如需参数表再增 schema(现无占位);display_name 本地化归 D6 | -| 外发 | —— | —— | 不订阅任何玩法事件;仅 debug 构建发 `config_reloaded`(D1 调试用) | - -- 数据读取类事实依赖不逐条列边(完整清单以本表为准);A2 无直接依赖(只外发事件,参数经 A3 表承载),与 systems-index 的 A2 回边规则一致。 -- 接口漂移修订规则:owner GDD 定稿时可修改占位 schema 类(schema 与表同仓),但必须回写本 GDD 表清单与 `design/registry/entities.yaml`,并在本文件版本历史登记修订;回执登记粒度 = 受影响字段/枚举/流——逐表 diff schema 目录(schema 目录 + 逐表字段行 + MVP 内容行 + 依赖表),禁按"对侧 GDD"粒度整批登记;占位参考值定稿时必须删除本 GDD 调参表清单中的对应条目(值的事实登记归 owner GDD 与 registry)。 -- 双向一致性已与 systems-index 依赖分层表核对一致(核对明细见 analysis 附录);已知待定:C3 是否消费 B1 输出——见索引门禁增补记录,归 C3 GDD 定稿,不影响 D2。 - -### 登记与对账义务(在案项——已闭环项见 analysis 附录) - -| 编号 | 内容 | 对侧 | 状态 | -|---|---|---|---| -| 4 | counter_item_ids 悬空引用(D2 首个引用型字段)——MVP 不校验,首个道具 id 回填时补校验 + 条件性夹具 | A5 | 条件性(未激活) | -| 5 | EnemyTable MVP 行值(goblin 18HP / 4ATK 等)溯源补登(原型 REPORT,出处待查) | B2 / C3 | 待补 | -| 6 | HeroTable max_hp MVP 值溯源补登(出处待查) | B2 / C3 | 待补 | -| 7 | 胜场成长机制去留(+25% HP / +1 ATK——反雪球问题) | C3 | 待裁决 | -| 8 | 曲线导出工具(headless 导出 resolve 矩阵供 diff)——R1 审计的离线载体 | C3 | C3 期交付物(排期倒挂注意见 analysis 开放问题 #5) | -| 9 | 规则 5 对全项目玩法代码的随机扫描 | Technical Setup | 项目级 CI 项 | -| 10 | release 构建致命表现验证(引擎默认错误路径实际行为) | 首次 release 导出 | deferred(AC-18 checklist) | -| 11 | 战斗级可回放集成测试(同 master_seed 同动作序列 → 步骤流逐行相同) | B1 | deferred(AC-15) | - -## P0 最小闭环 - -1. D2 交付全部 schema 类与占位表(含键结构)——先有格子。 -2. owner 系统 GDD 按设计顺序回填数值(十张已定稿 + 两张占位)。 -3. 进程启动:`ConfigDB.load_tables()` 逐一加载 + schema `validate()`,经校验双通道。 -4. 全部通过 → Ready:19 系统经类型化属性读数,无第二取数路径。 -5. C2 冒险开始 `set_master_seed()`;三条封闭流按各自 scope 事件取号。 -6. debug 构建热重载即改即验(战斗中被门拒绝,结束后手动再触发)。 -7. `godot --headless --script` 冒烟 `quit(0)`——加载、校验、取数、派生全链路绿。 - -## P1 / P2 后置 - -| 优先级 | 内容 | 后置原因 | -|---|---|---| -| P1 | 战斗级可回放集成测试(同 master_seed 同动作序列 → 步骤流逐行相同,AC-15) | D2 阶段无战斗载体,deferred→B1 | -| P1 | 难度曲线导出工具(headless 导出 resolve 矩阵供 diff——R1 审计的离线载体) | C3 期交付物;排期倒挂见 analysis 开放问题 #5 | -| P2 | release 构建致命表现 + override 结构不存在验证(AC-18) | deferred→首次 release 导出 checklist | -| P2 | 进度键表 override 行寻址语法(如 `difficulty.(2,0).hp`) | v1 仅支持单行全局表字段,登记为后续扩展 | -| P2 | 编辑器内表文件热重载自动化 | 低优先、未指派(analysis 开放问题 #2) | -| P2 | gdUnit4 引入与冒烟用例迁移 | Technical Setup 阶段裁决(analysis 开放问题 #1) | - -## 呈现与 UI 面 - -| 项 | 要点 | -|---|---| -| 玩家 UI | 无——MVP 无面向玩家的 UI;debug override 与夹具注入均经 Godot 编辑器 / 命令行参数设置(`--data-root=`,仅 debug),不做自定义面板 | -| 校验失败呈现 | editor / CI 输出控制台(错误清单格式见 AC-1);release 构建走引擎默认错误路径(实际表现验证 deferred→首次导出 checklist) | -| 开发侧可视化 | Godot 编辑器 Resource inspector(自带)+ 校验错误控制台输出 | -| 音频 | 无需求(纯数据层,无直接表现面) | - -## 调参表 - -### D2 自身 knobs(元参数) - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| floor 解析策略 | floor + warning(无外推) | —— | 引入外推/静默会掩盖 C3 难度断档 | -| rng_stream_names | 封闭 3 流(board_gen / reward_roll / encounter) | 增流需改代码 + P1 评审(有意设卡) | 流复用破坏可复现隔离 | -| debug_override_enabled | false(仅 debug 构建) | 污染测试基线 | —— | -| 表路径清单 | data/tables/ 固定(debug 注入根除外) | —— | 散装路径破坏单点访问 | -| depth-0 锚行校验 | 写死开(非 knob,规则 6) | —— | ——(重议须走本 GDD 显式修订,EC15) | - -- Knob 交互:floor 策略与 C3 的难度语义共享,改动需 C3 GDD 知情;校验严格度不设 knob(fatal 写死——放行带病数值会使 CI 冒烟失去意义)。 -- 未决占位与溯源义务(provisional——owner 定稿前不视为平衡事实;定稿后删除对应条目,值的事实登记归 owner GDD 与 registry):EnemyTable 行值溯源(义务 #5)· HeroTable max_hp 溯源(义务 #6)· 胜场成长机制去留(义务 #7)——见登记与对账义务表;已定稿占位参考值(标中旗 / 清图奖励 / 状态四行 / 奖励池等)已随各 owner 定稿清退出本清单。 - -### 表 schema 逐表字段行(D2 核心资产——字段全集以各 owner GDD Schema 节与 registry 为准) - -#### ActionEconomyTable(单行全局 · A3 回填 ✓) - -| 字段 | knob | 说明 | -|---|---|---| -| ap_per_round | ✓ | 每轮行动点 | -| dig_ap_cost | ✓ | 挖掘成本 | -| flag_place_ap_cost | ✓ | 插旗成本 | -| flag_pull_ap_cost | ✓ | 拔旗成本 | -| rap_refresh_cost | ✓ | RAP 刷新门槛 | -| move_ap_cost | ✗ 冻结 | 移动成本 | -| chain_ap_cost | ✗ 冻结 | 连锁展开成本 | -| 跨字段校验 | — | 任一动作成本 ≤ ap_per_round(违规加载期致命,条件性夹具登记) | - -#### VariationTable(按 variant_id · A4 回填 ✓) - -| 字段 | 类型 / 域 | knob | 说明 | -|---|---|---|---| -| variant_id | String 主键唯一 | — | 行键 | -| display_name | String | — | 本地化归 D6 | -| unlock_level | int [1,999] | ✓ | 进度语义承载列(规则 4 豁免载体) | -| scope | region / global | — | global 预留 C3 | -| info_mask | none / hide_numbers | — | 雾行 = hide_numbers | -| cell_constraint | any / safe_nonzero | — | 雾行 = safe_nonzero | -| biome_tag | StringList | ✓ | ∅=通配 | -| counter_item_ids | StringList | ✗ | A5 预留;悬空引用政策见目录表 | -| 承重规则 | — | — | 生成期布置约束:雾区仅非 0 安全格(区内无雷无 0 格,A1 生成期强制)+ 零特判原则 | - -#### StatusEffectTable(按 effect_id · B3 回填 ✓) - -| 字段 | 类型 / 域 | 说明 | -|---|---|---| -| effect_id | String 主键唯一 | 行键;引用校验已激活 | -| display_name | String | 本地化归 D6 | -| target_side | hero / enemy | 作用侧 | -| magnitude | percent ∈ [-100,100] ∧ ≠0 / flat ≥ 1 | 跨字段校验 | -| unit | percent / flat | 量纲 | -| duration_settlements | [1,99] | 持续结算次数 | -| stack_policy | stack / refresh / independent | 叠层策略 | -| max_stack | [1,16] | 仅 stack 消费 | - -#### BoardGenTable((level_index, node_depth) 首个进度键表 · A1 回填 ✓) - -| 字段 | 类型 / 域 | knob | 说明 | -|---|---|---|---| -| board_width / board_height | int [8,64] | ✓ | 板尺寸 | -| mine_density | float (0,0.5] | ✓ | 密度浮点(尺寸解耦);布雷数下限 round(d×(W×H−9)) ≥ 1 | -| inferability_target | float [0.85,1] | ✓ | P1 门槛承重参数 + 绝对锚 | -| solver_rules | single / single_subset | ✗ 冻结 single_subset | 推理定义域非调参 | -| min_safe_count | int [1,999] | ✓ | 退化板对冲 | -| max_gen_attempts | int [1,32] | ✓ | 生成-验证循环上限 | -| fog_region_count | int [0,32] | ✓ | 雾区数 | -| fog_target_ratio | float [0,1) | ✓ | ≤ min(8d, 0.25) 绝对上限 | -| board_biome | StringSet 非空 | — | 域校验致命(词表 owner 未定稿前只校验非空) | -| elite_ / boss_ 前缀 | 命名空间预留 | ✗ | 第三轴登记约定——语义归 C1/C3,本 GDD 不定义 | -| 跨字段谓词 | — | — | fog_domain_ok(F2)+ min_safe_feasible(F2b)+ cost_feasible(F2c:attempts×W×H ≤ 16384 provisional,运行期禁墙钟逃生)——加载期致命 | - -#### EnemyTable((level_index, node_depth, enemy_id) · B2 回填 ✓) - -| 字段 | 类型 / 域 | knob | 说明 | -|---|---|---|---| -| enemy_id | String(行集内主键) | — | 行集内唯一(每行集恰一敌种) | -| display_name | String | — | 本地化归 D6 | -| unit_count | int [1,3] | ✓ | 遭遇区间下界(C3 修订批——区间 [unit_count, unit_count_max] 经 B1 encounter 骰定本战实际数量;新敌种首遇节点固定不加骰) | -| unit_count_max | int [unit_count,3],可省略 | ✓ | 遭遇区间上界(缺省 = 定值,旧行零迁移——C3 修订批新增字段) | -| armor_type | enum {none, a, b},缺省 none | ✓ | 护甲类型(克制矩阵 = SettlementTable.armor_effectiveness;MVP 映射 goblin=none / bugbear=a / ogre_chief=b——护甲克制批) | -| hp | int [1,999] | ✓ | 难度修饰前基线 | -| atk | int [0,999] | ✓ | attack 行为伤害基值;0 = 纯伏击伤敌种合法 | -| heavy_multiplier | int [1,16] | ✓ | 无 heavy 拍敌种不消费(非校验项先例) | -| pattern | StringList,环长 [1,8] | — | MVP 校验域 {attack, charge, heavy}——guard/boost/hinder/summon 预留值校验拒绝 | -| advantage_per_round_cap | int [0,16] | ✓ | 默认 4 定稿(反灾难护栏);0 = 免疫伏击合法极端 | - -#### HeroTable(单行全局 · B2 回填 ✓ · 接口漂移新增) - -| 字段 | 类型 / 域 | knob | 说明 | -|---|---|---|---| -| max_hp | int [1,999] | ✓ | MVP 值 provisional(出处待查) | -| atk | int [1,999] | — | 0 = 加载拒绝(基础攻击恒存在,"0 基线 × 百分比增益恒零"死锁自 schema 层杜绝);MVP = 6 原型锚 provisional 归 C3;消费面 = 主角战斗段先手攻击 | - -#### RewardTable(按 reward_id · B4 回填 ✓) - -| 字段 | 类型 / 域 | knob | 说明 | -|---|---|---|---| -| reward_id | String 主键 | — | 行键(多行;pool_tag 分池不参与键) | -| category | buff / damage_item / heal_pack / instant_aoe / instant_heal | — | 两类交付轴:即时类 {buff, instant_aoe, instant_heal} 当场兑付不进库存 / 可选类 {damage_item, heal_pack} 入关卡域库存;预留值校验拒绝 | -| effect_id | String 可空 | — | buff 类必填(StatusEffectTable 精确引用);非 buff 恒空 | -| display_name | String 非空 | — | D1 呈现数据源,本地化归 D6(B2/B3 同库惯例) | -| power | int [0,999] | ✓ | item 类加载校验 ≥1;buff 类不消费非校验 | -| weight | int [0,999] | ✓ | 0 = 不入池 | -| pool_tag | safe_cell / active_inject / clear_default | — | clear_\ 命名空间预留拒绝;active_inject = 供给控制器注入池(可选类三行——install 期注入,非逐格 roll) | -| tier | int [1,8] | ✓ | A4 雾档约束载体 | -| use_timing | pre_settlement(MVP 单值) | — | 承重——道具使用窗口 MVP 激活,扩枚举走修订 | - -#### RewardConfigTable(单行全局 · B4 回填 ✓ · 接口漂移新增) - -| 字段 | 类型 / 域 | 默认 | 说明 | -|---|---|---|---| -| t_fog_min | int [1,8] | 2 | F2 雾档过滤门限 | -| k_dmg | int [0,999] | 0 | 0 = F5 断言关闭(现行默认——刀保底语义由供给控制器战斗首件保证取代;no_damage_row 后闸托底) | -| active_p0 | float [0,1] | 0.4 | 供给控制器注入概率初值(首件之后每张新板)——E[战斗获取] ≈ 1 标定目标,归 C3 | -| active_decay | float (0,1] | 0.5 | 注入概率指数递减 0.4→0.2→0.1→…(加难杠杆候选 0.6 随 C3 OQ7 扫描) | -| n_draft | int [1,999] | 32 | F5 草稿重 roll 上限 | -| p_min | int [1,999] | 8 | 默认根最低刀 power——K≥1 供给闸刀力下界(floor_supply_missing) | - -#### SettlementTable(单行全局 · B1 回填 ✓ · 共十二字段) - -| 字段 | 类型 / 域 | 默认 | knob | 说明 | -|---|---|---|---|---| -| equivalence_ref_damage(D_ref) | int [1,999] | 12 | ✓ | 当量参考敞口;变更触发 B1 全对照表 + 条款③⑤对账重跑(禁独立调参) | -| p_perfect | percent {100,200} | 200 | ✓ | 完美排雷清图奖励第二份兑付触发——非整数倍数乘数无运行时载体,域外加载致命 | -| segment_order | StringList | 拍板段序 | ✗ 结构冻结 | 恒等拍板段序校验,违例致命(防实现乱序静默漂移) | -| source_label_map | Dictionary source_class→文案键 | 封闭枚举全覆盖 | ✗ 结构冻结 | P2 归因呈现映射;键集 = B3 source_class ∪ {道具/判定扩展, enemy_action, flag_miss, hero_attack};新增键 = 接口漂移 | -| effect_pool_map | Dictionary effect_id→{hero_offense, hero_defense, enemy_output, flat_attach} | 四键定稿映射 | ✗ 结构冻结 | 效果语义映射;键 ⊆ StatusEffectTable 活行集,悬空加载期致命;新 effect_id 上线须随批登记 | -| pool_clamp_lo | int pp | −100 | ✗ 结构冻结 | percent 池地板域下界(乘数域随之 [0,2]) | -| pool_clamp_hi | int pp | +100 | ✗ 结构冻结 | percent 池地板域上界 | -| round_direction | enum {floor} | floor | ✗ 结构冻结 | 单一取整规则 | -| damage_a_per_cell | int ≥ 0 | 1 | ✓ | 伤害A 开格充能/格(护甲克制批——充能与结算归 B1 战斗段〔F6〕,C3 投值) | -| damage_a_cap | int ≥ 0 | 8 | ✓ | 伤害A 单轮充能封顶(0 = 不封顶——防连锁轮失控) | -| damage_b_per_flag | int ≥ 0 | 2 | ✓ | 伤害B 标雷充能/首次标中雷(每雷实例一次去重) | -| armor_effectiveness | Dictionary {base, dmg_a, dmg_b} × {none, a, b} | 特化 ×150 / 无甲 ×100 / 对位 ×50 | 键集 ✗ 结构冻结 / 数值 ✓ | 伤害类型 × 护甲克制矩阵——主角攻击三分量(基础/伤害A/伤害B)各自查表后 floor 相加;敌种甲型映射归 EnemyTable.armor_type | - -## 验收标准 - -### 测试口径 - -| 口径 | 要点 | -|---|---| -| 测试载体 | `--headless --script` 冒烟框架(脚本 extends SceneTree 以获得 quit(code);该模式 autoload 须由脚本显式实例化——AC-1 前提声明;设计顺序 #1 时无主场景可依赖) | -| 覆盖 | 8/8 Core Rules;规则 6 加载期校验错误类别全部有夹具(悬空引用为条件性夹具,已随 B4 首引激活);运行期致命(请求越域 EC14、未播种 EC7)由 AC-5b / AC-17 行为级覆盖;R1 / R2 全部边界 | -| 致命类断言协议 | 致命用例(AC-2b、AC-5b 游戏通道半、AC-6 后半、AC-11、AC-17)各为独立进程调用,冒烟 runner 清单逐条登记"调用 → 期望退出码";单进程内只做测试通道收集断言 | -| warning 断言 | 一律经诊断收集器(见校验双通道),每用例先 `reset_diagnostics()` | -| 人工与延迟 | AC-14 人工 · AC-15 deferred→B1 · AC-18 deferred→首次 release 导出 | - -### AC 清单(Given-When-Then,编号不变) - -| AC | Given | When | Then | 覆盖 | -|---|---|---|---|---| -| AC-1 | 干净检出 | `godot --headless --script tests/smoke_data.gd` | 核心规则 #3 表清单的全部表(以清单为准,不写死数量)加载且 data/tables/ 无清单外 .tres;脚本成功 `quit(0)`,任一失败 `quit(1)` 并输出错误清单(表路径 + 字段 + 错误类别) | 规则 3/6 | -| AC-2 | tests/fixtures/ 夹具集(越界字段 / 文件缺失 / 空表 / 某 level 无行 / 缺 depth-0 锚行 / 重复键 / 权重和 ≤0 各一;悬空引用为条件性夹具——已随 B4 首引激活) | 冒烟脚本经 `--data-root` 注入逐夹具运行 `load_tables(root, collect_only=true)`(测试通道,单进程逐个断言) | 每个夹具的错误清单含对应类别(EC1 / EC2 / EC3 / EC15 / EC10 及重复键类别) | 规则 6 / EC | -| AC-2b | 任一致命夹具经注入根加载 | 冒烟 runner 以独立 headless 进程执行游戏通道 `load_tables(root, collect_only=false)`(`--script` 协议,脚本显式实例化 autoload;不依赖主场景) | 进程非 0 退出且错误清单完整——验证"游戏内真的会死"而非仅"校验器能发现" | 规则 6 游戏通道 | -| AC-3 | R2 黄金向量表(6 常量) | 纯函数 `derive_at` 复算(board_gen master=42 scope 0–3、reward_roll master=42 scope=0、encounter master=42 scope=0);同流同 scope 重复调用 | 逐个等于向量表常量;重复调用恒等(纯函数无副作用) | R2 | -| AC-4 | master_seed=42 | `open_stream("board_gen")` 连续取号 ≥100 次(跨模拟"关卡切换");同期调用任意 `reload()` | 公开只读计数器单调不重置(各关同序号图种子互异);计数器不变(状态线独立) | R2 / 规则 5 / 状态机表 | -| AC-5 | 真实 DifficultyTable schema 构造的表含行 (1,0)(1,4)(2,0)(2,6)(每用例先 `reset_diagnostics()`) | 依次 `resolve(3,3)` → `resolve(3,4)` → `resolve(1,4)` → `resolve(99,99)`;单行表 {(2,0)} 上 `resolve(1,5)` | (3,3):返回 (2,0) 行且诊断收集器 warning 恰一条(missing_type=both,含请求/结果/类型);(3,4):warning 不新增(四元组去重键相同);(1,4):精确命中且零 warning;(99,99):命中 (2,6) 且新增恰一条(去重键含 D*,与首条不同);单行表:命中 (2,0) 且 missing_type=base_ceil(由 R1 分类规则推导:level 分量向上解析恒记 base_ceil) | R1 | -| AC-5b | 真实 DifficultyTable schema 构造的合法表 | `resolve(0, 3)`(level_index < 1)与 `resolve(2, -1)`(node_depth < 0);同用例经游戏通道独立进程复跑 | 测试通道诊断清单各含"请求越域"致命类别一条且不进入解析(EC14 / R1 前置守卫);独立进程非 0 退出 | R1 / EC14 | -| AC-6 | master_seed=-7;master_seed=INT64_MIN;`derive_at` 传入负 scope | `set_master_seed()`;`set_master_seed()`;`derive_at` | 归一化为 7 + 诊断收集器 warning 一条,后续种子 ∈ [0, 2^63)(EC6);INT64_MIN 致命(非 warning;独立进程断言退出码非 0);负 scope debug 断言中止(负值经输出掩码与 scope+2^63 别名) | R2 / EC6 | -| AC-7 | debug 构建 override{"action_economy.ap_per_round"=12}(域内值——A3 schema 域 [1,32];越域 override 会被 R3③ 忽略,出域示例会使本 AC 假失败) | 经 ConfigDB 读取;override key 为未知路径、类型或范围与 schema 不符;`reload()` 后 | effective=12;诊断收集器 warning + 忽略该条;.tres 文件内容不变(R3 边界①③⑤) | R3 | -| AC-8 | 非 debug 谓词模拟(feature 标签) | `_has_override(key)` | 恒 false——本条仅证明门存在性;"release 不加载 override 源"的结构保证验证 deferred→首次 release 导出 checklist | R3④ | -| AC-9 | D2 文件集(data/schemas、ConfigDB、RngService、tests) | 静态扫描(模式覆盖 `load(`、`preload(`、`ResourceLoader.load`、`"res://data/" +` 动态拼接;`res://tests/fixtures/` 前缀豁免——不在 `res://data/` 扫描域) | 无 `randomize()` 调用、无 ConfigDB 之外的 data 表加载(规则 2/5);规则 5 对全项目玩法代码的扫描登记为项目级 CI 项(义务 #9) | 规则 2/5 | -| AC-10 | D2 文件集 | 静态扫描 + AC-1 headless 实跑 | 无 `extends Control/Node2D`、无 `.tscn` preload,且 AC-1 headless 实跑通过——两项合成判定规则 7(扫描是启发式,硬证据是 headless 实跑) | 规则 7 | -| AC-11 | RngService(debug 构建) | 请求未知名流或重复注册流名 | debug 断言中止(EC12;独立进程退出码非 0) | 规则 5 / EC12 | -| AC-12 | 同帧对同一流 | 连续两次 `open_stream` | 两个互异且顺序确定的种子(EC13) | 规则 5 / EC13 | -| AC-13 | 冒烟脚本运行 | 反射断言 | `SCHEMA_VERSION` 常量存在且 ConfigDB 可读;全部 schema 携带版本字段;进度类表(BoardGen/Enemy/Difficulty)暴露 (level_index, node_depth[, enemy_id]) 键字段;DifficultyTable schema 暴露 `elite_` / `boss_` 前缀预留字段("高版本拒读"路径 deferred→D3) | 规则 8 + 规则 4 键契约 + 第三维命名空间 | -| AC-14(人工) | 每次回填定稿 | 验收人复核 | 规则 1 数值字面量禁令成立:启发式扫描(warning 级,误报难免)+ 人工复核三要素——验收人 = owner GDD 回填定稿评审 + 里程碑 gate-check;时机 = 每次回填定稿;证据 = 评审记录 / gate-check 登记 | 规则 1 | -| AC-15(deferred→B1) | 同 master_seed 同动作序列 | B1 集成测试重放 | 结算步骤流逐行相同(D2 阶段无战斗载体) | 规则 5 可回放 | -| AC-16 | debug 构建且 B1 侧经 `set_reload_gate(true)` 置位(模拟战斗中);门未置位;reload 后新表校验失败 | `reload()` | 置位:返回 false、ConfigDB 值不变、不发 `config_reloaded`;未置位:返回 true 且新值经类型化属性可读且 `config_reloaded` 发出恰一次(仅 debug 构建);校验失败:旧表保留、状态停留 Ready(EC16) | 状态机表 / EC16 / 规则 6 | -| AC-17 | 未设 master_seed | `open_stream` 或 `derive_at` | push_error + 冒烟通道断言中止路径(quit 非 0)(EC7) | 规则 6 / EC7 | -| AC-18(deferred→首次 release 导出) | release 模板构建 | 致命校验错误发生;查找 override 源 | 表现符合"引擎默认错误路径"预期;override 结构性不存在(R3 边界④、校验双通道 release 侧) | 规则 6 / R3④ | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v2 | 2026-09-14 | 两件套格式迁移:按模板 v2 骨架重排——头部收敛为状态/版本/一句话/推演件指针;设计推演(公式推导论证、数值锚定论证、候选取舍、体验锚点论证、已裁决争议)移至 `design/gdd/analysis/d2-data-config.md`;评审元数据与已闭环对账义务(#1/#2/#3/#12)入 analysis 附录;规则、数值、枚举、EC、AC、OQ 编号与内容零变更 | -| 跨评审 D2 漂移批 | 2026-09-14 | /review-all-gdds 🔴-2 五处补漂移修订批(X-8 遗漏项补登,registry 同批):**RNG 流封闭清单 2→3 流**(encounter——消费者 B1,scope = 每场战斗实例化恰一 scope;Core Rule 5 / 取数链路 / 盐值 0x8EBC6AF09C88C6E3 / 黄金向量 +1 常量〔AC-3 五→六〕/ set_master_seed 全流零计数前提)· **pool_tag 枚举增 active_inject** · **RewardConfigTable +2 字段**(active_p0=0.4 / active_decay=0.5)+ k_dmg 默认 1→0 且"C3 禁区默认值"条款解除 · **默认根行集 clear_knife→clear_blast**(注入池占比注记替代 75/25)· **HelperItemTable 更名 AuxItemTable**(A5 定稿转正,schema 目录九→十张)· X-8 补登:SettlementTable 逐表字段行补 4 字段(共十二字段)、EnemyTable MVP 行三敌种登记 · 接口漂移修订规则增"回执按受影响字段/枚举粒度逐表 diff schema 目录"流程纪律;核心规则表增依据列(lint R8 引用列迁移) | -| C3 修订批回写 | 2026-09-14 | /design-review C3 修订批(X-8 回执,registry 同批):**EnemyTable schema +2 字段**(unit_count_max——遭遇区间上界 / armor_type——护甲类型枚举 {none,a,b},克制矩阵挂 SettlementTable)· **SettlementTable +4 字段**(damage_a_per_cell=1 / damage_a_cap=8 / damage_b_per_flag=2 / armor_effectiveness 克制矩阵——护甲克制批转正,机制与结算归 B1、C3 投值)· DifficultyTable 表清单行补乘数域与 clamp 例外注记(registry 登记的组合事故例外,非 fail-fast 场景)· 敌种键更名 goblin/bugbear/ogre_chief(DND 批对齐) | -| v1.0-lean | 2026-09-13 | 格式迁移:legacy 原稿按 lean 样例重排——修订注记出正文收敛至本表;核心规则 / 枚举 / 边界 / AC 转表格;加载校验与热重载链路转字符画;九张表 schema 逐表字段行入 Tuning Knobs;义务与夹具登记收敛为登记与对账义务表。正文残留旧称按 registry 与各 owner 成稿写现行值:SettlementTable 八字段口径(pool_clamp 拆 lo/hi)、p_perfect 载体域 {100,200}、source_label_map 键集含 hero_attack、RewardTable category 五值与默认根八行集——语义零变更 | -| 两级奖励批 + 基础攻击裁决 | 2026-09-11 | RewardTable category 三值扩为五值(即时 / 可选两类交付轴)+ 默认根行集重登记八行(原五行为集退役);RewardConfigTable p_min 默认 4→8;HeroTable atk 改域 [1,999] 且 0 = 加载拒绝(基础攻击恒存在),消费面 = 主角战斗段先手攻击 | -| B1 回填 + 评审批收编 | 2026-09-10 | SettlementTable 定稿回填(registry 原记七字段);同日评审批统一八字段口径——pool_clamp_lo_hi 拆 lo/hi 两字段、p_perfect 域 [100,999] 改载体域 {100,200}、source_label_map 键集补 enemy_action / flag_miss(hero_attack 随 B1 成稿) | -| B4 full 评审 delta | 2026-09-09 | RewardTable 增 display_name(九字段)+ 默认根行集登记 + RewardConfigTable 新增(单行全局四字段,接口漂移——B4 标量 knob 的 Rule 1 载体)+ Core Rule 5 reward_roll 语义正文补同步(每次 board install 批) | -| B4 回填定稿 | 2026-09-09 | RewardTable 八字段 + 跨字段校验族 + use_timing 占位转承重 + 首个 effect_id 引用回填激活 StatusEffectTable 悬空校验 + reward_roll scope 语义改写 + Tuning Knobs 奖励池占位条目清退 | -| B2 回填定稿 | 2026-09-09 | EnemyTable 八字段 + 双敌种行 + 每行集恰一敌种校验;HeroTable 新增(接口漂移回写) | -| A1 full 评审 delta | 2026-09-09 | BoardGenTable inferability_target 收窄 [0.85,1](P1 绝对锚)+ fog_target_ratio 绝对上限 min(8d, 0.25) + 布雷数下限 round(d×(W×H−9)) ≥ 1 + F2c 成本谓词(运行期禁墙钟逃生)+ elite_/boss_ 命名空间预留(第三轴登记约定,Boss=Dmax 行 + A1 OQ6 重审门) | -| A1 回填定稿 | 2026-09-09 | BoardGenTable 九字段 + F2/F2b 跨字段谓词 + solver_rules 冻结 + MVP 参考行(provisional,C3 调参所有权)——首个进度键表 | -| B3 回填定稿 | 2026-09-08 | StatusEffectTable schema 八字段 + 四行 MVP 内容(键 = effect_id,Rule 4 豁免注明;effect_id 悬空校验待首引激活) | -| A4 re-review delta | 2026-09-08 | VariationTable 增跨字段校验 hide_numbers⇒safe_nonzero(加载期致命,夹具 variation_mask_constraint)+ counter_item_ids knob 误标修正(非 knob) | -| A4 回填定稿 | 2026-09-08 | VariationTable 八字段 + fog 行 + Rule 4 豁免注明(registry 新条目 variation_table / variant_pool_gate) | -| A3 三轮评审 delta | 2026-09-07 | ActionEconomyTable 增跨字段 validate 规则(任一动作成本 ≤ ap_per_round,schema 类承载、违规致命、条件性夹具登记) | -| A3 RAP 结构修订 | 2026-09-07 | flags_per_round / flag_unit_cost / stop_multiplier / clear_multiplier 四字段删除(旗无上限、停手 / 清图折算乘数退役)、rap_refresh_cost 新增;AC-7 示例值域内修正(99 出域会使本 AC 假失败) | -| A3 回填定稿 | 2026-09-07 | ActionEconomyTable 字段清单交付 + 成本三字段入表 + 冻结字段(ap_per_round=8 等定稿值登记 registry) | -| 收口 | 2026-09-07 | 两轮评审 + delta 复核 5/5 PASS 后 Approved;CD-GDD-ALIGN 终裁 NEEDS REVISION → 修订落实 → 独立 delta 核对通过 | -| 原型占位值清退 | 2026-09-07 起随各 owner 定稿 | 标中旗 +5 / 面旗(量纲与语义经 A3 OQ5 重锚 → weaken 行)、清图 +10(→ B4 清图奖励插槽)、增伤 1.5× / 减伤 0.5× / 持续 2 次结算(→ StatusEffectTable 四行)、奖励池 5 类(→ RewardTable 五值)——机制与数值事实登记归 owner GDD 与 registry | diff --git a/design/archive/gdd-2026-09-14/game-concept.md b/design/archive/gdd-2026-09-14/game-concept.md deleted file mode 100644 index 9be3d4e4..00000000 --- a/design/archive/gdd-2026-09-14/game-concept.md +++ /dev/null @@ -1,157 +0,0 @@ -# 游戏概念:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike) - -> 参考《弹珠哥布林》(Peglin):两段式回合循环(小游戏 → 战斗结算)+ 道具跨循环累积(**B4 定稿口径 2026-09-09:战斗域内跨轮次跨图累积、battle_over 全清不跨战斗**——与 Peglin 跨战斗持有不同)+ Roguelike 闯关结构。(**2026-09-11 关内延续裁决改写**:库存改为关卡域——跨战斗延续、关卡末清空/折算;本注记前半作废) -> 我们的区别:小游戏层是"扫雷类推理玩法"(非物理弹珠),玩家 agency 全部前移到战斗前的排雷规划(2026-09-09 注:B4 激活轮末道具使用窗口后,agency 扩展至轮末资源决策——规划前移的主体定位不变)。 - -## 世界观与命名(定稿 2026-09-09;2026-09-12 概念层增补:隐喻换轴 + 惩罚格类型化) - -> **版本注记(2026-09-12 概念层增补,用户拍板;依据记录 `design/research/lore-nest-metaphor-2026-09-12.md` ⑤节六问)**:叙事属名换轴——雷格 = **惩罚格**(对外叙事称呼;机制名"雷/雷格"不变),惩罚格有不同类型,首发地牢类型 = **怪物巢穴**;插旗的玩家可见动词 = **控制**(类型无关;对内文档与机制协议仍为"旗/插旗");连锁展开 = **坍塌显形**;标错惩罚叙事 = **控制失败的失控反噬**(随机读作失控,重复性措辞随 A2 OQ1);宝箱呈现仅绑定可使用道具类奖励;世界观厚度 = 碎片点缀(不含前人日志)。原 2026-09-09 映射(雷 = 地牢陷阱、旗 = 探险者标记的已知陷阱)作废;"陷阱"降级为惩罚格类型词表的一员。本修订为表现层/命名层,不改变任何已锁机制语义、数值与接口(A1–B4、B1、C3 已定稿内容不受影响);惩罚格类型化的机制分化(陷阱→直接扣血、标中陷阱→怪物受伤害、岩浆/冰冻化身等)为**已登记的未来机制侧方向**(与现行"开雷→敌方优势非直接伤害"锁定规则的取舍归 A1/A2 修订裁决),不在本表承诺。 - -**产品名:Dungeon Sweeper**——命名取 minesweeper → dungeon sweeper 的双关:玩家不只是"扫雷者",更是"清扫地牢的人"(清巢者——逐层肃清巢穴侵染、夺回地牢)。"扫雷 × 自动战斗 闯关 Roguelike"保留为品类描述,用作各文档副标题。 - -**背景一句话**:玩家操纵一名地牢探险者,逐层下探一座被怪物巢穴侵染的古代地牢;每一层地牢就是一张"雷图"——惩罚格密布的古老地砖阵,探险者凭数字提示感知惩罚格方位,控制巢穴、搜刮前人遗落物,才能安全下探更深的层。 - -机制 ↔ 地牢隐喻映射(表现层包装,不改变任何已锁机制语义,A1–B3 已定稿数值/接口不受影响): - -| 玩法元素 | 地牢隐喻 | -|---|---| -| 扫雷图 | 地牢的一层(一间被巢穴侵染的厅室;清图 = 肃清本间厅室) | -| 雷 | 惩罚格(叙事属名;含不同类型,首发类型 = 怪物巢穴——惊动即怪物倾巢而出占得先机:伏击/增益,P3 风险同源;巢已空、残址可通行。陷阱/岩浆/冰冻等类型及其机制分化 = 未来方向归机制侧) | -| 旗 | 对惩罚格的**控制**(玩家可见动词,类型无关;对内仍为"旗/插旗")——标中 → 巢穴废置、巢主失庇护(怪物 debuff);标错 → 控制失败、反噬流向不可控(措辞细则随 A2 OQ1);"封印/镇/反制"为类型风味词;视觉形态换皮归 art-bible | -| 小人 | 地牢探险者 | -| 清图 | 本层探明、搜刮前人遗落物完毕(清图奖励),下探更深 | -| 关卡推进 | 不断下探更险的层(P4 支柱) | - -- 首发 biome = 地牢(与 A1 BoardGenTable 参考行占位值 `{"dungeon"}` 一致;biome 词表定稿权仍在 B4/C1+AD,此处仅为方向背书) - -## 目标受众(定稿 2026-09-06) - -- **核心受众**:策略推理玩家 × Roguelike 构建玩家的交集——喜欢杀戮尖塔/小丑牌的构筑决策,喜欢扫雷/数独的纯逻辑掌控感 -- **次级受众**:Peglin 玩家中觉得"弹珠太看脸"的群体;怀旧扫雷玩家中寻找进化的群体 -- **平台**:PC(Steam)先行;回合逻辑玩法,对配置无要求 -- **单局预期**:一场冒险 20–40 分钟,单关卡 5–10 分钟——碎片时间可完成一场战斗 - -## 视觉身份锚(Visual Identity Anchor,定稿 2026-09-06) - -**一句话视觉规则:地形是氛围,数字是主角——一切视觉服务"信息可读"而非"场景华丽"。** - -支撑原则: -1. **数字可读性硬指标优先于氛围**:暗色地牢底色上的数字必须达到高对比(具体色值在 art-bible 定),任何纹理不得干扰数字辨识 -2. **变异格形状+颜色双通道**:迷雾/岩浆/冰冻等变异不能只靠色相区分(色弱可用性),必须绑定图标或形状冗余 -3. **绘制优先级固定**:数字 > 小人标记 > 旗子 > 变异纹理 > 底色——小人与旗不得遮挡数字(小人所在格用边框高亮而非覆盖文本) -4. **调色板交换优先于新增资产**:关卡/biome 换皮优先做色板变体,控制个人开发资产成本;A1 棋盘生成须预留 biome/tag 数据字段 -5. **格子 = 地牢地砖(2026-09-09 用户定稿)**:扫雷格子的美术基底做成地牢一格一格的石砖/地砖样式(候选表现:未开 = 覆尘完整地砖、已开 = 碎裂/裸露地面、雷 = 被惊动的巢穴/崩塌的巢址【2026-09-12 隐喻换轴增补:原"触发的陷阱机关"为旧称;候选词与已定的"坍塌显形"连锁叙事对齐】);具体形态由"格子样张测试"定稿,样张仍以数字可读性为第一验收项(早期风险第 1 条不变);与原则 4 衔接——不同 biome = 同款地砖的不同色板 - -早期风险登记(详见 art-bible 任务): -- 扫雷数字可读性 × 地牢暗色氛围的冲突 → 需一次格子样张测试定风格 -- 格子信息密度:小人/旗/数字/变异同格叠加 → 按上述优先级规则处理;小人移动路径预览的表现归属在 D1 GDD 解决 -- **双舞台资产管线陷阱**:战斗发生在棋盘上还是独立场景,是 B5 最大的成本变量 → 必须在 B5 GDD 前的"战斗表现美术测试"(一屏样张)中锁定 - -## 术语层级(定稿 2026-09-06 · 2026-09-14 增补行动层) - -| 术语 | 定义 | -|---|---| -| **存档** | 元进度。所有"冒险"都在某个存档内进行。存档内可用代币解锁天赋等永久提升 | -| **冒险** | 开启进入的一次完整游戏(run)。包含多个"关卡"。死亡则冒险结束(Roguelike) | -| **关卡** | 冒险内的一个大节点。有一个关底 Boss。完成关卡 → 获得"冒险"内大奖励 + 解锁天赋用的"代币" | -| **战斗** | 关卡内移动时碰到非奖励点触发。一次完整的战斗遭遇,包含若干个"轮次"和若干张"扫雷图" | -| **轮次** | 战斗内的原子回合单位。玩家用本轮 AP 在扫雷图上挖掘 → 轮次结束 → 自动战斗结算。敌人未全灭且主角存活 → 下一轮次 | -| **扫雷图** | 跨轮次延续的棋盘状态。AP 用完但未开完 → 下一轮次继续同一张图(AP 重置,棋盘状态保留)。全部安全格开完 → 清图奖励 → 结算后换新图 | -| **行动** | 轮次内挖掘期的原子决策单位(2026-09-14 增补)。有价行动(挖 / 插旗 / 拔旗)各耗 1 AP、受每轮 AP 预算约束(现行表值 8);免费行动(移动 / 停手)不限次数。同一事件的三个视角:行动 = 玩家决策 · 意图 = 进入 A2 的数据形态(单意图帧整批提交)· 动作 = A3 计价类别(action_kind 统一价目) | - -### 对应关系(定稿) - -``` -存档 ⊃ 冒险 ⊃ 关卡 ⊃ 战斗 ⊃ { 轮次 ×N , 扫雷图 ×M } -轮次 ⊃ 行动 ×K(挖掘期) -``` - -- 战斗 : 轮次 = 1 : N —— 敌人未全灭且主角存活则继续 -- 扫雷图 : 轮次 = 1 : N —— 一张图跨越多个轮次,直到开完 -- 战斗 : 扫雷图 = 1 : M —— 每次清图后换新图,战斗内可经历多张图 -- 行动 : 轮次 = K : 1 —— 挖掘期原子决策;有价行动(挖/插旗/拔旗)各耗 1 AP、受每轮 AP 预算约束(现行表值 8),移动/停手免费不计 AP - -## 轮次流程(定稿) - -1. **挖掘阶段**:用本轮 AP 开格/标旗(棋盘为延续的旧图或刚换的新图) -2. **轮次结束**(三种方式任一触发): - - AP 用完(图未开完 → 下轮继续这张图) - - 主动停手(剩余 AP 1:1 转存 RAP 池——攒满可刷新雷图的风险退出资源,**不作战斗资源**【2026-09-07 A3 RAP 修订,原"折算战斗资源"作废】;图未开完 → 下轮继续这张图) - - 图开完 → 清图奖励(剩余 AP 作废不折算【同日修订】;下轮换新图) -3. **自动战斗结算**:每轮结束时都结算一次;开过的雷在此时兑现敌方优势 -4. **判定**:敌人全灭 → 战斗胜利;主角死亡 → 战斗失败;否则 → 下一轮次 - -## 核心循环 - -``` -存档(天赋/代币) - └─ 冒险(run,死亡即终) - └─ 关卡(节点地图移动,Boss 收尾) - └─ 战斗(碰到非奖励点触发) - └─ 轮次 ×N(敌未灭/己未亡则继续) - ├─ 挖掘期 = 行动 ×K(挖/旗 1 AP · 移动/停手免费) - └─ 扫雷图(有限 AP 挖掘) - ├─ 安全格 → 增益/道具(多为限时或一次性) - ├─ 雷 → 敌方获得优势(伏击/增益) - └─ 全部安全格点开 → 图完成 → 自动战斗结算 -``` - -## 扫雷层规则(当前共识) - -- **开格消耗 AP,连锁展开(flood fill)免费**;每轮 AP 固定(原型 v2 起 8 点,v1 的 12 点被测评为太多) -- **行动经济统一(v3,2026-09-07 A3 RAP 修订)**:插旗消耗 1 AP(**旗子上限取消**——旗为棋盘标记、数量不限,稀缺性由 AP 机会成本承载【原"每轮 4 面、每轮重置"作废】),仅限小人相邻格;拔旗移除标记、不返还 AP -- **标雷判定(v3,2026-09-07 三向效果定稿)**:轮次结算时统一判定——**标中雷 = 怪物获得 debuff(削弱)**(与"安全格→主角 buff、踩雷→怪物 buff"构成三向效果映射);一次性兑付、兑付资格以**雷格实例为键**(每雷本次战斗至多兑付一次,资格随首次兑付消费)、拔旗重插同一雷格不恢复资格、禁止逐轮重复兑付(A3 OQ5/F1 条款 2:debuff 档位锚 = 严格 > 最低档安全格 buff 当量,且以连锁放大的边际挖掘收益为对照基准——2026-09-07 三轮评审改定);标错暂无惩罚(候选惩罚:敌方伏击+1 等,待验证后决定;该惩罚兼具旗滥用定价职责,见 A3 OQ2) -- **小人控制(v2,参考 Microsoft Minesweeper Adventure 模式)**:棋盘上有小人,点击已开格=移动(免费,BFS 限已探明区);挖/插旗仅限小人 8 向相邻格。边缘探索的地牢氛围已被用户认可 -- **初始安全区**:每张图开局 3×3 无雷自动展开,小人出生于此(初始展开无奖励) -- **可随时停手**:剩余 AP 1:1 转存 RAP 池,攒满(默认 8)可刷新雷图(不给清图奖励)——"是否承担盲猜风险"是策略点【2026-09-07 A3 RAP 修订,原"转化为战斗资源"作废】 -- **奖励统一结算**:扫雷阶段奖励只入库(含治疗包),轮次结束进入独立战斗结算画面逐行生效(正式版将替换为战斗动画) -- **安全格 = 增益/道具**:减伤、增伤、范围伤害等;**有回合限制甚至一次性**(稀缺性来源) -- **雷 = 敌方优势**:开到雷不是死亡,而是敌人获得增益/伏击——风险与收益同源 -- 扫雷图非基础版:**地形变异**(迷雾区无数字、岩浆格等)+ **辅助道具**(探测、安全旗等) - -## 难度与惩罚机制(按层级) - -**难度不随战斗数增长,而是随关卡进程增长**:难度 = f(关卡序号, 节点深度, 精英/Boss 修饰) - -| 层级 | 惩罚/压力机制 | 说明 | -|---|---|---| -| 轮次内 | 开雷 → 敌方结算时获得优势 | 扫雷失误的代价,当场兑现 | -| 战斗内 | 轮次越多,敌方结算出手越多 | 长战斗的自然代价(己方 HP 消耗);单张图拖太久 = 敌人多结算但旧图剩余收益仍在,形成"续挖 vs 清图换新"决策 | -| 关卡内 | 节点越深越难;精英节点相对更难 | 越接近 Boss 越危险,精英给更高收益对冲 | -| 关卡间 | 下一关基础数值+新地形变异 | 变异种类随关卡解锁(普通数字 → 迷雾 → 岩浆/冰冻) | -| 冒险间 | 死亡重开,天赋追赶 | 元进度:代币解锁永久提升 | - -## 与 Peglin 的对比要点 - -- 玩家技巧:物理瞄准+概率赌博 → **信息推理+风险承诺** -- Agency 位置:战斗内 → **全部前移到排雷规划** -- 不确定性来源:弹射混沌 → **隐藏信息推理缺口** -- 核心情绪:老虎机开闸爽感 → **"我算对了"的掌控感 + 规划兑现的延迟满足** - -### 已识别的风险(原型验证目标) - -1. 自动战斗沦为无聊过场 → 兑现层必须可见、有反馈 -2. 扫雷后期纯猜格子 → 用地形变异和道具缓解"死局感" -3. 一格一格点节奏慢 → AP/连锁/停手机制压缩决策带宽 - -### 创意风险登记(2026-09-07,CD 门禁) - -1. **安全格奖励的可预期性**(P2 规划的前提):若道具掉落纯随机且不可见,玩家无法提前形成"我要去拿 X"的规划,"规划的延迟兑现"退化为探索惊喜 → B4/A4 GDD 落实奖励类型可见性或探测机制。**【2026-09-09 B4 评审口径注记】结构前提已落地**(奖励身份 install 期预分配 + 已开格/库存恒读 + 每格必有货 + 雾档先验——B4 Rule 2/8/F1/F2);**MVP 呈现面 = 已开格 + 库存,面向特定道具的寻路未兑现**——待 A5 探测道具/呈现深度(B4 OQ2,垂直切片);本风险维持 OPEN(结构前提落地 ≠ 风险闭合) -2. **"我算对了"缺高光兑现节点**:现有设计只有避损(雷→敌方优势)与常规奖励,缺"完美排雷"的爆发结算(候选:全图标中/零误标清图加倍结算)→ B1/B4 GDD 设计该兑现节点 -3. **chord 缺席的兑付节拍缺失**(2026-09-07 A3 评审登记):本作有意不做经典扫雷的 chord(双击快开),正确标雷后的即时大片兑现节拍随之缺席(标中旗兑付只剩当轮 debuff)→ 候选高光补偿与 #2 合并归 B1/B4 设计 - -## 可证伪假设(概念原型要回答的) - -> 如果玩家通过扫雷决策为自动战斗获取道具,他们会感受到"每一步排雷都在影响战斗结果"的策略联动感。 -> 验证信号:玩家在扫雷阶段主动规划目标(连续 3 轮中至少 2 次主动改变扫雷策略去拿特定道具),并主动想进入下一轮。 -> 【2026-09-09 MVP 口径注记(B4 评审)】未开格身份不可见(B4 Rule 8),"拿特定道具"的寻路决策待 B4 OQ2/A5 兑现后方可作为有效信号——MVP 期以"往雾区推进/囤刀待机/叠层满载后收手"类规划行为代观测,防止把缺失功能误判为设计失败。 - -## 待定问题 - -- [x] 扫雷后奖励的主动道具(影响战斗结算):**MVP 激活**(2026-09-09 B4 定稿,用户拍板——轮末结算前"道具使用窗口"玩家选用;use_timing 字段从预留转承重,MVP 单值 pre_settlement,扩枚举走 B4 修订;原"后续版本加入"作废) -- [x] 己方限时增益:**跨轮次延续(按剩余结算次数),不跨战斗**(定稿 2026-09-06) -- [x] 旗子:**无上限**,旗为棋盘标记不占轮次资源,稀缺性由 AP 价目承载(2026-09-07 A3 RAP 修订定稿;原"每轮重置 4 面"作废) -- [x] 停手/清图时剩余 AP 的去向:停手 1:1 转存 RAP(刷图风险资源)、清图作废——**折算乘数(×2/×1)整体作废**(2026-09-07 A3 RAP 结构修订;效果侧健康由 A3 F1 契约约束,OQ3 留 playtest 复核) -- [ ] **标错惩罚**(v3 遗留:现无惩罚;候选:敌方伏击+1~~ / 旗子数量减半~~——后者随 2026-09-07 旗上限取消作废)——在 A2 GDD 前用原型小补丁实测后关闭(CD-SYSTEMS 门禁补登记;兼具旗滥用定价职责,见 A3 OQ2) -- [ ] 关卡内节点地图的形态(线性/分支)——C1 GDD 解决;候选已登记(2026-09-09 用户提出):**四方格步进式前进**——关卡内地图为格网,每步从相邻四格中选一格推进(与地牢隐喻同构);C1 设计顺序第 14 位,此项可后置 -- [ ] 反雪球机制——MVP 不做,Alpha 用测试数据决定(C3 GDD 需先决定"每胜一场敌方成长"这一正雪球源的去留) diff --git a/design/archive/gdd-2026-09-14/game-pillars.md b/design/archive/gdd-2026-09-14/game-pillars.md deleted file mode 100644 index 494bb944..00000000 --- a/design/archive/gdd-2026-09-14/game-pillars.md +++ /dev/null @@ -1,29 +0,0 @@ -# 游戏支柱(Game Pillars) - -> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 定稿:2026-09-06 -> 来源:`game-concept.md` 概念定稿 + 概念原型 v1→v3 验证结论 + CD-SYSTEMS 门禁意见 -> 用途:所有 GDD 的评审尺度——每条设计决策必须至少服务一条支柱;与支柱冲突的设计默认砍掉 - -## P1 推理的掌控感 —— "我算对了" - -每一格挖掘都应该基于可推导的逻辑,而不是运气。生成端必须保证可推理率(A1 GDD 定最低门槛),后期"纯猜"局面用变异与道具缓解。这是本作与 Peglin(概率赌博)的根本区别。 - -**裁剪判据**:一个设计若让玩家频繁进入"无法推理只能赌"的状态,即违反本支柱。 - -## P2 规划的延迟兑现 —— 扫雷的因,战斗的果 - -扫雷阶段的每个决策(挖哪里、标哪面旗、何时停手)都在战斗结算中可见地兑现。兑现必须**可归因**:结算明细标注来源(伤害道具 / 安全格增益 / 标中旗削弱 / 清图奖励 / 雷→伏击;【2026-09-07 A3 RAP 修订】原"停手折算"来源作废——停手改产 RAP 风险资源,不再进战斗结算),MVP 就要做到,不等战斗动画。 - -**裁剪判据**:若玩家无法说出"这个结果是我哪步扫雷带来的",即违反本支柱。 - -## P3 风险与收益同源 —— 雷既是敌人的武器,也是你的赌注 - -开雷喂给敌人伏击(代价),标中雷削弱敌人(收益)【2026-09-07 三向效果定稿:标中旗 = 怪物 debuff】,危险区域的安全格价值更高。所有风险机制都从这个同源原则派生,不引入第二套随机惩罚。 - -**裁剪判据**:一个风险若与"雷/未知格"无关,需强理由才可保留。 - -## P4 地牢下探的探险氛围 —— 边缘探索,越深越险 - -小人从初始安全区向雷图边缘探索(Microsoft Minesweeper Adventure 式的地牢感),关卡推进 = 不断下探更险的层。视觉、音频、地图结构都服务这个隐喻。产品命名本身承载本支柱:**Dungeon Sweeper**(2026-09-09 定稿,minesweeper → dungeon sweeper 双关;世界观与机制隐喻映射见 game-concept"世界观与命名"节)。 - -**裁剪判据**:任何让棋盘体验退化为"平面对话框"的表现层简化,需评估对氛围的伤害。 diff --git a/design/archive/gdd-2026-09-14/gdd-cross-review-2026-09-14.md b/design/archive/gdd-2026-09-14/gdd-cross-review-2026-09-14.md deleted file mode 100644 index 5f44ed95..00000000 --- a/design/archive/gdd-2026-09-14/gdd-cross-review-2026-09-14.md +++ /dev/null @@ -1,116 +0,0 @@ -# 跨 GDD 评审报告(/review-all-gdds)— 2026-09-14 - -> **Verdict: FAIL**(2 blocking)· 覆盖 16 份文件(registry/concept/pillars/index + A1–A5/B1–B4/C3/D1/D2) -> 方法:Phase 2(一致性)/ Phase 3(设计理论)由两个独立上下文代理全文逐字通读,主审对两代理的分歧点逐条 grep 核实后和解。 -> ⚠️ **评审期间检测到并行会话正在修改 GDD**:C3 修订批(encounter 骰/护甲与伤害A/B 字段/clear_blast/K_dmg=0/B2 三敌种)在两代理先后读取之间落地——这正是两代理对 F1–F5 结论互斥的原因。本报告以主审最终 grep 时点盘面为准;**批收口前建议避免多会话并行修改设计文档**。 - ---- - -## 一、Blocking 🔴(进 /create-architecture 前必须闭合) - -### 🔴-1 减伤墙批回执链失效——defense_up 数值三重漂移,B1 条款③⑤闭合回执在现行值链下翻为破线 -- **事实面**:C3(F4/试玩批记录)按 **−30 × 2 层帽 −60%** 投值并声称"B3 侧行值批";对侧 B3 GDD(MVP 内容行/Knob 表)、registry `status_effect.mvp_content`、D2 全部仍为 **−50**,B3 无任何 −30 注记。B1 F4 的 V_safe 恒等式还叠着 **duration=2** 旧值(registry/B3 已锁 1——2026-09-11 两级奖励批)。 -- **量化后果**(C3 v3 曲线 d0.25/t0.88 口径):V_safe 12 → duration 修正 6 → 幅值修正 3.6;条款③ L1 锚行裕度从登记的 ≈2.0× 跌至 ≈0.5–1.0×——**登记的"通过"回执失效**。同链失真:B1 F0 值域 [60,85] 推导(E_dig 反推腿)、F1 对照表行值(knife_t1 4 / knife_adv 8 / clear_knife 8 / heal_t1 行已不存在——B4 现行 8/16/40 两级 + 注入池)、F5 E_dig=7.2 与条款⑤缺口读数、B1 F1 attack_up"死行"残留(与自身 Core Rule 10 先手攻击吃修正互斥)、B4 AC-18 若未随批改写则三值断言假失败(待复核)。 -- **修复批**:① B3/registry/D2 接口漂移批(−30 + duration 口径 + 免伤轮叙述同步);② B1 修订批按现行三输入(duration=1、m_d 终值、C3 v3 曲线)重推 F0/F1/F4/F5,重登 clause3_supply/clause5_dominance 回执,AC-36 死行断言改写;③ defense_up.magnitude/duration 纳入"禁独立调参"联动网络(现仅 m_w↔D_ref 有此待遇)。 -- **owner**:B3(行值批)+ B1(重算批)+ C3(兑现其"已回写"承诺) - -### 🔴-2 D2 修订批回写不完整——schema 单一事实源分裂,含可执行触雷点 -- X-8 回执只覆盖 EnemyTable +2 / SettlementTable +4 字段,以下五处漏掉(均经 grep 核实): - 1. **RNG 流仍"封闭 2 流"**,无 encounter(registry 已三流、B1 AC-5 已消费)——B1 `open_stream("encounter")` 按 D2 自己的 EC12 = 未知名流 **debug 断言中止**; - 2. **pool_tag 枚举无 `active_inject`**——B4 注入池三行(knife_t1/knife_adv/heal_pack)在 D2 现行校验下**加载期致命**; - 3. **RewardConfigTable 缺 active_p0/active_decay**;k_dmg 仍写默认 1 + "C3 禁区默认值"条款(B4/registry 已转正默认 0、禁区解除); - 4. **默认根行集仍列 clear_knife 八行**(已被 clear_blast 换位替代); - 5. 占位表 **HelperItemTable** 未随 A5 更名 **AuxItemTable**。 -- **修复批**:D2 补漂移修订批(五处 + X-8 回执补登遗漏项);建议增流程纪律——**修订批回执须逐表 diff schema 目录**(本次缺口正是按"对侧 GDD"粒度登记、未按"受影响字段/枚举"粒度 diff 所致)。 -- **owner**:D2(C3/B4 配合) - -## 二、Warnings ⚠️(16 条——不阻塞 architecture,但须入批) - -| # | 事项 | 涉及 | 建议落点 | -|---|---|---|---| -| W1 | 供给控制器机制规格缺位:注入时点/cadence、入库存 API、`stock()` 来源 {cell, round} 对注入件无 cell、明细行协议(P2 归因"我在地牢里淘东西"断链——注入流是唯一与扫雷决策解耦的奖励流) | B4/C3/registry | B4 修订批补专节 + 来源语义裁决(建议 `{source: injection, board_index}`)+ "注入依赖度"预警 | -| W2 | 护栏 B(防钓鱼)复核被跳过:clear_blast 把 C 提至 40/完美 80,对登记上界 24(D_ref 口径)/≈8(DPS 严格)越线 1.7–10×;B1 回执只重推了条款⑤缺口 | B1/C3/registry clause5_dominance | C3/B1 补护栏 B 重推记录,三选一落档(上界改判/接受+强化监控/回调 C) | -| W3 | 伤害A/B 充能与护甲克制:B1 有四字段无结算公式/无 AC/无 F1 对照行;A3 条款①扩列义务未登记 | B1/B2/A3/C3 | B1 修订批补充能机制段(累积时点/cap/与乘区关系/查表算式)+ A3 条款①扩列 | -| W4 | B2 正文 Rule 3 仍"恰 2 敌种(grub/ambusher 旧名)" vs 自身 AC-14/AC-16/结构断言三敌种 {goblin, bugbear, ogre_chief}(文内分裂) | B2 | B2 批随改正文(provisional 归 C3 口径保留) | -| W5 | A4 AC-1 的 counter_item_ids=∅ 定值断言 vs A5 回填 [probe_dust](回填批落地即假失败) | A4/D2 | A4 批改表读值断言或显式豁免 | -| W6 | B1 出口分发"每图 cap 2" vs A3/registry/D1 "每轮 2、RoundStart 重置"(同图跨轮语义实质不同;B1 自身 AC-29 按 per-round 断言) | B1 | B1 改"每轮" | -| W7 | registry `boss_hp_anchor` 带 [0.35,0.55] vs C3 F3 [0.5,1.1];`difficulty_expectation_table` 通关率/供给带已被 C3 替换——两处 owner(C3)未回写 | registry/C3 | C3 回写批 | -| W8 | A2 呈现面 current_board()/reveal_record() 在 A2 API 封闭枚举外被消费,A2 GDD 无接口漂移登记、D1 冲突⑧清单漏 A2 面 | A2/D1/A5 | A2 批补登记 | -| W9 | systems-index A5 分层行缺 A3 写边(grant_ap 是写入口非编排调用——A3 下游表亦无 A5) | systems-index/A3 | 索引补边 + A3 修订批 | -| W10 | A1→B4 board_biome 数据边单向(B4 依赖节无 A1 行;Phase 2 观察于 C3 批落地前,入批前 30 秒复核) | B4/A1 | B4 批复核补行 | -| W11 | C3 使用已退役名 refresh_max_per_round(正式名 refresh_cap_per_round——D1 命名统一表) | C3 | C3 批两处改名 | -| W12 | A5 交互面三项:① F1 渗透率锚定池构成已被供给控制器批改写(读数随 B4×④ 重算——义务已登记,此为交互面扩展:注入池不承载 aux,格池全即时类+aux 后分母口径变化);② ap_grant 无每轮总量结构位("满停一刷"基线节拍被 A3 不拥有的源破坏——建议 A3 批增结构位默认关或登记接受声明);③ 真视把 weaken 饱和与伤害B 充能两条收益线同时放大,免伤轮常态化未入任何对账清单(真视件 ≈0.42/板;A5 OQ3 扩面 + B1 对账清单补"真视供给 × weaken 饱和频率") | A5/A3/B1 | 各自修订批 | -| W13 | 挖掘期注意力预算 ≈6 并发决策域(A2 推理/A3 预算/A4 雾/A5 道具/B4 囤刀规划/B2 读怪);A5 后最坏格面 = 旗×雾纹×显影数字×真视标记×预读徽章五重叠加,A4 AC-9/D1 样张最坏用例清单未含 | A4/D1/A5 | 样张清单补五重叠加腿 + A5 遥测增"单轮 use_aux 次数" | -| W14 | A5 F3 修正后 registry 已同步;但 A5 GDD 正文 Core Rules 表口语化重写由并行会话完成——两处口径已在本次评审合并确认,无残留 | — | 无动作(记录) | -| W15 | D1 敌种图标键目录仍 {grub, ambusher} 冻结锚(D1 冲突清单②已登记"随 B2/C3 批对齐"——批未执行) | D1 | D1 批对齐 goblin/bugbear/ogre_chief | -| W16 | B4 AC-18 三值封闭定值断言与"默认根不含 attack_up 行"腿(Phase 2 发现;C3 批落地后未复核——若批已改写则解除,否则随 B4×④ 重制) | B4 | 复核 + B4 批 | - -## 三、设计整体性(Phase 3)结论 -无 blocking。**骨架健康**:主循环主张(扫雷推理为主、结算为兑现器)结构上成立;结算期单输入点(窗口单件制)、A5/B4 两使用入口相位错开、RNG 封闭流、义务/夹具/对账纪律密度为同类设计罕见。风险集中在**近三日三个"快批"的回写完整性**(减伤墙批、护甲克制批、A5 定稿)——修复模式一致:回执按对侧 GDD 粒度登记,未按受影响公式/枚举/字段粒度逐项 diff。四支柱映射与玩家幻想一致性(地牢探险者:算得对/捡的货/冒的险/探的深)核对通过,无新的反支柱违反。已登记风险(停手攒 RAP 环、囤刀、道具依赖症、标错惩罚等)经核对登记齐备,本报告仅在交互面新增处升级(W12③)。 - -## 四、跨系统场景推演(Phase 4,3 条) -1. **aux 授予→使用链**(A2→B1 授予段→B4 grant 路由→A5.add_item→下轮 Active use_aux→validate/apply/grant→consume→D1 回执):编排序原子性、相位互斥、零回写、两库存正交均闭合 ✓;唯一发现 = W12①(渗透率分母随池结构漂移)。 -2. **真视→插旗→双收益线**(A5→A2→B1→B3→B2):P2 归因链完整(flag_hit 既有路径)✓;发现 = 真视同时喂大 weaken 饱和与 damage_b 充能,归入 W12③/W3。 -3. **encounter 骰触发路径**(B1 begin_battle→RngService open_stream("encounter")):现行 D2 封闭清单下即 🔴-2 第 1 项的运行期触雷点。 - -## 五、格式门禁(tools/gdd_lint.py 全量) -11/12 FAIL:以 R8"说明/要点列混入编号引用(Rule 1/EC7/AC-1/义务/OQ8)"类为主——多为四列规则表形态与 linter 三列预期的结构性错配(D1/D2 最密集)+ D2 最长括号跨度 67 字。仅 A5 PASS。建议下一批做 lint 口径校准(四列表 依据列识别)或机械化引用列迁移,勿逐条手改。 - -## 六、修订标记(systems-index,2026-09-14 用户拍板"只标 blocking") -- B3、B1、D2 → **Needs Revision**(状态单元格按门禁精确匹配纪律置为裸值;历史放行记录保留在各 review log 与本报告附录) -- 其余 ⚠️ 项不降级已批免复评的 GDD 状态,挂各自修订批对账。 - -## 七、批调度建议(推荐顺序) -1. **B3/registry/D2 接口漂移批**(🔴-1 前半:−30 + duration)与 **D2 漂移批**(🔴-2 五处)可同一会话; -2. **B1 重算批**(🔴-1 后半:F0/F1/F4/F5 重推 + W3 充能规格 + W6 每轮 cap + F7 死行清理); -3. **B4 规格批**(W1 供给控制器 + W16 复核 + W10 复核); -4. **C3 收口批**(W2 护栏 B + W7 registry 回写 + W11 改名 + 兑现其余"已回写"承诺); -5. 零散:B2 正文(W4)、A4(W5)、A2(W8)、索引补边(W9)、D1(W15)、A5/A3(W12)。 -全部收口后跑 `/review-all-gdds since-last-review` 增量复核 → PASS 再进 `/create-architecture`。 - ---- - -## 附录 A:Phase 2 一致性代理原始发现(F1–F21)× 和解标注 - -> 代理读盘时点在 C3 修订批落地前,以下标注以主审最终 grep 为准。 - -- **F1 C3 敌种键集改名"已回写 ✅"失实** → **已解除**:B2 AC-14/AC-16/结构定值断言/版本历史 X-7 均已落地三敌种 {goblin, bugbear, ogre_chief};残余 = B2 正文 Rule 3 口语段(W4)+ D1 键集目录(W15)。 -- **F2 defense_up −30 未回写 B3/registry** → **维持 → 并入 🔴-1**。 -- **F3 K_dmg=0 禁区解除仅存于 C3** → **B4 侧已解除**(F5 现行默认 0 + 供给控制器首件保证语义已入文);**D2 侧残余**(k_dmg=1/禁区/缺 active_p0/decay)→ 并入 🔴-2。 -- **F4 clear_blast/注入池/供给控制器 vs B4 旧根** → **B4 侧已解除**(clear_blast 行/active_inject 池/拥有行均已入文);**D2 侧残余**(pool_tag 枚举/行集)→ 并入 🔴-2;A5 F1 分母 → 转 W12①;机制规格缺位 → W1。 -- **F5 C3 声称的 B1/B2/D2 机制扩容不存在** → **已解除(字段面)**:B1 encounter 骰(步骤序/AC-5/版本历史 X-6)、SettlementTable +4 字段、B2 spawn override/unit_count_max/armor_type、D2 EnemyTable +2 字段均已落地;**规格面残余** = W3(B1 充能结算公式/AC 缺位)。 -- **F6 B4 AC-18 三值断言互斥** → **待复核**(C3 批是否同步改写;未改则随 B4×④ 重制)→ W16。 -- **F7 B1 attack_up 死行残留** → **维持** → 并入 🔴-1 的 B1 重算批。 -- **F8 B1 数值链整体过期**(duration/行值/heal_t1/C=8)→ **维持** → 并入 🔴-1 的 B1 重算批。 -- **F9 A4 AC-1 ∅ 断言** → **维持** → W5。 -- **F10 每图 cap 2 vs 每轮 2** → **维持** → W6。 -- **F11 D2 封闭 2 流 vs registry 三流** → **维持** → 并入 🔴-2 第 1 项。 -- **F12/F13 registry 两处未随 C3 回写** → **维持** → W7。 -- **F14 A2 呈现面接口漂移登记缺** → **维持** → W8。 -- **F15 A5 义务对侧零落位 + 索引缺 A3 写边** → 落位半为**已登记 deferral**(不升级);索引写边半 → W9。 -- **F16 A1→B4 biome 边单向** → **维持(落地前观察,入批前复核)** → W10。 -- **F17 C3 退役名** → **维持** → W11。 -- **F18 头部状态漂移**(A1/B1/B4/D1)→ ℹ️ 维持(A5 已随本批修复)。 -- **F19 C3 引"B4 义务 #10"实为缺口预检 #6** → ℹ️ 维持。 -- **F20 HelperItemTable 占位名** → 并入 🔴-2 第 5 项。 -- **F21 game-concept"奖励只入库(含治疗包)"句未随两级奖励批更新** → ℹ️ 维持(概念层补注记)。 - -## 附录 B:Phase 3 设计整体性代理报告(原文,读盘时点在 C3 批落地后) - -**先行澄清**:经逐文件核对,encounter 掷骰/护甲/伤害A/B 的表字段与接口已同批落地 B1/B2/B4/D2/registry(X-6~X-10 回执在案);真实两态为:①减伤墙批(C3 意图 −30 vs B3/registry/B1 现行 −50);②A5 的 B4×①…⑤/D2×①②/A3×① 修订批(已登记 deferral,不升级);③供给控制器规格;④护栏 B 复核。另发现 D2 整批漂移(→ 本报告 🔴-2)。 - -**🔴-1 条款③/⑤闭合回执失效**(→ 本报告 🔴-1,该代理另贡献了 C3 v3 曲线 d0.25/t0.88 的量化:V_safe 12→6→3.6、条款③裕度 2.0×→1.02×→0.86×→0.52×、E_dig 修正后 ≈4.3–5.1);**🔴-2 D2 漂移**(→ 本报告 🔴-2)。 - -**⚠️-1 供给控制器规格缺位 + P2 归因断链**(注入流 ≈1 件/战斗与挖掘决策解耦;H1"开格拾取"高光从此只覆盖即时类;建议注入件来源语义裁决 + "注入依赖度"预警)→ W1。 -**⚠️-2 护栏 B 复核被跳过**(C=40/80 双读数越线;登记在案的强制检查点被静默跳过;结构承载 = A1 min_safe_count + 布雷下限 + R₀≠S 三闸仍在)→ W2。 -**⚠️-3 伤害A/B 充能无 owner 结算规格**(累积时点/单轮封顶/与 attack_up percent 池关系/护甲查表与乘区先后序/当量换算全部空白;43 条 AC 零覆盖;A3 条款①"分源改率须回 A3 重议"未走)→ W3。 -**⚠️-4 挖掘期注意力 ≈6 域 + 五重叠加样张缺口**(结算期无此问题——单输入点设计良好;建议 A4 AC-9 与 D1 样张补五重叠加腿 + "单轮辅助决策次数"聚合仪表)→ W13。 -**⚠️-5 B2 正文 vs 自身 AC 敌种口径分裂** → W4。 -**⚠️-6 ap_grant 两条未闭合口**(无每轮总量结构位破坏"满停一刷"标定前提;A5 AP 当量 ≈+5% 通胀未排期重算——B1×④ 扩列时入表并联动条款⑤ Δr 口径)→ W12②。 -**⚠️-7 真视 × weaken 池 → 免伤轮常态化未入对账**(mine_reveal 使"单轮 8 标中"从尾部事件趋向可靠操作;L=8 → clamp −100 → 该结算敌方输出归零;修正入口 = 真视供给权重而非地板规则)→ W12③。 -**ℹ️-1 文头状态漂移**(A1/B1/B4 文头 vs 索引;A5 已随本批修复)→ 附录 A F18。 -**ℹ️-2 两态盘点修正**(encounter/护甲/伤害A/B/clear_blast/K_dmg=0 均已双侧落地——与 Phase 2 代理结论互斥的根源即读取时点差;本附录为其原文判断)。 -**ℹ️-3 已登记项确认**(停手攒 RAP 环/囤刀/道具依赖症/C3 通关率越带/标错惩罚/R₀ 分布义务等四方登记齐备,不升级;主循环对其余面映射一致)。 - -## 和解记录(供复核) -两代理对"C3 回写批是否落地"结论互斥 → 主审对 B1/B2/D2/B4/B3/registry 六文件逐条 grep(encounter/damage_a/unit_count_max/ogre_chief/active_inject/clear_blast/defense_up 值域)→ 判定:批在两代理读取之间落地,Phase 2 的 F1/F3/F4/F5 字段面已解除、F2 维持;Phase 3 的 🔴-1/🔴-2 与全部 ⚠️ 采信为现行盘面。 diff --git a/design/archive/gdd-2026-09-14/gdd.md b/design/archive/gdd-2026-09-14/gdd.md deleted file mode 100644 index 2385ed53..00000000 --- a/design/archive/gdd-2026-09-14/gdd.md +++ /dev/null @@ -1,137 +0,0 @@ -# Dungeon Sweeper — GDD(独立版) - -> **这是什么**:全部设计文档的入口层——先用 6 节把游戏讲清楚,需要细节再顺着链接进明细层。 -> **写给谁**:未来的你自己、朋友、合作者——假设读者没读过任何其他文档。 -> **效力声明**:本文是导航与共识层,不是数值权威;规则与数值一律以各 owner GDD 和 `design/registry/entities.yaml` 为准,冲突时以后者为准。 -> **明细层入口**:系统树根 `design/gdd/systems-index.md` · 概念层 `game-concept.md` / `game-pillars.md` - -## 1. 一句话概念 - -**一句话**:扫雷的推理 × 自动战斗的兑现——你在战斗前做的每一次排雷决策,决定战斗的胜负。 - -**30 秒版本**:你是一名地牢探险者,逐层下探被怪物巢穴侵染的地牢。每层是一张"雷图":挖开安全格给自己拿增益,标中雷削弱敌人,踩雷则喂强敌人。行动点用尽,轮末自动结算——你扫雷攒下的因,逐行兑现成战斗的果。清了图换新图继续,杀穿 Boss 下探更深;死了,整个冒险从头再来。像《Peglin》的"小游戏 → 战斗结算"循环,但把弹珠的运气换成了扫雷的推理。 - -**为什么好玩**(四支柱,一针见血版): - -| 你会爱上它的点 | 靠什么兑现 | -|---|---| -| "我算对了"的掌控感 | 每一格都靠数字推理,不靠赌——棋盘生成端保证可推理率 | -| 扫雷的因,战斗的果 | 结算明细逐行标注来源:这行伤害是你哪步棋换来的 | -| 风险与收益同源 | 同一颗雷两面:标中 = 削弱敌人,踩中 = 敌人变强 | -| 下探的地牢氛围 | 小人从安全区向边缘探索,关卡推进 = 越深越险 | - -**给谁玩**:喜欢杀戮尖塔/小丑牌式构筑决策 × 喜欢扫雷式纯逻辑掌控感的玩家;PC(Steam)单机,回合制无配置要求。 - -## 2. 核心循环 - -一条线画完: - -``` -下探地牢 → 遭遇战 → 扫雷规划(挖安全格=增益 · 标中雷=削敌 · 踩雷=喂敌) -→ 行动点用尽 / 主动停手 / 清图 → 轮末自动结算兑现 → 敌未灭则下一轮 -→ 清图换新图(或攒"换图资金"避开盲猜)→ 杀 Boss 通关拿大奖励 → 更深一层 → 死亡则整个冒险重来 -``` - -外面套的壳就是游戏结构: - -``` -存档(天赋/代币 —— Alpha) - └─ 冒险(一条命,死亡即终) - └─ 关卡 ×2(节点链:4 战 + 恢复 + Boss) - └─ 战斗(碰非奖励点触发) - └─ 轮次 ×N ── 扫雷图 ×M(跨轮延续,清图换新) -``` - -每轮的取舍只有三个出口——这是全部策略的落点: - -| 出口 | 触发 | 结果 | -|---|---|---| -| 清图 | 安全格全开完 | 发清图奖励,下轮换新图 | -| 停手 | 玩家主动收手 | 剩余行动点 1:1 攒成换图资金,下轮同图 | -| 耗尽 | 行动点扣到 0 | 下轮同图继续,一无所得 | - -## 3. 系统清单(只列真的要做的) - -明细层 13 份系统 GDD,已全部定稿——每行一句话 + 原文链接: - -| 模块 | 系统 | 一句话 | 详规 | -|---|---|---|---| -| 扫雷侧 | A1 棋盘生成 | 布雷与雾区的确定性生成,保证"可推理率" | `design/gdd/a1-board-generation.md` | -| 扫雷侧 | A2 排雷玩法 | 小人移动、挖/旗/连锁展开的棋盘面规则 | `design/gdd/a2-minesweeper-rules.md` | -| 扫雷侧 | A3 行动经济 | 每轮行动点账本、统一价目、三出口仲裁 | `design/gdd/a3-action-economy.md` | -| 扫雷侧 | A4 地形变异 | 迷雾等变异的布置约束与代价模型 | `design/gdd/a4-terrain-variation.md` | -| 扫雷侧 | A5 辅助道具 | 显影/真视/加行动点等信息与行动力道具 | `design/gdd/a5-minesweeper-aux-items.md` | -| 战斗侧 | B1 战斗结算 | 七段结算编排、明细流水、胜负判定 | `design/gdd/b1-settlement.md` | -| 战斗侧 | B2 敌人系统 | 三敌种行为环、图像线索读怪、伏击 | `design/gdd/b2-enemy-system.md` | -| 战斗侧 | B3 增益状态 | 全部 buff/debuff 的统一容器与叠层规则 | `design/gdd/b3-status-effect.md` | -| 经济侧 | B4 奖励经济 | 掉落池、即时/可选两级奖励、清图奖励 | `design/gdd/b4-reward-item-economy.md` | -| 结构侧 | C2 冒险结构 | 关卡序列、HP 账本、关卡大奖励、死亡重开 | `design/gdd/c2-adventure-structure.md` | -| 结构侧 | C3 难度曲线 | 敌我数值成长、Boss 台阶、通关率带 | `design/gdd/c3-difficulty-curve.md` | -| 支撑侧 | D1 HUD 框架 | 棋盘/队伍/明细/结算五区界面布局 | `design/gdd/d1-hud-framework.md` | -| 支撑侧 | D2 数据配置 | 全部数值进配置表,代码零字面量 | `design/gdd/d2-data-config.md` | - -### 还没设计的(排在后面,不是不做) - -| 系统 | 是什么 | 计划 | -|---|---|---| -| C1 关卡节点地图 | 关内行进与节点兑付(切片暂用线性链) | 垂直切片 | -| B5 战斗表现 | 结算画面 → 战斗动画、伤害数字 | 垂直切片 | -| C4 元进度 | 存档/天赋/代币 | Alpha | -| D3 存档序列化 | 持久化框架 | Alpha | -| D4 音频 | 挖掘/结算/胜负反馈音效 | Alpha | -| D5 教学引导 | 新手引导 | Alpha | -| D6 设置/本地化 | 常规打磨项 | 完整愿景 | - -## 4. 内容规模 - -做多少、砍多少,心里有数——以下是 MVP 口径的全部内容面: - -| 内容 | MVP 数量 | 备注 | -|---|---|---| -| 冒险 | 2 关:L1 地牢基线 → L2 解锁迷雾 + 数值台阶 | 加关 = 序列+数值+变异同批,禁止只加序列 | -| 每关节点 | 7 节点:4 战 + 恢复 + Boss | L1/L2 同构复用 | -| 敌种 | 3:地精 / 熊地精 / 食人魔酋长(Boss) | 行为拍 3 种:攻击/蓄力/重击 | -| 状态效果 | 6 种:增伤/减伤/伏击/削弱/暴走/失衡 | 另有 1 种已登记待实施 | -| 奖励 | 8 种:即时 4 + 可选 3 + 清图 1 | 可选类入背包、轮末窗口选用 | -| 辅助道具 | 6 种,覆盖信息/风险/行动/规划/反制五维度 | 含 2 件稀有多维道具(如地穴全图卷) | -| 地形变异 | 迷雾 1 种 | 岩浆/冰冻等留后续关卡解锁 | -| 生物群系 | 地牢 1 种 | 换皮 = 色板变体,不做新资产 | -| 雷图 | 10×10 起步、随深度增大(参考至 12×12) | 每轮行动点 8;开局 3×3 安全区 | -| 单局时长 | 冒险 20–40 分钟 / 单关 5–10 分钟 | 单场战斗 1–3 分钟,碎片时间友好 | -| 平台 | PC(Steam)先行 | 回合逻辑,无配置门槛 | - -## 5. 美术/音频方向 - -| 项 | 定调 | -|---|---| -| 风格一句话 | 轻快明亮的像素幻想地牢——非暗黑风、全年龄、角色 2–3 头身 | -| 参考池 | Into the Breach(网格信息分层)× Moonlighter(明亮地砖质感)× Peglin(明快全年龄色彩);截图在 `design/art/references/` | -| 一条硬规则 | 数字是主角:数字与格底对比度 ≥4.5:1,氛围永远给可读性让路 | -| 风险闸 | 正式砖面资产开工前跑一次"格子样张测试",数字可读性是第一验收项 | -| 详细 | `design/art/art-bible.md`(视觉身份/氛围/形状/色彩四节已定稿) | -| 音频 | MVP 不做——临时音效挂垂直切片,正式音频排 Alpha | - -## 6. 不做清单 ★ - -**本节最重要**——写下来,防止半夜加戏。每条都有已拍板的理由;真想推翻,走对应 owner 文档的修订流程,不许静默加回来: - -| 不做的事 | 为什么 | 真想做时先动谁 | -|---|---|---| -| 经典扫雷的 chord(双击快开) | 每格兑现都必须花行动点——chord 会让预算失去意义 | A3(高光补偿候选已登记,归 B1/B4) | -| 抽象资源点数 / 折算货币 | 扫雷收益全部直兑战斗效果,中间货币稀释"因果可见" | A3 + B1 当量对照表 | -| 旗做成背包道具或限量 | 旗只是棋盘标记,稀缺性由行动点价目承载 | A3 | -| 停手奖励折算成战斗力 | 停手是风险管理工具,不是第二收入流 | A3 | -| 换图资金跨战斗携带 | 每场战斗清零,防滚雪球;连刷策略等实测后议 | A3 开放悬案 | -| 未开格显示奖励身份 | 推雷是本征玩法,预读会拆掉推理 | B4 锁定规则,随极性提案批再议 | -| 替代推理的全图侦察道具 | 全图级只给"恢复推理原料"类(显影/预读);替代推理限 3×3 窄域 | A5 护栏 | -| 第二套随机惩罚 | 所有风险从雷/未知格派生,不引入平行的随机惩罚 | 支柱 P3 裁剪判据 | -| 反雪球机制 | MVP 不做——Alpha 用真实测试数据决定 | C3 | -| 重叙事(前人日志等) | 世界观厚度 = 碎片点缀,卖点在玩法不在文本 | game-concept 表现层 | -| 多人 / 在线要素 | 单机单人为前提,服务核心受众定位 | game-concept 目标受众 | -| MVP 内做:音频/教学/天赋存档/战斗动画/关内自由地图 | 先验证核心循环,打磨项一律排后 | systems-index 里程碑表 | - -## 版本历史 - -| 版本 | 日期 | 改动 | -|---|---|---| -| v1 | 2026-09-14 | 建立独立版入口层(6 节结构):素材取自 game-concept / game-pillars / systems-index / art-bible 与各系统 GDD 定稿;本文只做导航与共识,不另立事实 | diff --git a/design/archive/gdd-2026-09-14/reviews/a1-board-generation-review-log.md b/design/archive/gdd-2026-09-14/reviews/a1-board-generation-review-log.md deleted file mode 100644 index 77b39a42..00000000 --- a/design/archive/gdd-2026-09-14/reviews/a1-board-generation-review-log.md +++ /dev/null @@ -1,49 +0,0 @@ -# A1 扫雷棋盘生成 — Design Review Log - -> 文档:`design/gdd/a1-board-generation.md` · 首次 full 评审:2026-09-09 -> 模式:full(六专员并行对抗 + creative-director 终审)· 用户在席拍板修订路径 - -## Review — 2026-09-09 — Verdict: MAJOR REVISION NEEDED - -- **Scope signal**: L(F1/F2/F2b 三式返工 + 1 个键结构决策 + D2 schema 回写 + 黄金向量全链重制;无新 ADR;下游仅 A2/D2 实质回验) -- **Specialists**: game-designer · systems-designer · qa-lead · level-designer · performance-analyst · creative-director(终审) -- **Blocking items**: 8 | **Recommended**: 14 | **Nice-to-have**: 13 -- **Completeness**: 8/8 节齐备;上游依赖 A4/D2/A3 GDD 均存在且交叉引用核实为真(A4×15 @a4:153、D2 BoardGenTable 回填 @d2:39、A3 EC5 委派 @a3:126);下游未写 GDD 属设计顺序内前向登记 -- **Prior verdict resolved**: First review - -### Summary(creative-director 终审) - -工程纪律罕见的 GDD——五阶段管线、F4/F5 框架、依赖拓扑全部存活——但承重量度(F1/P1 门槛的可判定形式)与承重键结构(第三轴)须在冻结前重定,且验收体系存在构造性不可满足的断言腿。属"承重处返工"而非方向性推翻。五专家切面互补零重叠,无一条 blocking 属过度指控;qa-lead 覆盖矩阵核对成立(5 处标注问题,映射主体为真)。 - -### Blocking 清单(re-review 逐项核销对照;缺一即不得放行) - -| # | 主题 | 来源 | 一行化 | -|---|---|---|---| -| B1 | **P1 度量双洞** | game-designer | F1 雾元知识入分子无占比上限(合法高雾行可零推理过线)+ `inferability_target` 无绝对下限(断言 A 相对化,降 target 永不开火)→ 增第二达标判据(剔除雾格后的可推理率 inferability_core)+ 雾占比绝对上限 + target 绝对锚(schema 域收窄 + F4 绝对断言) | -| B2 | **AC-6(a) 不可满足** | qa-lead | 可达域外扩 1 环内必有芯内数字格的邻雷,"零雷零变异"照文本恒红;所引义务只禁变异不禁雷 → 改写:芯内零雷零变异 + 环内零变异(可含雷) | -| B3 | **雷数取整未钉死** | systems-designer | 取整规则零出现;ceil 下 F2b"sound 保守"为假;同参数 |S| 漂移 36–44;F1 例板"雷 18"不可复算 → 钉死 `round(d×(W×H−9))` 先定数后落位 + 布雷↔可达域顺序(先布后删)+ 指标集增实际雷数/|S| + 例板全链重算 | -| B4 | **F2 ≢ Schema 三条款** | systems-designer + qa-lead | 角点 (count=0, f>0) 两形答案相反(三条款放行 / F2 拒绝),"等价、零新增语义"为假,AC-2 漏测 → Schema 采 F2 规范形(补 `count=0 ⇒ f=0` 腿)+ AC-2 补角点违例腿 | -| B5 | **AC-11(b) 数学反例** | qa-lead | Lm(1)=∅ 时"前缀非降"为假(非法高推理率板 vs 合法未达标板),σ 重搜协议会静默掩藏 → 加前提腿(登记验证 B₁ ∈ Lm) | -| B6 | **A4⑭ 缺半边** | game-designer | A4 原文批量断言两件套(出现率下限**/降级率上限**),部分达成 shortfall 对断言 B 失明且零断言 → 断言 B 收紧为"实际达成区数 = fog_region_count 的板占比 ≥ 0.95" | -| B7 | **第三轴无落点** | level-designer | game-concept 定稿三轴难度(MVP 关卡含关底 Boss),A1 冻结键结构无修饰位(D2 自留 elite_/boss_ 后门而 A1 无)→ **D2 数值回填前**二选一白纸黑字(用户拍板) | -| B8 | **确定性成本闸缺位** | performance-analyst | 64×64/d=0.5/attempts=32 通过全部现行校验、换图相位同步卡死百秒级;墙钟时间逃生与回放硬承诺根本不兼容;F2 裁决不覆盖成本可行性(其有可判定静态形)→ Schema 冻结成本谓词形式(attempts×W×H ≤ C,数值 provisional)+ 文本级禁墙钟逃生 + OQ2 扩写四活路两死路 | - -### Recommended(14,未核销项留待后续修订) - -R1 运行期降级图玩家侧零诚实(熔断回退 + legality-only 追加尝试 + 玩家侧语义登记)[GD] · R2 难度单调性零校验(monotone_in_depth 标记 + F4 断言 E advisory)[LD,终审顶格并入修订包] · R3 d→0 零雷板穿越断言(|M|≥1 不变式)[SD] · R4 σ(L,D) 精确碰撞 + 行间种子重叠(σ := 10⁹+2²⁰·L+2¹²·D)[SD] · R5 F1 注记③"两通道全覆盖"非定理(注记改口)[SD] · R6 AC-10(d) 不免疫调参(条件化)[QA] · R7 AC-12(c) 单调腿空转(前缀一致性腿改写)[QA] · R8 shortfall 术语二义(钉死双字段)[QA] · R9 覆盖矩阵 5 处修正(⑬差分夹具 / 板ⅲ′对照板 / 板ⅰ负面证明 / F3 |U|÷|F| 落点 / ⑪间接承载加注)[QA] · R10 O4 裸奔 deferral(F5 第四独立入口 + Technical Setup 登记)[QA] · R11 AC-2 域违例腿(mine_density=0)+ AC-3 manifest 补全 [QA] · R12 报告 C 增列(付费格分位数 / 预计轮数 / 贴脸雾频率)+ F4"分钟级"条件化 + 分片续跑 [LD+PA] · R13 表达力与体验登记(纯矩形边界 + 雾=雷描边 AD/CD 裁决 + L1 教学身份 + target 递降显式决策 + P1 表述诚实化 + P3 义务冒领改写)[LD+GD] · R14 推理器 worklist 行为契约注记 + ADR 预算基准 + 禁全对全子集 [PA] - -### 分歧裁决(终审) - -雷数取整:SD blocking > GD recommended(F2b 是致命谓词、例板是向量模板)· AC-11 前提:QA blocking > SD nice(spec-AC 阻塞标准字面命中)· 第三轴:LD blocking > GD recommended(MVP 含 Boss 是定稿事实)· A4⑭:GD blocking > 主评审初倾 recommended("缺项即 blocking"门禁规则优先)· 冒烟 30s:PA 反对"风险"定性成立(估算 4.5–9s)· F1:SD"数学自洽"与 GD"度量空心"互补——公式正确地度量了一个错误的量。 - -### Nice-to-have(13) - -出生 3×3 位置钉死 · F2b 保守带量化 · f≤8d 浮点恰界数据作者规则 · `actual_fog_ratio` 定名 · Core Rule 3 三分支措辞补全 · AC-1 锚行存在性登记 + "Core Rules-3"〔D2〕标注 · AC-18 白名单倒置 · AC-11/12 attempts 期望改表读值 · 8×8/d=0.5 经验包络 lint · F4 流式断言姿态 · 冒烟耗时上限断言 · A4 OQ1 最大区域尺寸回执 · AC-5 腿 2 空转口 + 换根协议声明 - -### 终态(2026-09-09 同日) - -- **Blocking 核销**:B1–B8 全部修订落盘(落点见评审输出对照表;GDD header Status 行有逐条索引);cheap-now 6 项顺路核销(σ 打包防碰撞 / F1 注记③ 改口 / F3 |U|÷|F| 删承诺 / monotone_in_depth + 断言 E / EC5 玩家侧语义登记 / 布雷数 N≥1 护栏)。 -- **用语纪律回溯(2026-09-09)**:按 CLAUDE.md 新增用语纪律,本日志与 A1 GDD/registry/systems-index 中的自造词"非雾腿""双闸"已全部替换为直白表述(剔除雾格后的可推理率 / 两项判据)。 -- **用户三决策(拍板记录)**:① 达标判据修法 = 三层组合(F5 增第二判据 inferability_core〔剔除雾格后的可推理率〕+ F2 雾占比上限 0.25 + F4 对照断言);② target 绝对锚 = schema 域收窄 [0.85,1] + F4 断言 A″;③ 第三轴 = 登记约定 + 预留后门(Boss=Dmax 行 + elite_/boss_ 命名空间 + OQ6)。 -- **放行**:用户拍板**免独立 re-review 直接 Approved**(A3/A4 先例);systems-index 已更新,D2/registry 接口漂移回写完成。 -- **留档未核销(9 项 recommended,非阻塞)**:AC-10(d) 条件化(R6)· AC-12(c) 前缀一致性改写(R7)· shortfall 双字段钉死(R8)· ⑬ 连通分量差分夹具(R9 部分)· 板ⅲ′ 去雾对照板 + 板ⅰ single-only 负面证明(R9 部分)· O4 owner/deadline 登记 + F5 第四独立入口(R10)· AC-2 域夹具 + AC-3 manifest 补全(R11)· 报告 C 增列 + 分片续跑(R12)· 表达力/体验登记与 P1/P3 表述修订(R13/R14)——随实现期/调参期处理。 diff --git a/design/archive/gdd-2026-09-14/reviews/a2-minesweeper-rules-review-log.md b/design/archive/gdd-2026-09-14/reviews/a2-minesweeper-rules-review-log.md deleted file mode 100644 index bcb48edd..00000000 --- a/design/archive/gdd-2026-09-14/reviews/a2-minesweeper-rules-review-log.md +++ /dev/null @@ -1,34 +0,0 @@ -# A2 排雷玩法规则 — Design Review Log - -> 文档:`design/gdd/a2-minesweeper-rules.md` · 首次评审:2026-09-09(full:四专员 + CD 终审,独立会话) - -## Review — 2026-09-09 — Verdict: NEEDS REVISION → 同日修订核销,用户拍板放行 Approved(A3/A4/A1/B3 先例) - -**Scope signal**: L · **Specialists**: game-designer / systems-designer / qa-lead / ux-designer / creative-director(终审) -**Blocking items**: 6 | **Recommended**: 8(随批处理 + 留档) | **Prior verdict resolved**: First review - -**Summary(CD 终审)**:承重结构全部站得住——确定性引擎(AC-19/20/22)、三事件封闭回边 + 双发射源、F1–F4 经逐边界值检验与两轮独立复算零动摇;系统性弱点唯一且四专家收敛于同一处:引擎层诚实,但玩家感知边界层的承诺("拒绝可辨"、旗承诺、左键单义性、P4 氛围)缺乏数据契约与登记台账的承接。六项 blocking 全部为文本级/契约级、同日可核销,规则引擎承重语义零触碰。 - -### 阻塞 → 修复对照(同日核销) - -| # | 阻塞(来源) | 修复落点 | -|---|---|---| -| 1 | 连锁展开碾过旗子——"已开格+滞留旗"未定义状态;OQ1 上线后每轮流血(game-designer GD-1;CD 终审取修法 (a)) | Core Rule 6/F2 传播集 `∖ G`(链不越旗,经典 flood 惯例;旗 = 1 AP 链阻断器)· Rule 8"旗恒在未开格"不变式 · 新增 EC17 · AC-5 分支 2(b_chain 旗挡链,chain_size 13→12)· F2 同构声明加 G=∅ 域注记(双包含不受影响)· D5 教学"旗挡链" · registry 红线 + terminology 同步 | -| 2 | F4"到达序无关性"声明过宽被自身结算语义证伪(ap=1 [move,dig耗]/[dig耗,move] 执行集不同;EC15 自反例)(systems-designer SD-2 + qa-lead QA-2;主评审 ap=2 反例被更正为 ap=1) | 声明收窄((path_tag, hint, AP/RAP) 全批域不变;划分序无关仅异类四组合;同类多成员到达序 = 输入)· 出口映射改按结算时点 clears_map 键控 · "二态重合"句按精确命题改写(C_other 前缀无 C_dig/stop ⇒ 与 A3 Rule 3 不冲突)· AC-10 重写:c/d 改 ap=1 耗尽型救援(修 "rap += 8" 违例)+ 用例 f 联合清图 + 事件序断言 | -| 3 | 三源拒绝撑不起"拒绝可辨"——board_face 折叠 9 种玩家语义(ux-designer UX-1;CD 采 sub_reason 方案,否决 D1 反推 = 第二套实现) | `ActionOutcome` 增 `sub_reason` 封闭枚举 {not_adjacent, target_revealed, target_concealed, flag_present, flag_absent, no_path, out_of_catalog}(Core Rule 5/AC 前言/AC-21/EC9/registry 同步;批前免费窗口,批后 = 接口漂移) | -| 4 | D1 义务登记缺漏(ux-designer UX-2+R3 合并;B3 D1×4 先例) | D1×1 → **D1×6**:① stop 经 settle_batch ② 四格态一眼可辨 ③ 悬停预承诺+可挖域+chord 首遇提示 ④ 雷格可通行可读升台账 ⑤ 路径呈现语义定稿 ⑥ 单意图帧收集+voided 呈现+拒绝可感知——Interactions/Dependencies/UI Requirements/OQ5 升格/systems-index 五处同步 | -| 5 | AC 仪器修复包(systems-designer + qa-lead) | "EC4 腿"编号 **AC-6**(覆盖矩阵/门禁表对齐,计数 23 条)· b_chain/b_fog 夹具补 **spawn=(3,2)**(默认中心读法 B3 含雷违反不变式①——逐格复算)并入 OQ3 · board_invalid 五类封闭枚举 {inv1, inv2a, inv2b, inv3, inv4} · AC-7 拆 ap=1 同帧竞争 · AC-1⑤ 升有序断言 · AC-13 跨轮不重放断言 · AC-14 四对显式配对 · AC-4 单意图批等价护栏 · EC9 目录外用例 · OQ2 范围收窄 · AC-3"以最终产物板计" | -| 6 | 用语纪律违例——CLAUDE.md 点名反例"双闸"×2 在文;"腿"×15;"袋区/合成判定"无定义(全体专家一致) | 机械替换为直白语言 + GDD 头部"术语与约定"白话定义块 + registry `terminology` 条目(豁免通道) | - -### 随批必办(CD 裁定顺路核销) -- Rule 11 注记:雷格通行 = 有价捷径(1 AP + 雷→敌方优势,P3 管线计价)——GD-2 降级 residual(A1 clearable 闸按安全格 8 邻连通计,强制过路费板生成期被拦截,终审裁决降 recommended) -- OQ1 增惩罚重复性裁决项:hit=true 兑付有去重 vs hit=false 惩罚无去重的不对称——实测会话前钉死 -- systems-index 增 B1/B4 义务两条:高光兑现节点条目化(创意风险 #2/#3)· 连锁批量授予溢出吸收设计(GD-3 降级为条目化一行;game-designer R-5) - -### Recommended 留档(未核销不阻塞) -SD-5 联合清图被 stop 剥夺已入 EC6 条款 · UX 点击摩擦指标已规格化(归 D1、输入动作数、挂 A3 OQ3)· 远距复合意图 D1 评估项已登记 · D4/D1 命令式反馈例外已声明 · 其余 AC 补强(AC-10c/d 事件序已补;带旗末格永不 cleared 腿、同轮多雷腿、AC-17 变异残留可检化等 nice 项)与措辞类(雾内旗"赌"措辞、P4 依赖集中度披露)留待实现期顺路处理。 - -### 主评审结构结论(留档) -完整性 8/8;上游 A1/A3/A4/D2 交叉引用逐项核实一致;OQ1 在位(门禁核对项通过);夹具 b_spawn/b_degenerate 独立复算通过;registry 两条件目一致;依赖方向零单向遗漏(B1/B4/D1/D4/D5/A5 未设计以 systems-index 义务清单登记)。 - -**Prior verdict resolved**: First review → Approved(用户拍板,2026-09-09) diff --git a/design/archive/gdd-2026-09-14/reviews/a3-action-economy-review-log.md b/design/archive/gdd-2026-09-14/reviews/a3-action-economy-review-log.md deleted file mode 100644 index 160a8e50..00000000 --- a/design/archive/gdd-2026-09-14/reviews/a3-action-economy-review-log.md +++ /dev/null @@ -1,149 +0,0 @@ -# A3 行动经济 — 评审日志(Review Log) - -> 文档:`design/gdd/a3-action-economy.md` · 本日志由 /design-review 流程维护 - -## Review — 2026-09-07 — Verdict: NEEDS REVISION(待修订后 re-review) -Scope signal: M -Specialists: game-designer · systems-designer · qa-lead · economy-designer · creative-director(senior 终裁) -Blocking items: 6 | Recommended: 7 | Nice-to-have: 6 -Summary: 工程纪律为前置文档中最佳——8/8 章节齐备、零随机/零字面量、D2 回填值侧(Tuning Knobs 删 4 项 + registry `action_economy` + Status 登记)经独立核实属实、与 game-concept 参数级一致。但六条 blocking 暴露同一族病灶:仲裁、归属、状态语义等"没有公式可写的地方"系统性欠账,且 EC6/EC9 两处出现被自身文本证伪的对冲声称。creative-director 终裁:全部修复为局部文本与清单级工作,无需结构重设计;两个真结构变更(×2 阻尼、旗兑付语义定死)刻意延后并给触发条件。 -Prior verdict resolved: First review - -### 6 条 blocking(修订会话照此清单执行) - -1. **结束路径竞争仲裁缺失 + 状态行枚举顺序固化错误答案**:最后一格恰用最后 1 AP 挖开时 `ap_exhausted`/`cleared` 同时成立,无仲裁;States 表 Active 行把"AP=0 → ap_exhausted"列首位,自上而下实现即"耗尽优先"、静默丢失清图奖励。AC-4 字面未排除最后安全格;EC4 只覆盖 stopped vs cleared;同批次"停手+耗尽 AP 挖格"顺序漂移未定义。修法:总优先级 `cleared > stopped > ap_exhausted`(EC4 并入);AC-4 补前置"该格非最后安全格";新增"AP=1 挖开最后安全格 → (0, cleared) + 清图奖励 + 换图"AC;AC-8 双序断言;`ap_exhausted` 改分段定义 `conversion = 0` + `remaining_ap = 0` 不变式断言(删 ×0 乘数)。 -2. **账本扣减归属三处矛盾 + round_end 发射方未定义**:States L53(A3 扣)vs Interactions L62(A2 扣,且违反 systems-index"A2 只外发事件"与 D2"A2 经 A3 表间接承载参数"两份已定稿架构裁决)vs UI L134(A2 判定)。Rule 3 归零原子性要求归属唯一。修法:A3 独占账本(`try_spend(cost) -> bool`),A2 只判动作合法性并调用;写明 round_end 发射方与 path_tag 搭载契约;同次编辑声明 Waiting 谓词数据源(B1 信号,如 `next_round_mode` / `battle_over`)。 -3. **旗子双态语义空洞,EC9 被自身文本证伪**:只定义口袋旗(每轮重置),"已插旗"全文未定义;与 game-concept"轮次结算统一判定 +5/面"叠加,读法逐轮兑付 → "旗印机"(第 1 轮插 4 面 = 每轮 16 点 + 20 伤害当量零风险无界被动收入,超停手上限);EC9"停手刷资源无复利"对旗腿为假。修法:Core Rules 增"口袋旗(A3,轮次资源)/ 已插旗(A2,棋盘状态,跨轮保留)"双态定义 + 写明清图时已插旗去向;登记 OQ 给 B4/B1 携带硬约束(禁止无界逐轮重复兑付)与默认方案(CD 倾向"标中即消耗旗印",同时修复旗稀缺失真并铺出"全图标中"高光轨道 = 创意风险 #2);EC9 改"AP 腿无复利;旗腿由 OQ 决定"。 -4. **ActionEconomyTable schema 字段清单未交付,"回填已完成"为残缺真**:owner 只回填 4 值 + 复合价目事实;`dig_ap_cost` 自列 knob 在 D2 无落点(违 D2 Rule 1);插旗"1 AP + 1 旗"拆字段 vs 冻结常量未判定。修法:增 schema 定稿小节(逐字段名/型/域/knob 归属,含 place/pull 成本);registry 复合条目同步拆分;AC-10 拆 10a(registry 与 ConfigDB 逐字段相等,自动化)+ 10b(纳入 D2 AC-14 人工三要素,删自动化字面量硬 THEN)。 -5. **AC 测试载体缺失,headless 冒烟声称不成立**:AC-2~9 的 WHEN 引用未设计的 A2/B1 行为,A3 被动账本无注入口径。修法:AC 节增"测试载体与注入口径"前言——最小 API 面 `notify_round_start` / `request_dig(chain_size)` / `request_flag_place` / `request_flag_pull` / `request_stop` / `notify_settlement_done` / `notify_combat_end`,断言落 `last_round_end`;与 blocker 2 同一工件。 -6. **EC6 停手对冲声称失效,×2 契约未向下游索要**:两层对冲(不滚存、敌方时间税)对纯停手全部失灵(纯停手本来不滚存;时间税对称征收而停手路径总税更低)。CD 裁定:×2 支配未被证明(依赖未设计的 B1 兑付率),不做投机性结构改动;但契约必须写。修法:重写 EC6;Dependencies/Formulas 增"下游平衡契约"——B4 显式不等式目标带(B4 单格期望当量 ≥ stop_multiplier;清图奖励 > ap_per_round × (stop−clear)),以 D2 临时锚点(伏击 +3 / 清图 +10)代入首版,登记为 B1 GDD 验收项;契约含"B1 兑付对各 path_tag 同一线性率,否则比例锁定作废须回本 GDD 重议";OQ3 增"纯停轮占比"playtest 指标 + 预注册应急方案(分级乘数/停手门槛,超阈值触发)。 - -### Recommended(CD 要求同一修订遍内顺带完成) - -P1 声称精度(删杀戮尖塔对标句;Rule 2 留 A4 地形成本修饰钩子;移动免费改判归 P4;"压缩决策带宽"改"摊销 + 真压缩器是连锁与停手");F1 变量域绑 knob([0,8]→[0, ap_per_round],registry [0,16] 同步);knob 交互补全(ap×clear 上限、stop:clear 比值、ap_per_round 双重身份);状态机补全(Idle→RoundStart 出口、结算完成门控、Waiting→Idle AC);EC3/EC7"净耗 1 AP"措辞改"插+拔合计 2 AP"(AC-3 THEN 值本身正确不动);缺失 AC(EC3 挪旗、EC6 满 AP 停手=16 边界、EC5 连锁清图;AC-1 拆冷启动/硬重置);旗稀缺三元耦合注记 + 结构不变量 `clear_multiplier < stop_multiplier` + clear knob 低侧敏感性改判(控制权在 B4 清图奖励);价目表"挖开格"行补"仅限 8 向相邻"。 - -### Nice-to-have - -挖已插旗格合法性;旗上限语义注记(A5 安全旗);EC8 声明 out-of-scope(B1 域)+ 考虑"折算先于胜判";零随机确定性 AC;移动 0 成本过账本与否显式声明;game-concept 待定问题"停手/清图转化比例"复选框勾销(CD 要求修订遍完成)。 - -### 专家分歧(已由 CD 裁决) - -×2 修法三路线(结构阻尼 / 只写契约 / 契约条款)→ 契约 blocking + 阻尼降 OQ3 预注册;旗语义定死时机(现在定 / 只登记 OQ)→ 混合:双态定义本轮必须、完整兑付语义归 B4/B1 带约束 OQ;"配额执行退化"表述 → CD 修正为"决策密度不足";主评审"D2 回填已核实执行" → CD 确认部分推翻(值侧真、owner 交付残缺)。 - -### 同日修订落实(2026-09-07,用户两项拍板:旗兑付默认方案 + 契约锚点代入) - -阻塞项 → 修复对照: - -| 阻塞 | 修复 | -|---|---| -| 1. 结束路径竞争仲裁 | Rule 3 增总仲裁 `cleared > stopped > ap_exhausted`(与到达顺序无关、单事务一次判定);States Active 行改"每事务内按优先级仲裁";F1 改分段定义(ap_exhausted 恒 0 + remaining_ap=0 不变式致命断言,删 ×0 乘数);AC-4 补前置;新增 AC-4b(最后 1 AP 挖最后格 → cleared);AC-8 双序断言 | -| 2. 账本归属 + round_end 搭载 | Rule 9 新增:A3 独占账本 `try_spend`(余量检查+扣减+仲裁原子),A2 只判棋盘面合法性并调用;round_end 仍由 A2 外发(systems-index 裁决不变),payload 携带 A3 仲裁结果 `(remaining_ap, path_tag, continuation_hint)`;Waiting 出口消费 B1 回发 `next_round_mode`/`battle_over`;States 表标注"B1 编排权威、本表为 A3 资源侧视图";UI 节非法原因改双源 | -| 3. 旗子双态语义 | Rule 8 新增(口袋旗=A3 轮次资源/已插旗=A2 棋盘状态跨轮保留,清图随图消失);EC9 改"AP 腿无复利,旗腿由 Rule 8/OQ5 封死";OQ5 定稿:**硬约束=兑付一次性、当轮结算、禁止逐轮重复兑付;默认方案(用户拍板)=标中旗奖励锚 B4 最低档安全格同档、当轮一次性兑付,无任何跨轮持续奖励**(+5/面 临时值作废);标记移除/保留归 A2/B4 表现层 | -| 4. schema 字段清单 | 新增"ActionEconomyTable Schema 定稿"节:十字段全集(7 knob + 3 冻结:move/chain/unit),类型域齐备;AC-10 拆 10a(registry 十字段逐项相等,自动化)+ 10b(纳入 D2 AC-14 人工三要素);D2 Core Rules 表行/Status 行、registry 复合条目拆分同步回写 | -| 5. AC 测试载体 | AC 节增前言:最小 API 面(notify_round_start / request_dig(chain_size, clears_map) / request_flag_place / request_flag_pull / request_stop / notify_settlement_done / notify_combat_end),只读观测量 ap/flags/phase/last_round_end;AC-1 拆 a/b、AC-2 加 chain_size 三点与无连锁基线、AC-3 拆 a/b、AC-5/6/7/9 重写、新增 AC-11~14(Waiting→Idle/Idle 拒绝/Idle 出口/结算门控)、AC-15(满停=16 上界)、AC-16(挪旗 2AP)、AC-17(零随机确定性);EC8 声明 out-of-scope | -| 6. EC6 对冲 + F2 契约 | EC6 诚实改写(对冲失效声明);新增 F2 下游平衡契约:B1 单一线性兑付率条款 + 不等式①(B4 单格期望当量 ≥ stop_multiplier)②(清图奖励 > ap×(stop−clear)),首版锚验证(清图 +10 > 8 ✓;①作为预算目标下发 B4,用户拍板代入方案);登记为 B1 GDD 验收项(systems-index 门禁增补记录已登记);OQ3 增预注册指标(纯停轮占比 >50% 信号)与应急方案(分级乘数/停手门槛);OQ6 归一表义务(owner B1) | - -顺带落实(CD 同遍要求):P1 声称修正(删杀戮尖塔对标、Overview 诚实口径、移动归属 P4);Rule 2 留 A4 地形成本修饰钩子 + 补挖/拔相邻口径 + 无 chord 声明;F1 变量域绑 knob([0, ap_per_round]);knob 表补 flag_place/pull 两 knob + 交互乘积三条 + clear 低侧改判 + 结构不变量;EC3/EC7"净耗 1"改"合计 2 AP";EC10(最后 1 AP 清图)/EC11(挖旗格拒绝)/EC12(旗上限)新增;game-concept 转化比例复选框勾销 + 标雷判定行重锚注记;registry 增 round_end_carrier / arbitration_priority 事实。 - -**修订中新增的设计决策(re-review 须覆盖)**:拔旗限相邻(与挖/插对称);挖已插旗格拒绝须先拔(EC11);AC-14 结算未完成时 round_start 拒绝(fail-fast)。 - -## Review — 2026-09-07 — Verdict: NEEDS REVISION(re-review,二轮) -Scope signal: M -Specialists: game-designer · systems-designer · qa-lead · economy-designer · creative-director(senior 终裁) -Blocking items: 7 | Recommended: 8 | Nice-to-have: 5 -Summary: 首轮 6 blocker 中 1/2/4/5 核验为真解决、③纸面解决、⑥未真解决。本轮新暴露 7 条 blocking,核心是 F2 契约的数学错误被三专家独立击穿(②博弈树算错——停手不放弃清图奖励,修正阈值 ≈14-16 使 +10 锚 FAIL;①缺雷风险项)与 OQ5 最低档锚使插旗净 EV ≤ 0;另有 EC12 跨轮封顶被 Rule 8 证伪、AC 可测性四缺口(返回值/批次语义/phase 观测域/EC11 豁免声明)、纯停手轮 round_end 无发射方、D2 AC-7 示例值出域同批矛盾。CD 终裁:契约重写 + 规格文本补丁量(1-2 天、不动结构),够不上 MAJOR,但不能带病放行。 -Prior verdict resolved: Partially(1/2/4/5 resolved;3 paper-only;6 not resolved) - -### 7 条 blocking(下轮修订照此清单执行) - -1. **F2 不等式②博弈树错误**:Rule 4 同图续挖 ⇒ 停手不放弃清图奖励 C;停手→下轮清图双重收益仅付一轮敌方结算,修正阈值 ≈ 2(r+k) ≈ 14-16,+10 锚 FAIL;Tuning Knobs 节"r 点差 + 1 轮敌方结算"已与②自相矛盾。修法:重写为含敌方结算当量 k 的不等式(CD 裁决采纳 systems 框架,k 登记 B1 验收项),+10 锚重锚并如实记录。 -2. **F2 不等式①缺风险项**:安全格奖励 ≠ 挖掘 EV(缺 P(雷)×惩罚项);弱 ≥ 在边界处漂向停手。修法:严格不等式或显式风险条款(B2 owner)+ 混合策略推导写入 F2。 -3. **OQ5 锚经济空心**:最低档锚 = 2 点 = 1 AP 停手等价 ⇒ 插旗最好打平;B4 留余量时旗 farming+停手 = 20/轮破 16 上限;兑付 keyed to 旗实例/格子未定,拔-插重置资格漏洞。修法:锚与最低档解耦(旗奖励 ≥3 点当量)+ 兑付事件以放置实例为键、拔插不重置资格。 -4. **EC12 跨轮封顶被证伪**:R1 插 4 旗停手,R2 口袋重置 4 后拔旧旗 → 5 > 上限。修法:满袋拔旗拒绝或钳制(择一写死)+ 跨轮拔旗 AC。 -5. **AC 可测性四缺口**:request_* 声明 bool 返回;"无记录"改 last_round_end 值断言(防先 emit 后覆盖假通过);AC-8 重写为可测子集 + stop-first 腿显式 logged deferral;声明 phase 观测域(RoundEnd 非静息态,AC-9 半边修);EC11/拔旗相邻/Rule 8 留旗加 out-of-scope 或 AC(日志明列 must-cover)。 -6. **纯停手轮 round_end 无发射方**:停手走输入层直调 A3,round_end 由 A2 外发——无 A2 动作的轮次无发射者;跨调用方批次仲裁机制未命名。修法:Rule 9 择一写死(A3 直发或 A2 代理转发)+ 批次队列 owner。 -7. **同批跨文档不一致**:D2 AC-7 示例 ap_per_round=99 出 A3 schema 域 [1,32](改 12 等域内值);clear_multiplier < stop_multiplier 结构不变量登记为 D2 跨字段 validate() 规则。 - -### Recommended(8) -OQ3 阈值 50%→20-30% + 零动作停手轮先行指标;删"无 chord=经典扫雷语义"措辞、chord 缺席登记 CD 风险 #2 候选;3AP 改错税惩罚对象错位(OQ2 增"挖旗格直接消耗旗+1AP"对照变体);EC5 退化图登记 A1/B1 下游约束;大图 AP 供给比例条款(A1/B1 验收项);F1 上界更名"折算子上限";chain_size 语义定义 + AC-17 重置协议 + settlement_done 后 phase 停留声明 + EC2 拔腿 + GIVEN 构造序列 + THEN 绑表值声明;B4"当量"计量基准(过期折现 vs 面值)。 - -### 专家分歧(CD 已裁决) -停手-下轮清图是否严格支配(economy vs systems)→ 采纳 systems 含 k 框架;chord 补否(game 要求诚实措辞)→ 转 OQ 非 blocking。 - -## 同日二轮修订落实(2026-09-07,用户三项结构性设计决策 + 二轮 7 blocking) - -> 本轮为**结构性修订**而非文本修补:用户拍板三项设计决策,从根上消解二轮评审最重的 blocking。 - -### 用户拍板(2026-09-07) - -1. **三向效果映射**:安全格→主角 buff;标中旗→怪物 debuff;踩雷→怪物 buff。全部扫雷收益以战斗效果直兑,无抽象"资源点"(与 systems-index 既有的 B2 伏击词条门禁天然一致)。 -2. **旗子上限取消**:旗为 A2 棋盘状态单态(原口袋旗双态作废),数量不限,稀缺性由 AP 机会成本 + 8 向相邻承载。 -3. **停手改产 RAP**:剩余 AP 1:1 转存 RAP 池(remain action point),攒满 `rap_refresh_cost`(默认 8)可刷新雷图(无清图奖励);清图剩余 AP 作废(用户追加拍板:**F1 折算公式整体删除**,清图奖励为 B4 差异化插槽、预留按图类型分支)。RAP 生命周期 = 战斗域(用户拍板:每场战斗清零)。 - -### 二轮 7 blocking → 修复对照 - -| 阻塞 | 修复 | -|---|---| -| 1. F2 不等式②博弈树错误(+10 锚 FAIL) | **随结构作废**:停手不再产出战斗资源,"停手 vs 清图"同量纲比较不复存在;F2 整体删除,不修正——移除病灶而非修复 | -| 2. F2 不等式①缺风险项 | 同上作废;风险项以健康条件形态存续于新 F1 条款 3(P(雷)×敌方增益当量,B2 有界 + A1 可推理率共同验收) | -| 3. OQ5 锚使插旗净 EV ≤ 0 | 三向效果定稿:标中旗 = 怪物 debuff;新 F1 条款 2——debuff 档位**严格 >** 最低档安全格 buff 当量;兑付以放置实例为键、拔插不重置资格(Rule 8/OQ5) | -| 4. EC12 跨轮封顶被证伪 | **随旗上限取消而灭失**:口袋旗账本不存在,无越限可言;EC12 改写为 RAP 生命周期边界条目 | -| 5. AC 可测性四缺口 | API 面全面改版:全部 `request_* -> bool`(拒绝直接断言返回值);phase 观测域声明 {Idle, Active, Waiting}(RoundEnd 瞬态,AC-9 改写);AC-8 改"先挖后停"可测子集 + stop-first 腿**显式 logged deferral** 至 A2 集成(门禁登记);"无记录"改 `last_round_end` 值断言(AC-4b);EC11/相邻性/留旗/EC8/刷新奖励全部入覆盖声明(out-of-scope + 承接方);AC-17 补全新实例重置协议;多步 GIVEN 附构造序列;THEN 值绑表值声明 | -| 6. 纯停手轮 round_end 无发射方 | Rule 9 改**双发射源**:A2 外发棋盘路径(原裁决不变)、A3 直发停手路径(payload 同构);systems-index 门禁记录同步 | -| 7. D2 同批跨文档不一致 | D2 delta 回写:AC-7 示例值 99→12(域内,附出域机理注记);~~clear < stop~~ 不变量随折算删除而灭失(无需新增跨字段校验) | - -### 顺带落实(二轮 recommended) - -OQ3 阈值 50%→20–30% + 刷新率/战斗先行指标(原"分级乘数/停手门槛"应急随折算作废删除,新应急:refresh 成本调参/冷却);"无 chord"措辞改"有意偏离经典" + chord 缺席登记 game-concept 创意风险 #3(与 #2 高光缺失合并归 B1/B4);EC5 退化图钓鱼风险登记 A1/B1 下游约束;chain_size 语义定义(附加格数 ≥0);P2 支柱来源清单、game-pillars P3 措辞、game-concept 四处旧规则 + 两条待定问题勾销同步修订;B4 清图奖励差异化插槽(用户新增设计要求,OQ6 + systems-index 门禁)。 - -### 修订中新增/变更的设计决策(re-review 须覆盖) - -- 三向效果映射的经济健康依赖 B1 对照表(F1 条款 1)——新契约比原 F2 简单但同样是 B1 验收项 -- RAP 战斗域生命周期 + 满停一刷基线节拍(`rap_refresh_cost` = `ap_per_round` 的巧合式默认,无结构耦合) -- `request_refresh()` 仅 Waiting 相位受理(编排期资源操作,防绕过仲裁) -- 跨文档已回写:D2(三次回填 delta + AC-7)、registry(action_economy 全条目重写)、game-concept(四处 + 创意风险 #3)、game-pillars(P2/P3)、systems-index(状态行 + 门禁契约改写) - -## Review — 2026-09-07 — Verdict: NEEDS REVISION(re-review,三轮) -Scope signal: M -Specialists: game-designer · systems-designer · qa-lead · economy-designer · creative-director(senior 终裁) -Blocking items: 8 | Recommended: 9 | Nice-to-have: 8 -Summary: 用户三项结构性拍板被终裁确认为对前两轮病灶的正确"移除而非修补"——折算量纲/口袋旗账本/停手现金流三类错误面整体灭失,二轮 7 条中 5 条真解决、结构层经边界值与全序组合推演无退化,无需结构返工。但存在两条移动病灶线:F2 的跨轮激励职责出现无人认领的直系继任("清图 vs 弃图刷新"支配性不等式无人持有,OQ3 预注册对该环结构性失明,EC6"病灶不存在"自证连续第三轮被击穿);跨文档同步族复发(systems-index L69 B1 门禁条款仍载已作废的"停手折算")。叠加 AC 构造算术三处错误、OQ5 兑付键自相矛盾、F1 条款 3① 不可证伪、输入×相位矩阵空洞、schema 跨字段无守卫。CD 终裁:8 条 blocking 全部文本/契约级(1.5–2.5 人天),修毕经 blocking 核销 + F1/AC 两节抽查即可放行,不设第四轮全量评审。 -Prior verdict resolved: Partially(5/7 resolved;#2/#3 部分解决——存续形态恰为本轮 B4/B2) - -### 8 条 blocking(同日修订照此清单执行,CD 终裁合并口径) - -1. **B1 "清图 vs 弃图刷新"支配性不等式无人持有 + OQ3 预注册失明**(game-designer G1 + economy-designer #1/#2 合并,双腿一条):理性环"挖完确定格→不确定即停→攒满刷新"有真实进账零雷险,F1 条款 3② 仅 C>0 守不住;原三指标对该环结构性失明(先挖后停非纯停手、温和变体刷新率低、>80% 即弃使碎片区读数反低)。修法:F1 增条款 5 + OQ3 增弃图率/完成度直方图/停手轮旗动作占比 + 失明声明 + EC6 形态限定改写。 -2. **B2 OQ5 兑付键自相矛盾**(game-designer):"以放置实例为键" ∧ "拔旗重插不重置资格"不可同时为真(重插=新实例=新资格 ⇒ 2 AP/debuff 当轮农场,重开二轮 #3);registry 只登记矛盾一半。修法:资格锚定**雷格实例**(CD 裁定)写死 Rule 8/OQ5 + registry + systems-index + game-concept 四处同步。 -3. **B3 AC 构造算术错误三处**(systems-designer S1/S2 + qa-lead Q1/Q2/Q3):AC-5"3 次挖"得 ap=5 非 3(与 AC-6 同构造不同期望,spec-AC 矛盾);AC-7 前两腿默认表下不可达(EC2 在全 1 价目下不可构造);AC-6b chain_size 差一(k→k−1)+ THEN 散文混值位。 -4. **B4 F1 条款 3① 不可证伪 + 无闭合 owner**(systems-designer S3 + economy-designer #3):无显式不等式、无锚、"A1/B2/B4 共同验收"= 无人签字。修法:显式不等式(P(安全)×buff 下界 > P(雷)×敌方增益上界,锚 A1 可推理率参数 × B2 上限表值)+ B1 单一闭合 owner + provisional 目标带 + B1 强制检查点。 -5. **B5 输入×相位矩阵空洞 + 拒绝机制二义**(systems S4 + qa Q4/Q5/Q6 + game G4):notify_* 返回类型未声明(AC-14 bool/致命两读)、round_start@Active 无守卫(B1 双启动静默 AP←8)、refresh@Active 零覆盖。修法:8 输入×3 相位矩阵表 + 全 API 统一 bool 口径 + AC-18 新增。 -6. **B6 schema 跨字段退化无守卫**(systems S5 判 blocking / game G9 判 recommended,CD 采 blocking):dig=8×ap=1 双双域内 → 挖掘永久不可用软锁;"任意域值均可运作"对跨字段为假。修法:跨字段声明(任一动作成本 ≤ ap_per_round)+ D2 validate() 经接口漂移登记。 -7. **B7 request_refresh 契约三处未钉死**(game G3 升级 + systems S7):决策主体两读(玩家 vs B1 自动)、跨相位连刷语义未定义、refresh⇒new_board 违约无 fail-fast。CD 裁定:玩家发起、B1 代理调用;多次受理合法(时间税定价,冷却入应急方案非规则)。 -8. **B8 跨文档残留批次**(game G8 + systems S8 + economy #7 漂移腿):systems-index L15/L69(**L69 为 B1 门禁条款,危害最高**)"停手折算"旧口径、game-concept"旗子减半"void 候选、A3 引创意风险 #2 实为 #3、OQ6 一名双主、index 缺 D1←A3 边。 - -### 专家分歧(CD 已裁决) - -跨字段校验定级(systems blocking vs game recommended)→ 采 blocking(A3 为 schema owner,二轮 #7 跨字段先例不得双标);"锚缺失"与"指标失明"打包(game 合一条 vs economy 分两条)→ 合并为 B1 双腿;Q4 独立 vs 并族 → 并入 B5 矩阵族;G3 refresh 决策主体 → recommended 升级 blocking(改变 B1 接口面,须在 B1 GDD 前钉死)。Recommended 九条全部接受,G6/E6(RAP 清零呈现)与 Q9(拒绝原因收口)要求同一修订遍内完成。 - -## 同日三轮修订落实(2026-09-07) - -| 阻塞 | 修复 | -|---|---| -| 1. 弃图支配 + 指标失明 | F1 重构为**五条款**(新增条款 5 弃图支配性:C ≥ 弃图节省的期望雷险 + 轮数差×结算强度,B1 闭合,含反向耦合注记与 +10 provisional 验算);EC6 改"形态限定版"诚实声明(①纯停手环自惩成立 ②挖后停环三刹车 + 守门条款指引);OQ3 置换:增弃图率(>30% 观察/>50% 干预)、完成度直方图(<60% 占比 >50%)、停手轮旗动作占比(>50%)、供给 >8 轮占比,附失明声明;应急阈值与 B2 强度联动注记 | -| 2. 兑付键 | Rule 8/OQ5 改**资格以雷格实例为键**(每雷本次战斗至多兑付一次、放置实例仅为当轮结算载体、拔旗重插不恢复已消费资格、换图新雷新实例);registry flag_rules、systems-index 门禁、game-concept 标雷判定行四处同步 | -| 3. AC 算术 | AC-5 构造改 5 挖(rap=3 保正确);AC-7 改 debug override 夹具(flag 成本 2,域内)+ 承载声明(EC2 默认表不可构造);AC-6b 改 GIVEN ap=8/余 4 格、WHEN request_dig(3, true)、THEN 纯值断言;AC-16 GIVEN 改经 API 构造;AC-5b 第二腿补构造序列 | -| 4. 条款 3① | F1 条款 3 显式不等式 + 两端锚(A1 可推理率参数/B2 上限表值)+ B1 单一闭合 owner + provisional 目标带(伏击 +3/敌 18HP/4ATK 代默认表)+ B1 强制检查点 | -| 5. 相位矩阵 | States 节增**输入×相位矩阵表**(8 输入×3 相位);全 8 API 统一 bool(含 notify_*),相位非法 = false + 状态不变 + debug 诊断;AC-14 THEN 改返回 false + 状态不变断言;新增 AC-18(Active 列全覆盖,防双启动);AC-11 增 settlement_done 后 phase=Waiting 中间断言;Idle 行补 ap=0;RoundStart 瞬态声明 | -| 6. 跨字段校验 | Schema 节增跨字段校验条款(任一动作成本 ≤ ap_per_round,validate() 级、违规致命);rap_refresh_cost 行"任意域值均可运作"改"单字段域内";域上界护栏注记;D2 Core Rules 表行 + Status 行登记(schema 类承载,条件性夹具);registry 增 cross_field_validation | -| 7. refresh 契约 | Rule 11 重写:决策主体 = 玩家经 D1 发起、B1 代理调用(B1 接口须含玩家意图路径,禁自动刷);同一 Waiting 多次受理合法(EC15 新增,16 RAP 连刷两图);无结构冷却(OQ3 应急);new_board 回发为契约义务、违约 B1 fail-fast | -| 8. 跨文档残留 | systems-index L15(A3 行删"停手折算")、L69(B1 门禁来源清单改五源)、L57(D1 ← A2,A3,B1)、L90 门禁全量改写(①–⑤ + refresh 契约 + EC4 义务清单 + D1 RAP 反馈)、进度行;game-concept 标雷判定(雷格键)+ 标错惩罚候选(删"旗子数量减半");registry 三处 + 修订记录;A3 创意风险 #2→#3 | - -顺带落实(CD 全部接受的 recommended):条款 2 第二锚(连锁放大边际基准 provisional 1:1 + 总吞吐对账 + 挤占轮成本核算义务);P1"第一个取舍"口径诚实化(构成选择 + 轮末尾巴 + 供给指标);RAP 战斗末清零 D1 呈现 + D5 教学落点(UI/Interactions/Dependencies/OQ4);Q9 收口(拒绝原因读数 defer 至 D1/A2 集成,out-of-scope 声明);try_spend 后 A2 读 last_round_end 组包为接口契约(Rule 9);EC4 deferral 义务清单入 systems-index 门禁;夹具一致性声明(clears_map=false 余量登记);OQ2 双重职责登记;OQ6 biome 战斗域恒定约束;AC-12"无输出"→ last_round_end null 值断言;AC-13 去 RoundStart 瞬态引用;单槽 last_round_end 盲区注记;EC14 不变式断言 debug 载体声明;EC5 初始 3×3 定义落点归 A2;AC-6 增 RAP 跨图保留腿(EC9 cleared 腿);"满停一刷"与纯停手预警同源注记;F1 与门禁编号对齐(①–⑤)。 - -**流程警示(CD 登记)**:"病灶不存在"句式连续三轮被击穿——此后凡此句式必须附形态限定与反例推演义务;跨文档同步族二轮 #7 复发,病根在流程,修订遍须附"本轮已同步文档清单"。 - -**修订中新增/变更的设计决策(下轮核销须覆盖)**:兑付资格锚雷格实例(CD 裁定);refresh 玩家发起/B1 代理 + 多次受理合法 + new_board 契约义务;F1 五条款(新 3/5 条款 + 条款 2 第二锚);跨字段校验规则;全 API bool 口径 + 相位矩阵;OQ3 四项新指标 provisional 阈值。 - -### 放行记录(2026-09-07) - -用户拍板:8 条 blocking 同日核销后**免独立 delta 核销,直接标记 Approved**(未采纳 CD"独立核销 + F1/AC 抽查"建议与主评审"新会话核销"推荐——记录在案)。核销依据 = 上表对照 + 残留扫描("停手折算"/"以放置实例为键"/"三条款"等旧口径全文零残留;AC-1a~AC-18、EC1~EC15 编号完整;schema 七字段 A3/D2/registry 三点一致)。A3 状态置 Approved,下一系统 = A4 地形变异(设计顺序第 3 位)。**下游强制检查点不因免核销而豁免**:B1 GDD 启动时须承接 F1 条款 3/5 闭合对账(强制检查点)与 refresh 玩家意图路径验收;B4 承接雷格实例兑付键与清图奖励插槽。 diff --git a/design/archive/gdd-2026-09-14/reviews/a4-terrain-variation-review-log.md b/design/archive/gdd-2026-09-14/reviews/a4-terrain-variation-review-log.md deleted file mode 100644 index 11fbc803..00000000 --- a/design/archive/gdd-2026-09-14/reviews/a4-terrain-variation-review-log.md +++ /dev/null @@ -1,77 +0,0 @@ -# A4 地形变异 — 评审日志(Review Log) - -> 文档:`design/gdd/a4-terrain-variation.md` · 本日志由 /design-review 流程维护 -> 成稿会话 lean 门禁注记(systems-designer/qa-lead 各一,2026-09-08)不计为独立评审——本文件首条即首次独立评审。 - -## Review — 2026-09-08 — Verdict: NEEDS REVISION(同日修订完毕,待独立会话 re-review) -Scope signal: M -Specialists: game-designer · systems-designer · qa-lead · economy-designer · level-designer · ux-designer · creative-director(senior 终裁) -Blocking items: 8 | Recommended: 9 | Nice-to-have: 3 -Summary: 核心架构——变异即数据、零特判、生成期承重约束、D2 schema 闭合——经六向对抗仍成立,下游契约质量高于项目均值。但三处承重表述失真(可推理率对账公理自相矛盾、Player Fantasy"三选项"失实、"雾格全部全价"公式半假),叠加 AC 硬伤与 deferral 闭环悬空,未达本项目 spec-AC 一致性阻塞标准。creative-director 终裁:全部修复为文本与契约层工作,不触碰用户拍板的任何承重规则(否决"清图豁免雾格"选项);修订后预期一轮闭合。 -Prior verdict resolved: First review - -### 8 条 blocking(修订会话照此清单执行) - -1. **可推理率对账公理自相矛盾 + Rule 5 单向建模 + 厚度≤2 定理未入文**:Dependencies-B1 行"雾不再作为可推理率减项"与 Rule 5/A1 行/A3 条款 5 注记三方冲突。数学事实(多专员独立验证):雾格⊆非 0 安全格 + 区内无雷 ⇒ 每雾格必有非雾雷邻居 ⇒ 雾区最厚 2 格(3×3 实心雾块不可能)、恒为雷集切比雪夫 1-膨胀边界带、雾面积占比 f≤8d 隐式硬上界;且雾格=已知无雷必邻雷 ⇒ 雾边推理局部反而更易(k 格雾区外环必含 ≥⌈k/8⌉ 雷),"信息剥夺"部分反转为"雾边=推理锚"。 -2. **Player Fantasy"三选项"失实 + B4 定价锚自相矛盾 + P3 声称不过自家裁剪判据**:盲挖零命险、绕开=弃图、买情报 MVP 不存在——权衡感塌缩为"何时交 AP 过路费",正踩自设反向护栏;B4 行却按"无雷险安全收割"最低档定价。CD 裁决:文本级修复(幻想诚实改写 + B4 两条硬约束 + P3 降格为"信息切面"),否决清图豁免雾格(违反零特判拍板)。 -3. **"雾格全部按全价 AP 结算"半假**(level-designer 新发现):邻非雾 0 格的雾格会被免费链开(GDD 自身 EC4 明载)——预算注记/A1 验收/B4 定价口径须改按"链不可达雾格数 × dig_ap_cost"计;量纲同步修正(格×AP×占比 ≠ AP)。 -4. **EC2 触发条件不完整 + 降级无观测**:无解不只"面积不足"——雷膨胀皮肤连通分量碎裂同样无解;level 2 恰是小图低密高发关,静默降级使 P4"解锁新变异"参数侧塌陷且无指标。修法:判据含连通性 + 降级率埋点 + 最低雾出现率参数义务(禁放宽 Rule 3 达成)。 -5. **EC3 预设 A2 未定义行为 + 奖励归属冲突**:"初始自动展开只开 9 格"与出生区多 0 格的 flood-fill 语义冲突;若展开触雾,game-concept"初始展开无奖励"与 EC4"照常入库"无解。修法:Rule 7 扩展的可达域由 A1 生成期确定性计算(A4 原文已有"及其自动展开范围",补确定性来源 + 登记落点);EC3 错误括注作废、邻接合法结论保留。 -6. **AC 四处硬伤 + deferral 闭环悬空**:AC-1 写死 unlock_level=2(违"期望值由表值推导",EC9 调参即假失败);AC-2 双孔(biome_tag≠∅ 时不成立 + u=1 时 u−1=0 越域);夹具前言失实(实为 3 错误夹具 + 1 合法数据变体夹具);A1×11/A2×4 未入 systems-index 门禁记录(对侧无核对义务,"deferral 以对侧登记为生效条件"可永不生效)。 -7. **EC11"可被 counter_item_ids 分别定向"与 schema 矛盾**:该字段为 variant 行级(类型级),两实例共享同一 fog 行清单;照登会使 A1 验收项测出伪语义。 -8. **"雾区无雷"教学零 MVP 验收落点 + 教学口径缺口**:D5 在 Alpha 而雾 MVP level 2 首遇,D1 仅形容词规格、零 enumerated 验收;教学缺"雾内无连锁折扣"(连锁止于雾界玩家视角="连锁莫名断了",触发被骗感护栏);AC-9"任何色板可读"无操作化定义。 - -### Recommended(CD 裁决同遍顺带完成) - -hide_numbers⇒safe_nonzero 跨字段校验(EC4 级联停止是承重规则寄生结论,防未来 cell_constraint=any 行击穿);OQ3 弃图率/完成度指标雾板分层;unlock_level=2 雾占比按关爬坡(教学尖刺);EC10 升格参数域拒绝项+"全图近无数字"描述修正;已开雾格结束拍(底色 tint + 雾区全开完成信号,D1 验收候选);雾区几何 UX 下限(宽度≥2)并入 A1 参数域;AC-3 eligible 未定义 + 夹具行 unlock_level 未指定、AC-5×AC-7 程序构造冲突豁免、空表豁免声明、AC-6 夹具基线漂移、runner manifest 退出码枚举、A1 项 4/5/10 义务措辞改可判定谓词;board_biome 非空无校验 owner(登记 A1 域校验);"跨雾推理"措辞降调 + EC5 标错惩罚推论前置 A2 原型会话。 - -### Nice-to-have - -art-bible 样张补"旗×雾纹理×边界"三重叠加用例;EC11 双雾带合并呈现的玩家可感知性注记归 A5 期;"雾散"动效维持 MVP 不承诺。 - -### 专家分歧(已由 CD 裁决) - -弃图方向因果(economy/systems 边界演算 vs game-designer"必然推高非定理")→ game-designer 胜:两力反向、净效应非定理;登记单向缺陷双方一致,修法一致。连锁开雾格(qa-lead"雾格非 0 永不被展开打开" vs A4 自身 EC4 + level-designer)→ level-designer 胜:qa-lead 误读 Rule 4(不传播 ≠ 不被开);EC3 结论保留、理由删除。幻想处置层级(game-designer 清图豁免选项 vs 文本级修复)→ 文本级修复,豁免否决。 - -### 同日修订落实(2026-09-08,八项阻塞全部核销) - -阻塞项 → 修复对照: - -| 阻塞 | 修复 | -|---|---| -| 1. 对账公理 + Rule 5 单向 + 厚度定理 | Rule 3 增"结构推论"段(厚度≤2 / f≤8d / 元知识可数化,登记 A1 验收);Rule 5 增双向效应段(寂静减项 × 推理锚增项,禁单向补偿);Interactions/Dependencies A1 行改双向净效应建模;Formulas 节条款 5 对账注记改三腿入账(雷险腿消解 + 信息腿双向 + AP 腿),B1 强制检查点输入;registry `fog_ap_note` 同步改写 | -| 2. 幻想 + B4 + P3 | Overview/Player Fantasy 三选项框架改诚实版(雾=清图必经段、绕开=A3 风险退出、买情报标注 A5 期);"里面有价值"由 B4 两条硬约束兜底(雾奖励档位下界 ≥ 最低档安全格 buff 当量、清图奖励锚随雾面积上浮——Interactions B4 行 + OQ3 登记 B4 验收);P3 锚点降格:"变异框架的长期载体,迷雾仅信息切面,雷险由岩浆/冰冻承接" | -| 3. 全价公式 | Formulas 排除声明改两态口径:链可达雾格免费链开、链不可达全价;预算不等式 `链不可达雾格数 × dig_ap_cost ≤ 轮数上限 × ap_per_round`;Rule 4 连锁 bullet 澄清"不传播 ≠ 不被开";registry fog_ap_note 同步 | -| 4. EC2 | 触发条件扩"面积或连通分量尺寸";登记 A1:降级率按 (level_index, node_depth) 埋点 + BoardGenTable 最低雾出现率义务 | -| 5. EC3 / Rule 7 | Rule 7 补"可达域由 A1 生成期确定性计算"+ 初始展开无奖励优先级双保险注记;EC3 括注作废、约束谓词改"出生 3×3 格集及可达域内无变异格,邻接不构成违反" | -| 6. AC 硬伤 + 闭环 | AC-1 改"unlock_level=表读值域内断言";AC-2 双孔修复(tag 条件化 board_biome + 仅 u>1 测 u−1);夹具前言改"3 错误 + 1 数据变体"并补 runner manifest 三行退出码 + 空表豁免声明;A1 清单扩为 15 项并同步登记 systems-index 门禁记录(对侧 GDD 门禁评审逐项核对,缺项即 blocking) | -| 7. EC11 | 改"独立布置身份与独立 board_gen 取号;穿透定向粒度=变异类型(共享 fog 行清单),实例级定向归 A5 期新字段" | -| 8. 教学落点 | UI Requirements ② 登记 D1 MVP 验收两条(图例条目 + 首遇提示触发定义=雾格首次与已开区相邻、一次性、可回看);D5 教学口径补"雾内无连锁折扣/连锁止于雾界属正常/雾格成本两态"+"每雾格必邻区外雷"教学候选;AC-9 操作化(色板无关线稿 + 明度对比数值下限 + 新 biome 强制复测 + 宽度 1 雾带与三重叠加最坏用例) | - -顺带落实:hide_numbers⇒safe_nonzero 跨字段校验(schema 校验节);EC10 升格参数域拒绝 + 呈现描述修正;OQ1 扩容(厚度边界内参数域 + 最低出现率 + 埋点);OQ3 增 B4 两硬约束引用;OQ3 分层指标注记回执 A3(Interactions B1 行);AC-3 eligible 定义 + 夹具行 unlock_level=1;AC-5×AC-7 class_name 豁免;AC-6 来源类别断言;board_biome 非空域校验登记 A1;已开雾格 tint + 完成信号(D1 验收候选);"跨雾推理"措辞降调;lean 版"全价"结论在 Formulas 节头声明部分作废。 - -**修订中无新增设计决策**——全部修复由评审结论与终审裁决直接推导,未触碰用户拍板承重规则(生成期布置约束 + 零特判 + fog unlock_level=2)。 - -## Review — 2026-09-08 — Verdict: NEEDS REVISION(re-review #2,同日修订完毕;**同日用户拍板:按 CD 终裁建议 delta 核销免第三轮 full 评审,直接标 Approved【A3 先例】**) -Scope signal: M -Specialists: game-designer · systems-designer · qa-lead · economy-designer · level-designer · ux-designer · creative-director(senior 终裁) -Blocking items: 6 | Recommended: ~14 | Nice-to-have: ~15 -Summary: 首轮 8 阻塞核销经六方边界值对抗确认方向全部成立、承重规则零触碰(厚度≤2 / f≤8d / ⌈k/8⌉ / 两态 AP / F1 谓词全部存活)。但核销执行为逐字面式、未以失败模式为单位扫描全文:同族部位留转移灶("探路"prong 存活、B4 分母未随成本口径迁移、A2×4 登记在修复执行中丢失、夹具计数二次失实、"调参即假失败"换字段复发),且登记闭环选择性生效(A2×4 / D1×2 / B4×3 / B1 条款 5 输入零门禁登记,deferral 生效条件空转)。CD 终裁:6 项 blocking 全为文本/契约/登记层;B4 经济谓词与统计阈值属越阶段工作、以登记+断言形式条款推给对侧;修复后建议免第三轮 full 评审、按清单 delta 核销放行。 -Prior verdict resolved: 部分——8 项中 3 项半核销、1 项二次失实、1 项修复引入新孔、1 项声明性失实(数学层全部通过) - -### 6 条 blocking(#2 轮修订照此清单执行,同日全部核销) - -| 阻塞 | 修复 | -|---|---| -| 1. systems-index 登记闭环 [qa][ux][gd][econ] | A4 行补全门禁记录:A1×15 全枚举(⑤ 扩链不可达占比生产者义务、⑬ 扩部分达成、⑭ 增批量统计断言形式条款)、A2×4 全枚举、D1×2、B4×3 定价硬约束、B1 条款 5 输入(两态验算 + 优势带 + 防钓鱼 + 生产者);registry referenced_by 补 B1/B4 | -| 2. knob 口径统一 [systems][qa] | counter_item_ids 误标 ✓→✗(D2 表行/registry 同步);AC-1 改"非 knob 六字段定值 + unlock_level/biome_tag 双 knob 表读值断言";前言"唯一 knob"改双 knob;AC-8 对账域显式排除 mvp_content/fog_ap_note + knob 对账口径;registry mvp_content 标 knob 活值 | -| 3. 校验与 AC 可执行性 [systems][qa] | 新增第五夹具 `variation_mask_constraint`(hide_numbers+any,致命)+ AC-4/AC-4b 扩容 + manifest 第四行 ≠0;跨字段校验按接口漂移规则回写 D2 表行与 Status、registry(cross_field_validation 属性);AC-3 第一腿补 level_index=u + 夹具零诊断前置断言;AC-2 钉死默认表根、tag≠∅ 死分支移交 AC-3 夹具腿 | -| 4. 修订残留失实 [gd][econ][systems][qa] | Overview"探路"改连锁路由 + 续付/退出两轴;幻想节"放弃推理的庇护"改 AP 溢价 + 推理原料;P3 节"每格花 AP"改两态;厚度≤2 钉死"≡任意 3×3 窗口非全雾"(对角带反例);夹具前言计数改"3 致命 + 1 warning + 1 合法";预算不等式改增量构成"雾致预算增量"("轮数上限"作废——A3 轮次无界)+ 局限如实登记 + 设计期聚合义务;Upstream 改"零运行时接口消费"并补 dig_ap_cost 引用 | -| 5. B4 约束簇文档腿 [econ][gd] | 硬约束②改"雾成本负担"同分母口径(原"雾面积"分母脱钩作废);增第三条防福利上界(雾板净当量优势带);B1 行增防钓鱼张力(对账 A3 OQ6:逐板差分 × 最低出现率 × 8 RAP = 钓鱼环);①锚 per-AP 平价注记(对齐 A3 条款 2 教义);OQ3 改三约束 | -| 6. MVP 验收契约完整性 [ld][ux] | D1 必含要点枚举补"雾格不传播连锁"(补齐首轮阻塞 8 第二知识源的 MVP 落点)+ 形态硬约束(非模态)+ 图例条目"恒在不设解锁门";首遇提示谓词改"首个实际含雾板进入可操作状态"(免疫 EC2 误触发与 EC3 t=0 歧义)+"一次性"作用域 = 每 run 一次;EC2 补部分达成契约;A1⑤ 定设计期聚合校验 + 违例动作 | - -顺带落实(Recommended 同遍):AC-9 补 art-bible 排期门指针 + v3 紫色临时明度基线 + "宽度 1 雾带两侧毗邻数字格"用例;已开雾格与 0 格可区分性登记 D1 行 + 新增 OQ8(tint/完成信号/信号粒度裁决义务,owner D1+CD);D5"两态成本"教学改玩家侧保守启发式("雾格按全价做预算,连锁白开当惊喜");Rule 7 可达域取保守上界 + A2 门禁回验"展开域 ⊆ 排除域";OQ1 增占比参数双重身份声明(难度 × 情报/探测器强度 + 首遇显著度下限);registry mvp_content 活值标注 + cross_field_validation/pricing_constraints 属性;每用例 reset_diagnostics() 全局声明 + 豁免声明补机制论证。 - -**日志勘误(首轮 Recommended 复核)**:首轮日志 Recommended 行声称"雾区几何 UX 下限(宽度≥2)并入 A1 参数域"与"unlock_level=2 雾占比按关爬坡"已顺带完成——实际首轮修订未落实且反向定调"1~2 格宽雾带为正常形态"(AC-9 最坏用例兜底)。该反转现于此留痕:宽度 1 合法形态保留,位置/显著度调控归 OQ1 BoardGenTable 参数域(A1 期设计决策),非 A4 义务。 - -**修订中无新增设计决策**——两轮修订全部由评审结论与终审裁决直接推导,未触碰用户拍板承重规则(生成期布置约束 + 零特判 + fog unlock_level=2)。 diff --git a/design/archive/gdd-2026-09-14/reviews/a5-minesweeper-aux-items-review-log.md b/design/archive/gdd-2026-09-14/reviews/a5-minesweeper-aux-items-review-log.md deleted file mode 100644 index ed864e4b..00000000 --- a/design/archive/gdd-2026-09-14/reviews/a5-minesweeper-aux-items-review-log.md +++ /dev/null @@ -1,35 +0,0 @@ -# A5 扫雷辅助道具 — design-review 日志 - -## Review — 2026-09-14 — Verdict: NEEDS REVISION(solo 快速审核,用户指定 `--solo`) -Scope signal: L -Specialists: 无——solo 模式(主审独立完成全部分析;lean lint 首跑 PASS,表格占比 84%) -Blocking items: 3 | Recommended: 5 -Summary: 结构成熟度高——真视窄域护栏(承重规则 + schema 校验 + 专属致命夹具)、零特判延伸、A5/B4 两库存正交、21 项义务闭环(registry 同批登记)与生效前提 deferral 全部落位;上游契约逐条核对无失实(B4 预留枚举/query_identity 预读面/stock 受理域、A4 EC6/OQ2/A5-1、A3 8 API 封闭枚举、D1 呈现面 query_reward_identity、|U|=10 口径溯源 registry direction_precheck 均属实)。3 条 blocking 均为局部修复:① F3 方向自相矛盾(P(雷) 对 ι 严格递增,结论误写为下降);② validate_use 目标谓词欠定义(边缘窗口裁剪/零信息目标无裁定);③ 真视/预读运行时路径零 AC(仅 schema 断言)。recommended:B4×④ 欠登记常数重制、义务编号撞名、aux 行缺 pool_tag、索引行描述失真、应用顺序歧义。 -Prior verdict resolved: First review - -### 修订记录 — 2026-09-14(同会话核销,v1.0-lean → v1.1-lean) - -**用户拍板两项边缘规则:** - -1. **area_3x3 边缘窗口**:照常受理,resolved_target = 窗口 ∩ 板内格(角 4 格 / 边 6 格),道具照常消耗;拒绝案否决(贴边频繁被拒 = 烧包感反噬护栏初衷);真视窄域护栏不破(≤3×3 只缩不扩)。 -2. **零信息目标不可用不消耗**:板级零信息判据(全板无未开雾格 / 无未开资格格)→ 库存投影 usable=false、D1 图标灰、使用入口禁用(B4 usable_now 先例);点击级零信息(area_3x3 窗口内零未开资格格)→ validate_use 拒绝零消耗;组合行判据取 OR(爆破包 ap_grant 恒可用、全图卷 = 有雾格 ∨ 有资格格);真视零雷窗口恒有效(零雷 = 信息)。 - -**核销对照:** - -| blocking/recommended | 修复落点 | -|---|---| -| B1 F3 方向矛盾 | F3 结论/推导/验算表改写(收益 = 盲赌暴露下降、单赌命中率上行属正常)+ registry formulas 同批修正 | -| B2 谓词欠定义 | 新增「使用目标校验谓词」表(Core Rule 8 展开)+ EC1 扩 + EC17/EC18 新增 + target schema 行边缘裁剪注记 | -| B3 运行时 AC 缺失 | AC-15(真视 + 边缘腿 + 零雷腿)/ AC-16(预读 + 全图卷 + 零信息腿 + usable 投影)新增,覆盖矩阵同步 | -| R4 B4×④ 欠重制 | 义务行扩「按 B4 缺口预检 6 流程重制登记常数与受影响 AC(σ 黄金轨迹 Ψ/Φ、AC-18 category 断言)」 | -| R5 编号撞名 | 义务清单源前缀注记(跨 GDD 台账用「A5→对侧×①」形式) | -| R6 pool_tag 缺失 | MVP 行集补 pool_tag=safe_cell 注记 | -| R7 索引行失真 | systems-index A5 行描述改「显影/真视/预读/加 AP 四类辅助消耗品」 | -| R8 应用顺序歧义 | Core Rule 7 / 流程字符画钉死(空间 kind 先、ap_grant 后——列表序非运行时语义) | - -连带同步:query_inventory 投影增 usable 字段(API 面 + 呈现契约 + registry api 行)· D1×② 可用性门呈现扩列(图标灰 + 拾取预览)· 缺口预检 1 扩 A2 读接口白名单(雾区身份 + reward_eligible 资格标记)· systems-index 状态行 In Review → Revised + 门禁增补记录新块 · 正文 Core Rules 表同批口语化重写(并行会话完成,语义零变更,本批已并入新规则口径)。 - -**后续**:re-review 待新会话(`/design-review design/gdd/a5-minesweeper-aux-items.md`);AC-12/AC-13 生效前提(B4×①…⑤ / D2×①② 修订批)不变。 - -## 放行记录 — 2026-09-14 — Verdict: APPROVED -用户拍板:3 blocking + 5 recommended 同日核销后**免独立 re-review 直接放行**(B2/B1/D1 先例)。状态同步:A5 GDD 头部 Approved · systems-index A5 行 Approved · 本日志放行记录(registry a5_aux_items 不承载状态,无改动)。**遗留裁决义务不随放行消失**:B4×①…⑤ / D2×①② / A3×① / B1×①②③ 修订批兑现前,aux 行入池加载致命(B4 Rule 1 预留值拒绝 fail-fast)——义务清单缺项即 blocking 的性质不随放行消失;OQ1–OQ6 维持既有 owner/时机。 diff --git a/design/archive/gdd-2026-09-14/reviews/b1-settlement-review-log.md b/design/archive/gdd-2026-09-14/reviews/b1-settlement-review-log.md deleted file mode 100644 index eea93453..00000000 --- a/design/archive/gdd-2026-09-14/reviews/b1-settlement-review-log.md +++ /dev/null @@ -1,17 +0,0 @@ -# B1 战斗结算规则 — Design Review Log - -> 文档:`design/gdd/b1-settlement.md` · 本日志由 /design-review 生成与追加 - -## Review — 2026-09-10 — Verdict: NEEDS REVISION -Scope signal: L(13+ 依赖、6 公式、跨 A1–D2 编排 + 5 下游消费方、2 项实现期 ADR 登记;creative-director 另判修订批本身 M 规模——单批有界、无结构返工) -Specialists: game-designer · systems-designer · economy-designer · qa-lead · ux-designer · creative-director(资深终审) -Blocking items: 8 | Recommended: 21 -Summary: 承重结构经五路对抗评审零翻案(段序骨架、乘区结构、F0 归一口径、生命周期编排、23 条上游义务落位、AC 覆盖矩阵经 qa-lead 抽验属实)。三处契约级缺口构成阻塞主体:完美排雷 ×2 无运行时兑付载体(虚增价值行,须二选一裁决);条款⑤闭合计价模型漏计全池挖掘量(清图须挖穿残余池,期望踩雷 ≈ |M|×n_s/(n_s+1),登记读数系统性乐观、verdict 视为未证明);输出协议在 AC-42 冻结前缺 target/effect_id/敌方 source_class 字段(多敌归因退化 + 接口漂移价格回流)。另有五条纪律性阻塞:条款⑤/AC-40 缺多敌验算腿、hit=false 零痕迹(完美谓词归因断裂)、P_perfect ÷100 换算未成文(spec-AC 同输入不同答案)、AC-18 腿 2 GIVEN-THEN 不可同真。 -专员分歧由 creative-director 裁决四项:F5 修正采完整计价模型方向(读数以重跑为准);×2 定性为"必须写明载体,推荐真实双份交付";误标零痕迹维持阻塞但理由收窄(自建谓词的归因痕迹不等 A2 惩罚);协议扩字段收四项进修订批(qa-lead 会签 AC-42/17/1/33 连锁)。 -Prior verdict resolved: First review - -## Revision — 2026-09-10 — 同日修订批核销 + 用户拍板放行(Approved) -Scope signal: M(修订批本身);系统实现规模维持 L -Blocking items resolved: 8/8 | Recommended outstanding: 19(留后续批次,owner/时机见 GDD 修订前 recommended 清单) -Summary: 8 blocking 全部落盘——完美排雷 ×2 落真实双份交付载体〔用户拍板:道具类 stock ×2 / buff 类 apply_effect ×2,grant_clear 恰一次不变,B3/B4 零接口修订;连带 p_perfect 载体域收窄 {100,200}〕+ 高光行有效兑付语义与零兑付降级规则;F5 计价模型重推为挖穿残余池口径(期望踩雷 = |M|×n_s/(n_s+1)),条款⑤ verdict 翻转为未闭合并登记 C3/B4 约束包(C 量级上调 or 接受非支配设计态,二选一归 C3 裁)+ 多敌腿 + ι→1 域守卫 + 护栏 B 输入登记与双读数;行协议字段分层(target/effect_id/pool_value + enemy_action/flag_miss,行类型 12→13 类);hit=false"标旗未中"零值行(每雷实例一次去重);P_perfect ÷100 成文;AC-18 腿 2 按 qa-lead 改写;F4 V_safe 标签更正 + 双口径读数;clamp 字段统一八字段(registry 同批回写,D2 GDD 行按收编先例以 registry 为准)。**用户拍板接受修订、免独立 re-review 直接标 Approved(A3/B4 先例)**——未核销 recommended 与条款⑤约束包由 C3/B4/D1 各自门禁评审跟进。 -Prior verdict resolved: Yes — 2026-09-10 NEEDS REVISION(8 blocking)同日核销 diff --git a/design/archive/gdd-2026-09-14/reviews/b2-enemy-system-review-log.md b/design/archive/gdd-2026-09-14/reviews/b2-enemy-system-review-log.md deleted file mode 100644 index 26363ada..00000000 --- a/design/archive/gdd-2026-09-14/reviews/b2-enemy-system-review-log.md +++ /dev/null @@ -1,62 +0,0 @@ -# B2 敌人系统(战斗单位系统)— Design Review Log - -> 文档:`design/gdd/b2-enemy-system.md` · 首次评审 2026-09-09(full:game-designer / systems-designer / qa-lead / level-designer / ux-designer / ai-programmer / creative-director 终审) - -## 放行记录 — 2026-09-09 — Verdict: APPROVED -用户拍板:8 blocking 同日核销后**免独立 re-review 直接放行**(A3/A4/A1/B3 先例)——核销质量依据 = 修订全部为声明/前提/登记/规格级文字修复、无结构改动,且承重机制(F1–F4 公式边界实算、F1 同步定理证伪尝试、side-wide 共享池、确定性环 ×死亡即不动手 ×charge 空拍)经六方对抗评审零动摇。creative-director 终裁同步锁定四项核心决策不被后续修订侵蚀:① 视觉推测型 + 线索恒定禁重掷(滑向数值预告的修订一律砍)② 确定性环涌现兑付点(抢杀窗口/蓄力贪雷)③ 雷→伏击守恒 + 溢出可见 + 统一受伤/死亡接口(禁止为可通关仓促激活 hero atk)④ 机制/内容分离 + 信任编排(B1 义务不搬进 B2 守卫)。systems-index B2 状态已同步 Approved。**遗留裁决义务不随放行消失**:OQ1 两 face 归属(实现期 ADR)· OQ3 条款 3 左臂 + 胜利路径(B4 先行,B1 强制检查点)· OQ7 精英/Boss 编码位(C1 定稿强制核对)· OQ8 grub 体验证伪(playtest 预注册)· OQ9 零伤害护栏(实现期 ADR/D2)· B1×6 + D1×4 义务清单(各 GDD 门禁评审核对,缺项即 blocking)。 - -## Review — 2026-09-09 — Verdict: NEEDS REVISION(8 blocking 同日核销) -Scope signal: L -Specialists: game-designer · systems-designer · qa-lead · level-designer · ux-designer · ai-programmer · creative-director(终审) -Blocking items: 8 | Recommended: 11(全部同批核销)| Nice-to-have: 10(廉价项随批核销,其余留档) -Summary: 承重机制零动摇——F1–F4 边界实算全部通过、同步定理证伪失败维持成立、F3 守恒与 B3 max_stack=16 双重不可达复核吻合、AC 覆盖矩阵无洞;落差全在"承重的恰是没写的":胜利路径结构不可达未声明、意图预告无时序条款、资产下限缺非意图态、主角推进域未排除、夹具根与判别断言两处测试完整性缺口、事件源类与精英/Boss 轴两处登记缺位。CD 终裁:全部为文字级修订,一次会话同日核销后直接进入实现;三处专家分歧(L=5 探针口径 / grub 单拍环 / 同步定理证明地位)均由 CD 裁决、无须用户出面。 -Prior verdict resolved: First review(当日修订后 8/8 blocking 核销,见下表) - -## Blocking → 修复对照表(同日核销,2026-09-09) - -| # | Blocking(来源) | 修复落点 | -|---|---|---| -| 1 | 当前内容态结构性不可通关未声明(hero atk=0 全定义域无伤害来源——百分比增益对 0 无效 + B4 未设计;OQ3 登记点错位,按其闭合后游戏照样不可通关)〔gd,CD 排序 #1〕 | Overview 新增"当前内容态无胜利路径"结构事实声明 + "接口就绪 ≠ 胜利路径存在";Interactions/Dependencies B4 行标胜利路径先决;Rule 9 加激活联动禁令(禁止单独激活 atk);OQ3 扩项(左臂闭合 = 其经济侧投影) | -| 2 | AC-7 腿 2 判别负断言在 m_e=1(合法 knob)下恒假——正确实现也打红,违反 spec-AC 一致性阻塞标准〔qa,主评审发现加重〕 | 腿 2 加判别非平凡前提 m_e ≥ 2 + 退化显式 SKIP(B3 AC-14 腿 3 先例);探针改游戏态可达值 L=4(20 ≠ 32) | -| 3 | `enemy_multi_unit` 夹具根改 grub 行(环长 1 恒 attack)→ AC-9 混合拍 GIVEN 不可构造、AC-5 同步断言零判别力、AC-7 腿 4 不可构造——三处死测试〔qa〕 | 夹具根改 **ambusher 行 (L_a, D_a) u_c_f=3**(三拍环);AC-5 改 spawn(L_a,D_a)/h_e;AC-7 腿 4 标注多敌根承载;混合拍经单单位重复 advance 构造(冒烟构造自由度注记) | -| 4 | OQ6 事件源类错误:"B3 加 mine_hit 新行"——标错事实源是 flag_judged{hit=false},且 B3 source_class 枚举属结构冻结;错标令 P2 明细行撒谎〔gd/qa/sys 三方合并〕 | OQ6 重写(新枚举值如 flag_miss 须走 B3 GDD 修订 = 接口漂移,非加行);F3 重验触发死条款(cap 域漂移>16)替换为"ambush 新增非 mine_hit 授予源"(旗源漏账 → L 可达 max_stack、双溢出协议冲突) | -| 5 | 精英/Boss 第三轴缺位:难度三维是概念定稿、A1 已留 elite_/boss_ 命名空间;B2 键冻结 + 每行集恰一敌种入结构冻结 + 致命夹具封死同深度第二敌种编码——C1 分支地图定稿必触发连锁返工〔ld〕 | 新增 OQ7(C1 定稿强制核对;改键如 encounter_class 走 D2 Rule 4 接口漂移,schema/AC-12/夹具/registry 连锁回写预登记,A1 OQ6 镜像)+ Schema 节指针 + registry rowset_rule 注记 | -| 6 | Rule 8 无"何时可见"时序条款——若实现成结算播片,"下一拍是重击"的规划输入不存在,抢杀窗口/蓄力贪雷教学/读怪幻想三者同时落空〔ux〕 | 新增 Rule 8⑤:视觉状态 = 下一拍预告、挖掘期全程可见、结算不另设意图播片;D1×4① 同步 | -| 7 | 资产下限自相矛盾:自称"此清单即资产需求下限"却只含存活意图态——缺受击反馈(多敌归因 P2)、死亡表现(重击被掐灭 P1 兑付点)、顺位标记(D1×4③ 物质前提)〔ux〕 | Visual Req 2 补三类入下限(受击可两敌种共用通用一组但须显式登记;死亡瞬间须可辨识不得直接消失;顺位标记归 D1×4③、同等 blocking) | -| 8 | 主角推进域未定义:AC 前言"每个存活单位恰一次 advance"字面含主角——主角无行为环,照做即环长取模除零、指针不变式对 hero 不可满足〔aip〕 | Rule 4 加"行为环为敌单位专属";AC 前言时序口径改"每存活敌单位";query_beat/advance 对 hero 拒绝(空/false + 诊断);AC-5/AC-15 措辞同步收口 | - -## Recommended 处置(11 条全部同批核销) - -1. F4 裕度 4.7× 口径更正 → **2.3×**(左臂按条款 2 最低档锚 +50pp 实算 = 0.36×50 = 18;原值按 +100 两层叠满取值、与"最低档下界"矛盾)——GDD + registry direction_precheck 同步。 -2. D1×4① 补强度档位/环长直觉编码说明(Rule 8② 孤儿半句的验收落点;并入 ① 不改义务计数)。 -3. 句柄生命周期矛盾("销毁态不可观测" vs AC-6 空+诊断返回)→ 统一为 RefCounted + 状态位逻辑失效口径(防 Node+free() 实现路线)。 -4. AC-3 腿 3 / AC-4 前提写死 C3 内容行 pattern → 改按表读值核对 + 前提不满足显式 SKIP(与期望值推导纪律对齐)。 -5. advance 两级 false:预期冻结(抢杀窗口常态路径)无诊断 / 相位句柄失效有诊断(防诊断刷屏淹没信号)。 -6. B1 义务① 增结算内调用序成文(query_attack→apply_damage→advance——倒序读到下一拍;比 double-advance 更常见,B1 冒烟须回放结算步流)。 -7. F2 Output Range 标"默认表值前提";示例/探针改 L=4 + "探针域与游戏态域分离"声明(实现期若给 query_attack 加 L 域守卫须回改 AC-7——届时升级 blocking)。 -8. grub"被感受为血条" → OQ8 playtest 预注册证伪项;两拍环备用案归 C3 内容所有权(CD 终裁:登记风险、不改结构)。 -9. Rule 3 加"同关内随深度切换敌种合法、分布示例非范本"注记;OQ2 加"C1 须真实消费 unit_count>1、Boss 表达不能只靠 unit_count";C3 行登记"新敌种投放节奏 = 关卡命脉"。 -10. 敌人层绘制优先级注记(art-bible 前裁决插入位置,防"哪些数字可信"心智分裂)· 首次蓄力姿态一次性提示候选(D5——L1 无 charge 拍、首课在 L2)· 首个 heavy 明细分量高亮建议(B5 首遇校准课)。 -11. 零伤害死局组合(行 atk=0 ∧ cap=0 × hero atk=0)→ OQ9 + Tuning Knobs 跨字段护栏 owner 登记(实现期 ADR/D2,ActionEconomyTable 跨字段校验先例)。 - -## Nice-to-have 随批核销(同端口廉价项) - -投影快照 + 公开可写属性为零声明(并入 AC-17 扫描域)· pattern duplicate() 拷贝判别腿(AC-11 腿 3——别名引用在换根下同样"不变",补足判别力)· apply_damage n≤0 拒绝 · query_attack 对 Dead 句柄行为定义 · AC-11 坐标锚补登记 · F4 结构上界 min(AP, cap) 收紧(cap>8 时 144→72)· 公式字面量 3→m_amb 符号统一 · "L≥2 过半"限 attack 拍口径 · 混编遭遇 cap 行值歧义登记(随 OQ7 裁决)· D1×4② 升格"全局恒定"。 - -## 专家分歧裁决(creative-director 终裁,无须用户出面) - -- **F2 示例 L=5 定性**:gd 判非缺陷(API 注入探针)vs qa/主评审判与变量域表冲突 → 采 sys 口径:cap≥5 时 L=5 在公式域内、非缺陷;真缺口是 Output Range 未标默认前提——降 recommended(已核销,见 Recommended 7)。 -- **grub 单拍环**:"反幻想敌种"(gd)vs "合理教学起点"(ld)→ 各对一半:结构不改、OQ8 登记 playtest 证伪项 + C3 两拍环备用案。 -- **F1 同步定理证明地位**:"证伪失败成立"(sys)vs "条件成立、前提违反在 B2 侧不可观测"(aip)→ 兼容:维持条件式表述(前提 = B1 义务①恰一次推进),夹具根修复(blocking 3)后 AC-5 具备行为级判别力。 - -## 未采纳/留待后续 - -- D1×4 扩为 D1×5(强度档位独立条目):并入 ① 承载、落点等价,避免义务计数连锁改写(三处引用同步成本)。 -- query_attack 内嵌 L 游戏态域守卫:保持探针自由度,登记实现期回改触发条件(Recommended 7)。 -- 句柄生命周期语义的形式化验证:留实现期冒烟框架落位。 - -## 修订涉及文件 - -- `design/gdd/b2-enemy-system.md`(GDD 本体:Status、Overview 声明、Rule 3/4/8/9、Schema 注、F2/F3/F4、Interactions 六行、B1×6/D1×4 义务清单、Dependencies 两行、Tuning Knobs、Visual Req 2/5、AC 前言四段、AC-3/4/5/7/9/11、OQ2/3/6 + 新增 OQ7/8/9) -- `design/registry/entities.yaml`(enemy.b1/d1_obligations + rowset_rule · clause3_supply.rule/output_range/account_input/direction_precheck · 修订注释追加) -- `design/gdd/systems-index.md`(B2 状态行 Approved + 门禁增补记录 2026-09-09 B2 full 评审增补块) diff --git a/design/archive/gdd-2026-09-14/reviews/b3-status-effect-review-log.md b/design/archive/gdd-2026-09-14/reviews/b3-status-effect-review-log.md deleted file mode 100644 index 7a011e79..00000000 --- a/design/archive/gdd-2026-09-14/reviews/b3-status-effect-review-log.md +++ /dev/null @@ -1,51 +0,0 @@ -# B3 增益/状态系统 — Design Review Log - -> 文档:`design/gdd/b3-status-effect.md` · 首次评审 2026-09-09(full:game-designer / systems-designer / qa-lead / ux-designer / creative-director 终审) - -## 放行记录 — 2026-09-09 — Verdict: APPROVED -用户拍板:7 blocking 同日核销后**免独立 re-review 直接放行**(A3 先例)——核销质量依据 = 修订全部为登记/声明/规格级、无结构改动,且承重机制经对抗评审零动摇。systems-index B3 状态已同步 Approved。**遗留裁决义务不随放行消失**:weaken 条款 2 锚(B1 强制检查点,OQ1 归一口径前置)、ambush 量纲(B2)、stack-R playtest 证伪项(OQ7)、D1×4/B5×2/D5/B4 义务清单(各 GDD 门禁评审核对,缺项即 blocking)。 - -## Review — 2026-09-09 — Verdict: NEEDS REVISION(7 blocking 同日核销) -Scope signal: L -Specialists: game-designer · systems-designer · qa-lead · ux-designer · creative-director(终审) -Blocking items: 7 | Recommended: 11(含 1 条降级条件性项) -Summary: 机制内核质量过硬——F1–F3 逐式复算通过、19 条 AC 域内覆盖无洞、先兑付后衰减时序干净;落差在"账本≠叙事"(per-layer 归因坍缩、enemy 侧 side-wide 无载体、呈现义务零登记)。全部 blocking 为登记/声明/规格级修复,无结构改动;creative-director 终裁不推翻用户拍板的结构冻结(stack-不重置 R 降级为条件性 recommended + OQ7 playtest 证伪项)。 -Prior verdict resolved: First review(当日修订后 7/7 blocking 核销,见下表) - -## Blocking → 修复对照表(同日核销,2026-09-09) - -| # | Blocking(来源) | 修复落点 | -|---|---|---| -| 1 | enemy 侧状态无 per-target 载体、单敌假设全文沉默〔gd/sys/ux,CD 排序 #1〕 | **用户拍板:单敌假设入文**——B3 Rule 1 + Schema target_side 行 + Interactions B2 行;registry 增 `single_enemy_assumption`;systems-index 登记 B2 回验义务(定多敌→target_ref 接口漂移) | -| 2 | B1 义务清单漏"每结算恰一次 decay_round"〔sys〕 | B3 Dependencies B1 行义务⑥;registry b1_obligations 5→8;systems-index 同步 | -| 3 | 呈现侧义务零登记,违反自家 deferral 标准〔ux/qa〕 | systems-index 登记 D1×4 / B5×2 / D5 增补 / B4 预读;B3 Interactions/Dependencies 相应行加登记指针;registry 增 `presentation_obligations` | -| 4 | AC-15 换根机制误标 + reloaded 根不可构造〔qa〕 | AC-15 重写(测试通道 load_tables 直调、非 reload() 路径、门语义归 D2 AC-16/B1);夹具规格补"全表清单拷贝+置换本表"前提 | -| 5 | 致命类豁免留 B3 表零进程落点〔qa〕 | 新增 `status_effect_dup_key` 致命夹具根 + runner manifest 行 `dup→≠0`;豁免声明收窄改写 | -| 6 | AC-18 与 registry 散文格式不符、机器对账不可行〔qa〕 | registry `status_effect` 条目 fields/mvp_content 重构为逐字段 YAML 键(action_economy 同构);AC-18 改写(结构字段断言 + knob 活值豁免,A4 AC-8 同款) | -| 7 | weaken 红警缺修复空间不对称 + 裁决循环风险〔sys/gd,CD 定级必改〕 | Formulas 红警增补不对称(瞬时读法 m_w≥51 可行 / 总暴露读法被 schema 域禁止);OQ1 增前置步骤"先钉死归一口径";registry anchor_warning 同步 | - -## Recommended 处置(11 条) - -1. **stack-不重置 R(降级条件性项,CD 终裁)**:不推翻用户拍板的结构冻结——OQ7 登记 playtest 证伪项 + B4 奖励预读/D5"同轮拿满"教学补偿义务登记。 -2. F1 合并坍缩归因 → B1 义务⑦(per-grant 来源标注,授予流水为数据源)。 -3. F2 Example 算术笔误(ambush L=3 应 +9 非 +3)→ 已修正。 -4. 插入序断言不可判定 → AC-6 互异 origin_cell + AC-17 同侧逆字典序双实例定值序断言。 -5. AC 前提调参漏洞 → AC-4/AC-8 补 D_a≥2 ∧ M_a≥2 声明 + SKIP 标记;AC-14 腿3 退化哨兵。 -6. refresh 空刷新 vs Rule 5 原则张力 → EC4 原则注记(休眠,首个内容行上线时 B4/B1 随 OQ3 裁决)。 -7. defense_up 顶点两轮免伤 → Tuning Knobs 联动评估注记(B1 对账,禁止独立调参)。 -8. 连锁展开触发溢出沉默 → Rule 5 增"溢出判定与授予路径无关"半句。 -9. 极性不在数据载荷 → Visual/Audio 注记(数据源 = B1 SettlementTable 语义)+ D1×4 之三登记。 -10. origin_cell 呈现义务无 owner → B5×2 之②登记。 -11. AC-19 扫描域无载体 → systems-index 登记 B3 文件集成员清单义务(Technical Setup 归口)。 - -## 未采纳/留待后续 - -- "六归因字段"命名(含 layers/remaining):投影字段语义分组注记留实现期 ADR 一并处理(nice 级)。 -- B3 诊断通道声明(ConfigDB 收集器 vs push_warning):nice 级,实现期随冒烟框架落位。 -- ambush 先量纲后数值的流程倒置:OQ2 既有 owner(B2)不变。 - -## 修订涉及文件 - -- `design/gdd/b3-status-effect.md`(GDD 本体:Status 行、Rule 1/5、Schema 注、Interactions、Formulas 红警、EC4、Dependencies、Tuning Knobs、Visual/Audio、AC 前言、AC-4/6/8/14/15/17/18、OQ1/7、覆盖矩阵) -- `design/gdd/systems-index.md`(门禁增补记录 2026-09-09 B3 full 评审登记节) -- `design/registry/entities.yaml`(status_effect 条目逐字段键重构 + b1_obligations 5→8 + single_enemy_assumption + presentation_obligations + anchor_warning 不对称 + 修订注释) diff --git a/design/archive/gdd-2026-09-14/reviews/b4-reward-item-economy-review-log.md b/design/archive/gdd-2026-09-14/reviews/b4-reward-item-economy-review-log.md deleted file mode 100644 index 5e0aff48..00000000 --- a/design/archive/gdd-2026-09-14/reviews/b4-reward-item-economy-review-log.md +++ /dev/null @@ -1,83 +0,0 @@ -# B4 奖励与道具经济(Reward & Item Economy)— Design Review Log - -> 文档:`design/gdd/b4-reward-item-economy.md` · 首次评审 2026-09-09(full:game-designer / systems-designer / economy-designer / qa-lead / ux-designer / creative-director 终审) - -## 放行记录 — 2026-09-09 — Verdict: APPROVED -用户拍板:14 blocking 同日核销后**免独立 re-review 直接放行**(A3/A4/A1/B2/B3 先例)——核销质量依据 = 全部 blocking 为文本级/附表级修复、无结构返工,且承重机制(install 期预分配确定性脊柱、封闭 RNG、F1–F6 边界实算、编排被动性、AC/夹具架构)经五方对抗评审零动摇。creative-director 终裁同步锁定八项核心决策不被后续修订侵蚀:① install 期预分配 + Ready 只读 + 零随机出 roll_board 一线(禁止任何运行时重掷"修"问题)② 结算段序核心序(buff/debuff > 道具 > 战斗)③ 恒定表值不吃修正 + attack_up 死行口径后果链(传播而非重辩)④ 库存战斗域 + 逐件实例归因 ⑤ 满层零兑付无折算(只修量具不动裁定)⑥ B4 零跨系统读/调用权集中 B1(窗口 hp 预判、存活集判定、满血守卫全落 B1 侧,任何给 B4 开 B2 读口的方案一律否决)⑦ B1×6/D1×5 义务清单机制(修订后以 registry 版本为准)⑧ 负空间式封闭枚举 API(新增入口须附全输入域语义表)。**遗留裁决义务不随放行消失**:OQ1 attack_up 复活连锁(B1/C3)· OQ2 未开格呈现深度/寻路兑现(A5+D1,垂直切片——创意风险 #1 维持 OPEN)· OQ3 cap 启用裁决(C3 playtest)· OQ4 折算/继承结构位(C2/D5,Alpha)· OQ5 T_fog_min 推导式(B1)· OQ6 weaken 锚归一口径(B1,registry anchor_warning)· OQ7 预警①–⑧预注册(C3/playtest)· A4 约束② MVP 休眠(clear_\ 激活时重启)· 缺口预检 11 项(B1 强制检查点输入:缺口 1/2 阻塞级)· B1×6 + D1×5 义务清单(B1/D1 门禁评审核对,缺项即 blocking)。 - -## Review — 2026-09-09 — Verdict: NEEDS REVISION(14 blocking 同日修订核销,待 delta 复核放行) -Scope signal: L -Specialists: game-designer · systems-designer · economy-designer · qa-lead · ux-designer · creative-director(终审) -Blocking items: 14 | Recommended: 14(廉价项随批核销,其余留档)| Nice-to-have: 13(大部分随批核销,其余留档) -Summary: 承重机制零动摇——install 期预分配确定性脊柱、封闭 RNG、F1–F6 边界实算、编排被动性、AC/夹具架构经五方对抗评审零动摇,CD 终裁"机械核心是管线迄今最扎实的,结构上没有需要推倒的东西";全部 blocking 为文本级/附表级。落差集中在四簇:①跨文档真相分裂(D2 正文两处旧 reward_roll 语义 / 锚参照迁移三处未传播 / 文内义务清单双副本滞后 E10 拍板 / E3"B1 义务⑧"错引);②幻想 overclaim("预读 = 我要去拿 X 路线规划"四方独立确认在 MVP 结构性不成立——reveal = 同轮授予 + 未开格不呈现);③规约自身缺陷(AC-14 与 AC-3 同输入矛盾、AC-6 分支 2 忠实实现即失败、σ 协议塌缩恒 scope 0、三个标量 knob 无数据载体、双授予语义未裁、"无洞"声明过强、E10 理由与 B2 血条数字矛盾);④经济锚悬空(承重数值零登记、F5 计数保底不保伤害、预警④估计与自身权重上限矛盾、A4 约束②MVP 结构性不可闭合)。 -Prior verdict resolved: First review(当日修订后 14/14 blocking 核销,见下表;放行待 delta 复核) - -## 用户评审拍板(本批) - -- **窗口锚点 = 授予段之后、增益/减益段之前**:当轮拾取的道具当轮即可用(CD 70/30 倾向移动、提请用户,用户拍板移动)——消除"当轮拾取下轮才可用"未陈述规则与末图清图奖励必然作废两个伪影;核心段序(buff/debuff > 道具 > 战斗)拍板不变。 - -## Blocking → 修复对照表(同日核销,2026-09-09) - -| # | Blocking(来源) | 修复落点 | -|---|---|---| -| 1 | D2 正文两处旧 reward_roll 语义未同步(Core Rule 5"每次奖励结算"、Interactions B4 行"每轮结算取号"+ use_timing"占位")——"registry/D2 已同步"声明对 D2 正文失实,按旧正文接线使 B4 全部 σ 轨迹 AC 报废〔sys;CD 实证确认〕 | D2 Core Rule 5 改写 install 批语义(R2 向量不受影响注记)+ Interactions B4 行九字段/承重措辞 + Dependencies 行;AC-20 增边界注记(D2 正文对齐 = delta 复核对账项,缺口预检 4) | -| 2 | 文内义务清单双副本滞后 E10 拍板:Interactions D1×③ 与 D1 清单写"两类行"vs L257/285+registry"三类行";文内 B1×④ 缺零效果判定 + "已消耗未生效"行;E3"归 B1 义务⑧"错引(B4 的 B1 清单只有①–⑥,⑧是 B3 的号)〔qa, ux〕 | 全文以 registry 版本为准对齐;E3 改引 B3 义务⑧ + 行协议 owner 明示;D1 清单扩 5 项(见 Recommended 1) | -| 3 | 锚参照迁移(attack_up→defense_up)未传播:systems-index A3 OQ5 注记 / registry status_effect.anchor_warning / clause3_supply.direction_precheck 仍按 attack_up 口径(registry 内两条 owner-truth 打架);迁移后条款 2 预检未重跑(weaken 25 vs defense_up 50 仍差 2×)〔eco, gd, sys〕 | 三处补迁移注记(历史值与 defense_up 数值巧合全等的事实 + 未重跑事实如实登记);systems-index:98 增迁移注记;预检重跑义务挂 B1 对照表落定(OQ6/B1 裁决前置不变) | -| 4 | "预读 = 我要去拿 X 路线规划(创意风险 #1 正面解)"四处承重位 overclaim——reveal = 同轮授予 + 未开格不呈现,寻路结构性不可能;game-concept 证伪信号会把缺失功能误判为设计失败〔gd, ux;sys/eco 复确认;CD 终裁如实降级〕 | Overview/Player Fantasy P1/P4 锚/E3 自救句/预警④缓解腿改写为 MVP 真话(已开格+库存恒读、每格必有货、雾档先验、叠层感知挖掘);game-concept 风险 #1 与证伪信号加 MVP 口径注记、风险维持 OPEN;agency 定位句加注 | -| 5 | T_fog_min/K_dmg/N_draft 无数据载体——不在任何 D2 表、R3 override 无 key 空间(违反 Rule 1);AC-6 分支 4"override→加载致命"机械不可达(override 仅运行时态,D2 边界⑤)〔sys, qa〕 | **RewardConfigTable** 单行全局新增(t_fog_min/k_dmg/n_draft/p_min——HeroTable 接口漂移先例):registry `reward_config` 条目 + D2 表清单回填 + AC-20⑥ 对账;致命腿改烤入根 `b4_fog_gate_hot`(manifest 扩行);override 仅承载运行时合法分支(T_fog_min=1) | -| 6 | 封闭 API 输入域未裁语义:同格双 grant / 同结算重复 grant_clear / 清单外格 query/grant / stock 入参域 / query_inventory 枚举序——幂等与重复两种实现都能让 21 条 AC 全绿;"无洞"声明过强〔qa, sys;CD 采 qa 重述〕 | E18–E21 补裁(重复受理幂等 + 诊断 / 清单外 null/false + 诊断 / stock 仅受理道具类 / 枚举序 = stock 受理序);B1×② 补"每格受理恰一次";AC-12 分支 3 / AC-10 分支 3 补腿;覆盖矩阵"无洞"撤回重述 + 新增入口须附全输入域语义表纪律 | -| 7 | AC-14 分支 3"任意构造上下文恒 true"与 AC-3 分支 3"Cleared 后 use → false"同输入矛盾〔sys〕 | 分支 3 收窄:零**游戏态**守卫(存活敌/hero hp),相位守卫不在豁免域(AC-3/E4/E7 照旧) | -| 8 | 经济锚全面悬空:刀/治疗包 power、max_hp、默认根行集零登记——"供给无忧/贴近下界"结论与预警阈值无锚(原型锚 DMG=4/治疗+4/HP=50 未继承未弃用)〔eco〕 | 默认根五行登记(knife_t1/knife_adv/heal_t1/defense_up_basic/clear_knife,溯源原型锚,provisional 归 C3)+ 刀供给方向预检(B2 clause3_supply 先例;输入缺口 = A1 actuals,缺口预检 11);max_hp=50 出处建议随 B2/D2 回写 | -| 9 | F5 保底维度洞:计数保底对 power=1 零防御;K=0 ∧ 全池零伤害可静默复活 B2"结构性不可通关"blocking 问题〔eco, sys;CD 裁决 4:计数保底不动、加载校验进 MVP〕 | F5 加载护栏两条新致命:`floor_supply_missing`(K≥1 ⇒ ∃ power ≥ P_min 活刀行,P_min = RewardConfigTable 默认 4)+ `no_damage_row`(K=0 后闸,B2 OQ9 并案);夹具 b4_floor_supply/b4_nodamage;概率性致命带 → C3 调参期批量仿真义务(缺口预检 10);标题改"每板伤害供给下界保证" | -| 10 | 窗口 P2 缺口:满血治疗包拒绝零呈现零数据(E10"误触防护"论证以选择时点可见为前提而契约无 hp);窗口选择序未登记为回放输入;行洪水合并的聚合计数字段缺位〔ux, gd〕 | usable_now 守卫预判由 B1 编排组装进窗口数据(义务④——B4 零跨系统读不变);第四类"使用被拒"行协议;窗口选择序列 = 结算回放输入事件(B1 义务①④);未生效类行携带可聚合计数/批次字段 | -| 11 | 窗口时机伪影:窗口先于授予段 ⇒ 当轮拾取当轮不可用(未陈述)+ 末图清图奖励 100% 作废〔eco 提出、CD 裁决提请用户〕 | **用户拍板:窗口移至授予段后**——Rule 5/E10/E15/D1×②/B1×①④ 五处改写;E15 主体消解(残余 = 消亡注记 D1③⑤ + 折算归 OQ4 Alpha) | -| 12 | σ 协议机制缺口:"每 σ 全新服务"塌缩恒 scope 0(需预推进条款);Ψ/Φ/σ\* 登记常数在取号约定 ADR 前不可推导、缺 A2 OQ2 式"纸面契约子集"声明;b4_reroll 夹具登记不完整〔qa〕 | AC 前言补 σ 预推进机制 + 纸面契约子集声明(雾格单行退化分支例外现即可执行);b4_reroll 全值登记(T_fog_min=1 + 三行权重 + clear 行,满足全部加载校验)+ 可达性拆分复核义务;第二人复核义务(A2 OQ3 同型,缺口预检 8) | -| 13 | AC-6 分支 2 忠实实现即失败:加载规则强制 H 活 ⇒ 非雾池 ⊇ {H,L},"非雾格 = L"是概率断言〔qa〕 | 改 32σ 双重量化(雾格恒 H 零泄漏 + 非雾格至少一次命中低档行);登记值降为诊断信息 | -| 14 | 用语纪律批量违规:"腿"×27(CLAUDE.md 点名反例)、"刀"承重未定义、"换签/批尾/贴地/行洪水/自救面/红警/档位序代理"无登记无定义〔ux;CLAUDE.md 强制〕 | 腿→分支全文替换;档位序代理→档位序检查;贴地/行洪水/自救面/换签/红警机械替换;刀/烧包/批尾首次出现处加白话注;registry terminology 增 B4 六词条 | - -## Recommended 处置(14 条;廉价项随批核销,其余留档) - -1. **D1 义务 3→5 扩容(已核销)**:+④ H2 清图奖励行强调呈现 +⑤ battle_over 库存清空可见反馈(RAP 清零同款先例);H3 感知数据前置 = 击杀结果进 B1 流水(义务④);ux"清单外登记会丢失"先例采纳。 -2. **预警④重校准(已核销,CD 裁决 5)**:按吸收上限重推(λ=2.8 vs 1 层/结算——批式授予结构性偏高);拆"稳态/连锁批量"双表分设阈值;缓解改叠层感知挖掘;**不压 defense_up 权重**(压权重会加重构筑维度塌缩)。 -3. **预警清单扩容 ①–⑧(已核销)**:①拆短缺/浪费 + unit_count 分档;②增治疗短缺;③增雾池单一化监测;⑤雾板分层(A4 明文要求);新增⑥速杀退化/⑦窗口摩擦/⑧H2 曝光率。 -4. **A4 约束②③ MVP 休眠显式宣告(已核销,CD 采 eco 加码)**:②结构性不可闭合(非常量池,B1 也闭合不了——原"归 B1 强制检查点"表述失实)+ ③静默绿灯风险;激活载体 clear_\(垂直切片);registry pricing_constraints 同步。 -5. **AC-19 非平凡化(已核销)**:默认根布置两行雾池,对账对 (knife_adv, defense_up_basic) 互异;tier 与当量零耦合的假阳性理由入 F2 注记(防后人升格致命锁死内容)。 -6. **AC-14 分支 1 快照措辞 + AC-15 分支 4(已核销)**:"表读值"→"授予时快照值";换根后 use 回执 = 快照值判别分支。 -7. **display_name 字段(已核销)**:RewardTable 第九字段(现在补一行 schema,晚补动 D1);AC-20 五键→九键连锁。 -8. **B1 义务⑥措辞 + 逐件动态守卫(已核销)**:"double-roll 无守卫"与 E5 相位守卫字面冲突消解(B4 侧守卫见 E5、B1 承载时点半);同窗顺序多包逐件动态守卫入义务④。 -9. **F5 概率性致命带(已核销为登记义务)**:期望值预检归 C3 调参流程(缺口预检 10)——CD 裁决:不做 roll_board 期 B2 耦合(破坏零相邻依赖)。 -10. **创意风险 #2 归属(已核销,CD 裁定 gd 降级)**:爆发结算机制本体归 B1 强制检查点(game-concept 原文归属);B4 交付插槽与明细行数据面;Visual 节诚实化(H1/H2 = 常规节拍登记、H3 = 战斗侧兑现)。 -11. **徽章绘制优先级插入点(已核销)**:旗子之下、纹理之上意向冻结,纳入格子样张测试验收。 -12. **窗口触发政策 + 摩擦指标(已核销)**:D1 义务②注记(MVP 有库存恒弹,候选归垂直切片)+ 预警⑦。 -13. **Rule 9 定义表声明 + 条款④口径收窄登记(已核销)**:Rule 4 豁免声明成文;A3 条款④"行级正当量"收窄在 Dependencies 显式登记。 -14. **equivalence_supply 全活行投影(已核销)**:A4②③与条款⑤对账的道具/清图行值入供给面。 -- 留档未核销:负反馈聚合音已随批登记(Visual 节);雾池单调化监测已随批入预警③;P4 深度差异化结构位登记(Player Fantasy/垂直切片);battle_over 反馈教学归 D5(垂直切片/Alpha)。 - -## Nice-to-have 随批核销(同端口廉价项) - -hp=0 窗口语义钉死(结构不可达注记)· 资格清单重复格去重 + weighted_pick 空行集 null 域注记 · AC-3 补 Cleared 后 query_identity 观测分支 · AC-4 release 侧语义(push_error 致命路径注记)· "批尾 × 草稿数"歧义钉死(每稿含清图一号、作废连带)· AC-6 分支 4 前半补 THEN · Player Fantasy 示例行改"治疗包 ×1 入库" · AC-12"几层"措辞收敛(层数语义归 B3)· 跨容器句柄/stock 域/枚举序入 E18–E21。留档:query_identity 投影加 tier 已随批(H1"好货"档位可读);"泡"类残留零。 - -## 专家分歧裁决(creative-director 终裁) - -- **窗口时机(唯一用户出面项)**:eco 提议窗口移授予段后 vs 拍板字面"结算解析前"——CD 70/30 倾向移动、提请用户,**用户拍板移动**(段序核心不变)。 -- **E3 自救是否存在**:ux"MVP 无任何自救" vs CD"HUD 叠层感知挖掘是真实的弱自救"——采 CD 口径(改写为叠层感知挖掘,非"绕开满层格")。 -- **完备性口径**:主评审"completeness 8/8" vs qa 重述(8 节在位 + EC 映射完整 + API 输入域/σ 协议有已列明缺口)——采 qa,"无洞"声明撤回重述写入 GDD 覆盖矩阵。 -- **创意风险 #2 严重级**:gd 判 blocking vs CD 降为"B1 交接登记项"(机制本体 game-concept 原文即归 B1)——采 CD,B1 强制检查点登记。 -- **F5 维度修复方案**:eco 伤害量纲保底 vs sys 期望值预检 vs 现行计数保底——CD 组合裁决:计数保底不动(拍板)+ 加载期跨字段护栏进 MVP + 批量仿真归 C3 调参流(拒绝伤害量纲保底——须 install 期耦合 B2 敌表,破坏零相邻依赖与回放纯度)。 -- **预警④校准方向**:eco 压 defense_up 权重 vs CD 重校估计 + 拆指标——采 CD(压权重加重构筑塌缩)。 -- **Rule 7 vs AC-14 层间张力**:sys 判"措辞过宽成真矛盾" vs qa 判"层间切分已消解、残余顺序双包"——兼容采双方:层间切分成立( blocking 7 只收窄措辞),逐件动态守卫入 B1×④。 - -## 未采纳/留待后续 - -- 伤害量纲保底(K_dmg_bev):拒绝理由见分歧裁决 5;窗口使用次数是战斗轨迹量、结构上不可 install 期判定(B2 OQ3 同源)。 -- gd"创意风险 #2 blocking":机制本体归 B1(game-concept 原文),B4 阶段交付结构座位即为完整义务。 -- ux"MVP 无任何自救"绝对化表述:叠层感知挖掘为真实弱自救,已按 CD 口径落文。 -- display_name 之外的第十字段(图标键等):icon 映射已由 reward_id 键契约承载,不再加列。 - -## 修订涉及文件 - -- `design/gdd/b4-reward-item-economy.md`(Status/决策记录/Overview/Player Fantasy/Rule 3/5/7/8/9+RewardConfigTable/Interactions 六行/B1×6+D1×5 义务清单/F2/F4/F5 护栏/F6/默认根内容行/预警①–⑧/E 节头+E3/E8/E10/E15/E17+E18–E21/Dependencies+A4②③宣告/双向一致性五处/Tuning Knobs+P_min/Visual+UI/AC 前言(σ 预推进+纸面契约声明+夹具补全+manifest 十行)/AC-1…AC-21 修订/覆盖矩阵重述/缺口预检 11 项/OQ4 收窄/用语清扫) -- `design/gdd/d2-data-config.md`(Core Rule 5 reward_roll 语义改写 / Core Rules 表清单 RewardTable 九字段 + RewardConfigTable 新行 / Interactions B4 行 / Dependencies B4 行) -- `design/registry/entities.yaml`(新增 `reward_config` 条目 / `reward_table` 九字段+默认根行集+direction_precheck+护栏两条+窗口锚点+幂等语义+义务清单同步 / `status_effect.anchor_warning` 迁移注记 / `clause3_supply.direction_precheck` 迁移注记 / `terminology` 增 B4 六词条 / 修订注释追加) -- `design/gdd/systems-index.md`(B4 状态行 In Review / A3 OQ5 注记迁移注记 / 门禁增补 B4 块 B1×6+D1×5 同步 / 新增"2026-09-09 B4 full 评审增补"块) -- `design/gdd/game-concept.md`(agency 定位句注记 / 创意风险 #1 口径注记 / 可证伪信号 MVP 口径注记) diff --git a/design/archive/gdd-2026-09-14/reviews/c2-adventure-structure-review-log.md b/design/archive/gdd-2026-09-14/reviews/c2-adventure-structure-review-log.md deleted file mode 100644 index 9e0ce41a..00000000 --- a/design/archive/gdd-2026-09-14/reviews/c2-adventure-structure-review-log.md +++ /dev/null @@ -1,64 +0,0 @@ -# C2 冒险结构(c2-adventure-structure.md)评审日志 - -## Review — 2026-09-14 — Verdict: APPROVED - -- **Scope signal**: L(多系统集成:8 依赖 · F1–F3 三式 · AdventureTable 新表 · reseed 接线 · 2 项实现期 ADR 关联〔OQ3 种子生成源 / hero_override ADR-0009 候选〕) -- **Specialists**: 无——`--solo` 单会话快速审批,未生成专家代理;GDD 复核注记的"生产前人工复核"位保留 -- **Blocking items**: 0 | **Recommended**: 3 | **Nice-to-have**: 4 -- **门禁**: `python tools/gdd_lint.py design/gdd/c2-adventure-structure.md` → **PASS**(表格占比 86%;R9 最大节点直接内容合规);R8 人工复核——核心规则表要点列零编号引用(编号引用仅在依据列)✓;R3 人工复核——正文无日期修订注记(版本历史仅文末表)✓ -- **Prior verdict resolved**: First review - -### Summary - -C2 的承重裁决经逐项对源核实全部成立:F1 冒险通关率合成的跨关口径闭合前提在结构上成立(收束点清库 + 血回满 + 上限提升使每关开局状态恒为常量,逐关独立性成立);N=1/N=2 生效前提与 AC-10 SKIP 语义自洽可测;C1/C2 边界给 C1 的分支/精英/线性→分支演化留足空间;大奖励所有权三分清晰;失败重开语义与 game-concept 锁定一致;两处切片简化改写经切片代码核实与事实相符。零 blocking。并行上下文核实:/review-all-gdds(2026-09-14 FAIL)报告全文零 C2 提及,B3/B1/D2 状态与 C2 无涉。 - -### 已锁事实核对(七项全过,零冲突) - -| # | 锁定事实 | 核对结果 | -|---|---|---| -| 1 | C3 带锚 / OQ1 / level 999 / Boss=Dmax | ✓ F1 用带 = C3 F5 定稿带(L1 [30,50] / L2 [20,40],逐字一致);通关余量锚(p90≤13 & p10≥3)在 knob 交互行引用一致;OQ1 兑现批与 C3 OQ1"内容与数值同批——C2 关卡序列定稿后"双向咬合(C2 义务清单 = C3 填充批,(2, D1–D4) 四行 + 既有 (2, D0) 恰拼成链模板五战斗深度);越界 = 内容生产缺口、C2 不产生越界请求 + D2 R1 floor 兜底分层一致;Boss=Dmax 两 GDD 同锁 | -| 2 | B1 begin_battle / level_clear / 关卡结束归属 | ✓ 供给方 = C1 组装 / C2 供值(B1 依赖表 C1/C2 provisional 行 + hero_override_parameter_passing registry 条目,B1 侧转正登记随 B1 修订批);level_clear 上层显式调用、victory/defeat 皆然(B1 出口分发 + AC-31 腿 2 逐字一致);"关卡结束"归 C1/C2 域编排(B1/B4 双侧同口径) | -| 3 | B4 库存关卡域 / 大奖励不进库存域 | ✓ B4 Rule 4 关卡域 + 关卡末 clear_inventory(B1 编排调);C2 大奖励不进背包不占库存域 ↔ B4"关卡大奖励归 C2(B4 无关)" | -| 4 | A4 雾 unlock_level=2 | ✓ A4 硬约束/Core Rule 8/F1/Tuning Knobs 四处锁定;C2 仅作 L2 台阶内容面消费(序列难度排布) | -| 5 | game-concept 死亡即冒险终 / 20–40 分钟 | ✓ Rule 5 与术语表"死亡则冒险结束(Roguelike)"逐字一致;20–40 分钟在 OQ1 + Tuning Knobs 显式登记为愿景 vs MVP N=2 的已注册差距(扩展机制 = 内容批) | -| 6 | registry 四条目 + terminology 三词条 | ✓ rng_service(unseeded_access 致命 / snapshot_contract = master_seed + 各流 scope 计数器——三流与 C2 Rule 6 一致)/ level_table / adventure_table / hero_override_parameter_passing 全在位;HP 账本 / 关卡收束点 / 关卡大奖励三词条已登记且定义与 GDD 正文一致 | -| 7 | 硬门禁 | ✓ lint PASS;R8/R3 人工复核通过(见上) | - -### 重点压力测结论(六项) - -1. **F1 合成 [6,20]% 的口径闭合前提——成立,无漏项**。每关开局状态被结构钉死为常量:收束点清库(B1 level_clear,关卡域)+ buff/RAP 战斗域清(B1/A3)+ 血回满 + 上限提升(C2 账本)⇒ L2 结果分布与 L1 轨迹统计独立,乘法合成合法;逐关带内任意组合可达 ⇒ 区间积 [6%,20%] 即正确合成带。已登记的对冲:max_hp_eff=60(非裸 50)开局强度耦合经 knob 交互行("回满 + 上限共同抬开局强度——上调走 C3 重扫")+"若未来大奖励改部分恢复,本式失效须改口径"自守条款双保险。残余薄弱点见 Recommended-1(填充批起点态口径未成文)。 -2. **N=2 生效前提结构——自洽,AC-10 SKIP 可测**。N=1 合法态(切片现状)下 AC-7 平凡通过、AC-2/3 语义退化由 AC-10 显式 SKIP 承载;"禁止只加序列不加内容"由 AC-7 覆盖断言强制;与 C3"深度轴缺行 = 调参期冒烟断言拦截"双层一致。 -3. **C1/C2 边界——给 C1 留足空间**。契约四件套 + 收束点在 C1 + 组装权在 C1 不预判节点拓扑:rest/reward/battle 节点在分支图中语义不变(heal_clamped 逐节点触发)、精英节点走 C3 Rule 6 预留 + DifficultyTable 套乘(组装面零改动)、线性→分支演化唯一共享结构不变式 = Boss 恒末节点(C3 Rule 5① schema 同锁,非 C2 新增约束)。契约以"C1 GDD 强制输入 + 门禁评审核对项"登记,机制正确。 -4. **大奖励所有权——清晰**。机制/表回填 = C2;level_clear_hp_bonus 值锚 = C3 平移换算率 + 上调须 C3 重扫 L2 带;血回满 = 结构定式非 knob;token_per_level 值归 C4(消费方)默认 10 provisional。过渡期调参权措辞见 Nice-to-have。 -5. **失败重开语义——与锁一致**。死亡即冒险终(无关卡重试/检查点)逐字对齐 game-concept;重开 = 新种子/第 1 关/满血/空手;放弃同失败型、非战斗期受理、MVP 无 UI 入口(OQ4 归 D1)——不与任何锁定语义冲突。 -6. **切片切分转正——与切片事实相符(代码级核实)**。`level_runner.gd start_level(level_index, seed_val)` 内 `rng.new_adventure(seed_val)`(逐关播种)+ `hero_hp = effective_max_hp()`(每关回满)+ 注释自认"关卡起点 = 冒险起点(切片口径;跨关接续归 C2)"——C2 Rule 3/6 的两处改写(冒险单种子 / HP 跨关延续)准确描述了所替代的切片简化;level_runner 冒险域归 C2、关内行进归 C1 的切分与切片代码职责现状吻合。 - -### Dependency Graph - -- ✓ c3-difficulty-curve.md — 存在(Approved v2,带锚定稿) -- ✓ d2-data-config.md — 存在(Needs Revision——并行批欠账,C2 两条 D2 义务〔reseed 入口 / AdventureTable 建表〕已登记随其修订批) -- ✓ b1-settlement.md — 存在(Needs Revision——并行批欠账;C2 仅引用其结构面,begin_battle 转正登记随 B1 修订批) -- ✓ b2-enemy-system.md / b4-reward-item-economy.md / a4-terrain-variation.md / a3-action-economy.md / d1-hud-framework.md — 存在 -- ✗ c1-*.md — 不存在(**正确状态**:C2 在设计顺序上先于 C1,接口契约四件套即其强制输入基线,非 broken reference) -- ✗ c4 / d3 — 不存在(下游"远"位,正确框架化) - -### Required Before Implementation(blocking) - -无。 - -### Recommended Revisions(随 C2 下次修订批 / 对侧批次执行,非阻塞) - -1. **C3 L2 填充批的校准起点态显式化**(C2 → C3 义务行或 F1 处补一句):L2 通关率带校准的模拟起点 = 大奖励后状态(max_hp_eff = 50 + 10、满血、库存/buff/RAP 空),非裸 HeroTable 50/50——防填充批按裸表值校准使 [6,20]% 合成带口径漂移(跨评审教训:回执须按口径粒度登记,B1 V_safe 漂移同型)。 -2. **关卡末剩余道具折算结构位登记**:B4 OQ4 与 B1 AC-31 腿 2 双双指向"折算结构位归 C2(Alpha,转金币/继承候选,清空前快照计数为数据面预留)"——C2 义务面/OQ 零承接。补一行登记(owner C2/D5,Alpha),防"清单外登记会丢失"先例复发。 -3. **OQ1 时长估算与 game-concept 算术对齐**:单关 5–10 分钟 × N=2 = 10–20 分钟,OQ1 写"约 15–25 分钟"——补一句构成假设(含结算/摘要/大奖励节拍开销)或改区间,免读者当矛盾。 - -### Nice-to-Have - -4. token_per_level 补一句过渡期调参权:C4 定稿前 provisional 10 随 C2 表持有(现"值归 C4/消费方 C4"已含归属,仅过渡期主语可更明)。 -5. 速览"不拥有"行"关卡清库调用(B1)"的调用方链首次阅读易混(实链 = C1 收束点调 B1 level_clear 入口 → B1 编排调 B4 clear_inventory)——规则 7 已消歧,速览可括注"C1 发起"。 -6. AC 可选补腿:Settling 期收到放弃请求 → 同"Settling 恰一次"不变式拒绝(现由不变式 + AC-9 族覆盖,无显式 AC)。 -7. F1 可注明 [6,20]% 为 C3 基线(无天赋)档合成(公式本身通用,中/高天赋档代入即得)。 - -### 并行上下文核实 - -`gdd-cross-review-2026-09-14.md`(/review-all-gdds FAIL)全文经检索 **零 C2 提及**:2 blocking(B3/B1 减伤墙回执链、D2 schema 回写欠账)与 16 warnings 均不涉 C2;C2 引用 B1 仅结构面(level_clear / begin_battle)、引用 C3 仅带锚,不涉其数值回写——B3/B1/D2 的 Needs Revision 状态对本次评审结论无影响。C2 自身的对侧义务(B1 转正 / D2 建表 / C3 填充)均已登记、各有明确承载批次。 diff --git a/design/archive/gdd-2026-09-14/reviews/c3-difficulty-curve-review-log.md b/design/archive/gdd-2026-09-14/reviews/c3-difficulty-curve-review-log.md deleted file mode 100644 index 01370297..00000000 --- a/design/archive/gdd-2026-09-14/reviews/c3-difficulty-curve-review-log.md +++ /dev/null @@ -1,46 +0,0 @@ -# C3 难度曲线与精英/Boss — design-review 日志 - -## Review — 2026-09-14 — Verdict: NEEDS REVISION(8 blocking 同日修订核销)→ **用户拍板免复评放行:Approved** - -Scope signal: L -Specialists: 无(lean 单会话——用户指定不生成专家代理,出稿与评审同会话完成) -Blocking items: 8 | Recommended: 6 -Summary: 骨架承重结构(X-1~X-5 回执、encounter 流与 DifficultyTable registry 登记、A4/B1 授权链、P1 绝对锚)经逐项对上游核实零动摇;阻塞集中在三处——遭遇随机化的 owner 侧登记全面缺位(B1/B2/D2/registry)、F6 供给带被自身数值证伪(0.54 短缺态 vs 实测 60% 通关,方向反指)、现行行值无权威枚举且 v2/v3 两代数值混用。同日修订批按用户四项拍板全部核销:F6 由用户设计的生存链区间模型(S/K 区间三档判定 + 关级恒等式 + 占比带)替代,行值总表从切片 .tres 重建,四批切片既成事实(clear_blast 换位 / K_dmg=0 / 供给控制器 / armor_type)转正登记,接口漂移回写 B1×1/B2×3/D2×2/registry。 -Prior verdict resolved: First review - -### blocking → 修复对照表 - -| # | blocking | 修复落点 | -|---|---|---| -| 1 | 遭遇随机化 owner 侧登记缺位(unit_count_max 字段 / spawn override / B1 掷骰 / boss_guardian 物种集) | B1 战斗开始序列 + AC-5 scope 腿;B2 Rule 10/EC5/spawn 签名/AC-14/AC-16;D2 schema +2 字段;registry enemy 十键 + 三敌种 mvp_content | -| 2 | F6 平衡带被自身数值证伪(0.54 vs AC-4 带 [1.1,2.0]) | F6 供给带退役 → 生存链区间模型(用户设计,带锚定稿);AC-4 重写三档判定;AC-14 新增恒等式闭合;registry supply_balance_band 改写 | -| 3 | 现行行值无权威枚举 + v2/v3 混用(F3 Σ=142 vs F6 153.5;SLICE-TUNED 表 v2 值) | MVP 行值总表 v3 转正(切片 enemy.tres 权威源);F2/F3/F4/F6 验算全部重算;r_boss 更正 0.98 | -| 4 | registry boss_hp_anchor 旧带 [0.35,0.55] | 回写 [0.5,1.1] + 0.98 记录 + 走廊 [1.1,1.35] 预登记 | -| 5 | "clear_blast 40" 无出处(对 B1 C=8/16 口径) | 出处 = 切片 reward.tres(清图槽换位既成事实)——用户拍板采纳转正:B4 换位登记 + B1 条款⑤重推(缺口 6.1/51.8)+ registry clause5_dominance.c3_ruling | -| 6 | 供给控制器(active_p0/decay/首件保证)三处上游零登记 | 用户拍板归 B4 承接:B4 速览/Tuning Knobs/依赖行 + RewardConfigTable +2 参数 + pool_tag 增 active_inject + registry reward_config/settlement 侧登记 | -| 7 | F7 缺 B4"登记常数与对账重制"步 | F7 六步→七步(第④步) | -| 8 | F5 真人方向声明与 OQ3 证据相反 | F5 方向更正 + registry calibration_gap 改写(真人显著强于模拟者——批次 1 反向确认) | - -### 用户拍板(AskUserQuestion 四项,2026-09-14) - -1. 切片奖励侧三改动**全部采纳转正**(clear_blast 换位 / K_dmg 1→0 + 战斗首件保证 / 供给控制器归 B4)。 -2. **armor_type 克制批纳入 MVP**(goblin=none / bugbear=a / ogre_chief=b;克制矩阵入 SettlementTable.armor_effectiveness,数值 provisional 归 C3)。 -3. **三带锚定稿**:L1 基线通关率 [30%, 50%](替换 40–60%)· 通关余量 p90≤13 且 p10≥3("只剩一点血"量化)· L1 结构形态带(教学位绿 + 中段黄 + Boss 黄不红)。 -4. **加难杠杆批内即调**:候选 = r_boss 走廊 180–207 / 群战上探 / 供给 decay 0.6——OQ7 扫描待执行(本会话无 godot),落带前 v3 值 provisional-pending-scan;真人终标定归批次 2。 - -### 同批顺路核销(评审发现非 blocking) - -- DND 更名批对齐:grub→goblin、ambusher→bugbear、boss_guardian→ogre_chief——B1/B2/D2/registry 全文 sweep(D1 冲突② 落定,D1 GDD 侧收尾注记留其下次修订批)。 -- Boss "atk 高于均值一档" 无定义 → 重定义"atk ≥ 本关普通战最高行 atk"(现值 9≥9 ✓)。 -- F1 "Dmax 处 1.25–1.8×" 算术更正(Dmax=4 → 1.2–1.8)。 -- A3 无回执的 knob 声明改写"调参所有权归 A3,C3 联动评估";m_w 改"C3 提案通道"。 -- AC-1 跨表校验载体 = C3 调参期冒烟断言(D2 R1 fail-fast 不动);AC-11 改两腿(MVP 腿 + A4 升闸未来腿,X-10);AC-5 的 hp+100% 维度删除。 -- 减伤墙批(defense_up −50→−30、石肤 24→16——2026-09-13 B3 侧批)补录 C3 试玩批次记录。 - -### 登记在案 follow-up(非本批范围) - -1. **B1/B2/B4/D2 既有 R8 lint 债**——lint 工具本日更新(R8 核心规则表要点列禁编号引用)晚于四 GDD 批准时点;本次触改行零新增违例,存量清扫归各自下次修订批。 -2. B2 多敌夹具(bugbear 行)与 AC 记号(h_e/a_e)随 B2 实现批核验。 -3. OQ7 加难杠杆扫描执行(godot 可用时)。 -4. B4 F5 保底语义迁移后其 AC-6/AC-7 断言措辞随实现批对齐。 -5. registry entities.yaml 为宽松行解析惯例(非严格 YAML——既有 `**: ` 值风格),D2 AC-16 解析器实现时按行解析承载。 diff --git a/design/archive/gdd-2026-09-14/reviews/d1-hud-framework-review-log.md b/design/archive/gdd-2026-09-14/reviews/d1-hud-framework-review-log.md deleted file mode 100644 index 4384e637..00000000 --- a/design/archive/gdd-2026-09-14/reviews/d1-hud-framework-review-log.md +++ /dev/null @@ -1,39 +0,0 @@ -# D1 HUD 与界面框架——design-review 日志 - -> 目标文档:`design/gdd/d1-hud-framework.md` · 评审载体:/design-review(lean 模式) - -## Review — 2026-09-14 — Verdict: NEEDS REVISION(2 blocking 同日修订核销,用户拍板免复评放行 → Approved) - -Scope signal: L(16 声明依赖 / 13 项载荷 schema / 22 条核心规则 / 25+1 条 AC;无需新 ADR) -Specialists: none(lean 模式——用户指定快速审核单会话,未生成专家代理;主评审独立承担 systems/qa 视角核查) -Blocking items: 2 | Recommended: 3 -Summary: 承重结构经逐项对上游核实零动摇——27 项义务台账与 systems-index 登记吻合、13 项载荷 schema 与 B1 Rule 14 / A2 sub_reason 逐字一致、art-bible / battle.md / ADR-0001~0004 引用全部实存且口径一致。两条 blocking 均为文本级:F1 公式与 36/45 输出数学互斥(改两档定值 + 可行性校验式,用户裁决);B1/B2 呈现面 API 漂移未登记(冲突⑧/OQ3 扩条)。 -Prior verdict resolved: First review - -### Blocking → 修复对照(delta 复核清单) - -| # | blocking | 修复 | 核销 | -|---|---|---|---| -| 1 | **F1 公式与自声称输出/AC-2 矛盾(spec-AC 阻塞标准)**:按示例自带 pad=16/16 实算,min(744,460)=460 → 12×12 floor=38(非 36,示例等式本身不成立)、10×10 floor=46(超自声明 Output Range [30,45] 上界,AC-2 却断言 45);且 cell=36 要求可用高度 ∈[432,443]、cell=45 要求 ∈[450,459]——两区间不相交,**任何固定边距的闭式都无法同时得出两档** | F1 改**两档定值**(battle.md 拍板 36/45)+ **可行性校验式**(`floor(min(D_w−pad_h, D_h−ap_bar_h−pad_v)/N) ≥ cell(N)` 且 ∈[30,45],装板期断言 fail-fast)+ 区间不相交数学依据注记;AC-2 措辞同步(用户裁决方案 A:定值档位+校验式) | ✓ lint PASS | -| 2 | **呈现面 API 接口漂移未闭环**:Rule 3 / 依赖表称 B1 五函数(`presentation_snapshot` / `is_battle_live` / `stock_count` / `query_reward_identity` / `submit_window_selection`)为"B1 成文呈现面"、B2 两投影(`hero_unit` / `all_enemies`)——B1/B2 GDD 正文零命中;唯一成文载体 = registry `d1_presentation_surface`(owner=D1 自身,切片事实转正)。OQ3/冲突⑧原只登记 `settlement_snapshot` 信号,7 个函数漏登记(`is_battle_live` 为 Rule 18③ 唯一生命周期观测口,承重) | 冲突⑧/OQ3 扩条覆盖全部 7 函数 + 1 信号;Rule 3 与依赖表 B1/B2 行措辞改"切片实现、registry 登记、上游 GDD 契约登记待批";回 B1/B2 修订批补登记 API 面(时机 = B5 GDD 前) | ✓ | - -### Recommended(同批顺路核销) - -1. 状态头"上游:全部 Approved(…C3…)"失实——systems-index 记 C3 = Designed 未经评审 → 已更正(并注 D1 零玩法消费 C3)。 -2. C1-lite(level_runner)声明上游 hard 但 C1 GDD 未开始 → 依赖表注记"切片代码契约,C1 GDD 定稿时回填(接口漂移回 C1 批)"。 -3. Rule 22 可访问性子项(字号下限明细 ≥14/tooltip ≥13、无闪烁 >3 次/秒、减动效、纯鼠标)无 AC 覆盖(原仅 Rule 22→AC-23 CJK)→ 新增 **AC-26**,覆盖矩阵 Rule 22→AC-23/26。 - -### Nice-to-have(同批核销) - -- Rule 18③ "尸位"生造比喻 → 直白表述"死亡后仍留场的呈现"(用语纪律)。 -- 「RAP−8」文案模板 → 「RAP−{rap_refresh_cost 表读值}」占位(防实现照抄字面量——OQ2 降级文案同步)。 - -### 核查通过项(供未来 re-review 参考) - -- 27 项义务台账逐项与 systems-index 登记吻合(A2×6 / B2×4 / B3×4 / B4×5 / B1×3 / A4×3 + A3 + A1 EC5)。 -- 载荷 #4 公共七字段 = B1 Core Rule 14 逐字一致;A2 `sub_reason` 七值枚举一致;B3 Rule 6 六归因字段一致;B4 `query_inventory` / `usable_now` / E21 受理序一致。 -- art-bible:色值(#33261B 系 / 旗朱 #C63D22 / 暮蓝 #5A6C8C)、对比锚 6.9:1 / 5.3:1、禁入色相带 300°–345°、§4.6 键集(sapped 冻结未启用 / clear_blast 并列预留)全部一致。 -- battle.md:五区尺寸(28/252/240/~760/280、44px AP 条、84/24px 明细带)、能量档(2/10、7/10)、窗口锚点(授予段后)一致。 -- ADR-0001 订阅纪律(呈现层只订 B1/runner)、ADR-0002 canvas_items/expand 1280×800、ADR-0004 双载体 + gdUnit4 deferred 口径一致。 -- 三条切片教训硬性要求(Rule 17/18 + AC-19/20/24)齐备;冲突清单 ⑧ 项、OQ 12 项均有 owner/时机。 -- 遗留(非本 GDD 缺陷):C1 GDD 未开始(runner 契约由切片代码承载);`design/accessibility-requirements.md` 未建(正式分层待定稿——已在 OQ7 登记)。 diff --git a/design/archive/gdd-2026-09-14/reviews/d2-data-config-review-log.md b/design/archive/gdd-2026-09-14/reviews/d2-data-config-review-log.md deleted file mode 100644 index 15ad0f2a..00000000 --- a/design/archive/gdd-2026-09-14/reviews/d2-data-config-review-log.md +++ /dev/null @@ -1,45 +0,0 @@ -# D2 数据配置与数值表 — 评审日志(Review Log) - -> 文档:`design/gdd/d2-data-config.md` · 本日志由 /design-review 流程维护 - -## Review — 2026-09-07 — Verdict: NEEDS REVISION(阻塞项已同日修订,待 re-review) -Scope signal: M -Specialists: game-designer · systems-designer · qa-lead · creative-director(senior,独立复核关键主张后裁定) -Blocking items: 5(簇) | Recommended: 15+ -Summary: 架构选择成立(schema 先行、单点注册表、封闭 RNG 流、fail-fast、黄金向量锚定,R2 六向量经独立复算全对),但四簇规约缺陷阻其兑现存在承诺:R2 按字面在 GDScript 不可书写且溢出论证错误、scope_counter 递增语义与 AC-3 恒等矛盾、续玩快照缺计数器;master_seed=INT64_MIN 经 abs() 与 0 静默别名(实测确认);fail-fast 的 AC-2 单进程自相矛盾、夹具注入路径未定、游戏内/release 致命通道零覆盖;难度公式第三维"精英/Boss 修饰"在两维行键体系无家 + Rule 4 未限定冒险内、行键合成未定义。另有方向级裁决:combat_var"结算浮动"流删除(与 P1"不靠 roll"定位相悖、无具名消费者,增流通道保留作 B1 未来出口)。 -Prior verdict resolved: First review - -### 同日修订落实(agent 代拟,用户 re-review 前 Status 保持 NEEDS REVISION) - -阻塞簇 → 修复对照: - -| 阻塞簇 | 修复 | -|---|---| -| 1. R2 规约不可实现/不自洽 | R2 改写为实现级规约(wrap64 回绕、禁 float/%、分段常量表达式);拆分纯函数 `derive_at` + 有状态门面 `open_stream`(scope 事件唯一绑定);D3 快照契约补各流计数器;"距溢出界极远"论证删除 | -| 2. INT64_MIN 静默别名 | EC6 补"恰为 INT64_MIN → 致命";abs 归一化保留(AC-6 兼容);registry 登记 | -| 3. fail-fast 验证通路 | 校验双通道规格(collect_only 游戏/测试两通道)+ `--data-root` 注入根;AC-2 改单进程测试通道断言;AC-2b 端到端致命路径;AC-18 release 通道 deferred 登记 | -| 4. Rule 4/表结构语义 | Rule 4 限定"冒险内"+ 键合成规则 + 10 表键结构列 + 精英/Boss 修饰预留 `elite_`/`boss_` 命名空间(语义归 C3);AC-5 改用真实 schema、AC-13 补键契约断言 | -| 5. combat_var 流 | 删除(Rule 5 改 2 流;R2 盐/向量、Interactions、Dependencies、registry 同步);R4 增"玩法随机走增流通道 + P1 评审"条款 | - -必修/建议项同步落实:R1 去重键改四元组 + missing_type 枚举补 both/base_ceil + 删"供 C3 审计"改开发期信号 + 曲线导出工具登记 C3 期交付(OQ5);depth-0 锚行校验(EC15/Rule 6);Edge Cases 全量编号 EC1–EC16;夹具补重复键/缺锚行/未播种(AC-17)/悬空引用条件性登记;reward_roll 黄金向量 7422916049646135537(经独立复算);R1 越域守卫(EC14);override key=字段点路径 + 未知 key 告警;States 增 reload-Failed 分支 + RNG 状态线独立声明;碰撞声明改"同冒险内无碰撞";"全部 20 系统"改"其他 19 系统(A2 间接)"+ C2←D2 边登记待索引显式化;占位参考值补溯源分级(出处定稿/待查/机制待定)+ 定稿删除义务;AC-13 自动化、AC-8 收窄、AC-14 三要素、AC-4 观测规格、AC-16 门标志归 B1、AC-1 去硬编码数量。 - -未落(留待用户/后续): -- validation_strictness 陷阱旋钮去留(nit,未动) -- systems-index 依赖表补 C2←D2 显式边(属索引文件,仅改了状态行) -- 占位值"出处待查"三项(伏击 +3 / 清图 +10 / 敌 18HP/4ATK)需查原型 REPORT 补溯源 - -## Re-Review — 2026-09-07 — Verdict: NEEDS REVISION(5 阻塞同日修订落实,待 delta 复核) -Scope signal: M -Specialists: game-designer(APPROVED)· systems-designer(NEEDS REVISION)· qa-lead(NEEDS REVISION)· creative-director(senior,2:1 终裁:NEEDS REVISION·末轮小修) -Blocking items: 5 | Recommended: 8 | Nice-to-have: 6 -Summary: 前轮 5 簇中簇 1/2/5 完全闭合(R2 五条黄金向量经主评审+systems-designer+qa-lead 三方独立复算逐位吻合;INT64_MIN 别名经数学确认;combat_var 全文无残留),簇 3/4 部分闭合。creative-director 终裁:规约-vs-AC 同输入矛盾与 AC 虚假覆盖声明延续上轮簇 1 的阻塞标准,不因修复体量小豁免,亦不升级 MAJOR(零架构返工)。5 项新阻塞(已全部按终裁清单修订):① R1 missing_type 分类规则缺失且与 AC-5 同输入矛盾;② EC14 零 AC 覆盖 + AC-2b"主场景"不可行 + AC 前言覆盖声明不实;③ warning 通道在 headless 下不可观测(增诊断收集器 + reset_diagnostics + 去重注册表复位语义);④ 实体键复合解析语义空白(进度键 floor、实体键精确匹配、缺失即致命);⑤ Rule 6 三处自相矛盾(加载期/运行期二分、EC15 写死开非 knob)。advisory 同步收编:reward_roll 绑定 provisional flag(P1 论证归 B4,创意风险 #1)、负 scope/重播种守卫、R3 范围校验 + v1 仅单行表 + 可注入谓词、elite_/boss_ C1 逃逸条款与 AC-13 断言、快照无在飞实例前提、索引补 C2/B1/B4/C4←D2 四边(同日落实)、曲线导出工具排期倒挂登记(OQ5)。 -Prior verdict resolved: Partial — 簇 1/2/5 RESOLVED;簇 3/4 PARTIAL(残留即本轮 5 阻塞) -日志勘误:上轮"夹具补未播种"表述不准——未播种为行为级覆盖(AC-17),非 AC-2 夹具;本轮 AC 前言已按加载期/运行期分类如实改写。 -Delta 复核清单(下轮只需核对):① R1 分类规则 + AC-5 推导一致性;② AC-5b/AC-2b/致命协议/前言声明;③ 诊断收集器规格与 AC-5/6/7 改写;④ Rule 4 解析语义;⑤ Rule 6/EC15/Tuning Knobs 一致性。 - -## Delta 复核 — 2026-09-07 — Verdict: APPROVED(D2 收口) -Scope signal: M -Specialists: 独立 delta 复核员(1 名子 agent,按上轮"Delta 复核清单"逐项核对) -Blocking items: 0 | Recommended: 0(遗留 advisory 不阻塞下游,归后续 owner GDD/索引) -Summary: 5 项阻塞修复逐一核对 PASS——① R1 分类规则可独立推导 AC-5 全部期望值(both/base_ceil/去重键均自洽);② AC-5b/AC-2b/致命断言协议统一且前言覆盖声明如实;③ 诊断收集器规格落地,AC-5/6/7 断言改经收集器;④ Rule 4 实体键精确匹配语义落地;⑤ Rule 6 加载期/运行期二分,与 EC15/Tuning Knobs/States 表口径一致。残留扫描 0 命中。D2 → Approved,下一系统:A3 行动经济(设计顺序第 2 位)。 -Prior verdict resolved: Yes(re-review 5 阻塞全部闭合) diff --git a/design/archive/gdd-2026-09-14/reviews/d2-data-config.pre-revision-2026-09-07.md b/design/archive/gdd-2026-09-14/reviews/d2-data-config.pre-revision-2026-09-07.md deleted file mode 100644 index 4e4079ee..00000000 --- a/design/archive/gdd-2026-09-14/reviews/d2-data-config.pre-revision-2026-09-07.md +++ /dev/null @@ -1,232 +0,0 @@ -# D2 数据配置与数值表(Data Config & Balance Tables) - -> **Status**: Designed(待用户统一评审 + 独立设计评审) -> **Author**: user + agents(systems-designer、qa-lead 已按 lean 门禁咨询) -> **Last Updated**: 2026-09-07 -> **Implements Pillar**: P1、P2(基础设施层,间接支撑全部四支柱) -> **Layer**: 1 Foundation · **Milestone**: MVP · **设计顺序**: 第 1 位 -> **Creative Director Review (CD-GDD-ALIGN)**: 跳过——Lean mode(生产前请人工复核) - -## Overview - -D2 是游戏的数据底座:把所有影响玩法手感与平衡的数字——行动点、旗子数、奖励数值、敌人属性、成长曲线、变异参数——从代码中搬出,变成可配置、可校验的数值表与配置资源;同时提供两样基础设施:统一的"数值从哪读"注册表(各系统只向 D2 要数据,不再各自硬编码),以及随机数种子服务(RNG 由 D2 统一发放,是战斗可复现、可回放的前提)。 - -玩家不会直接"使用"D2,但每一局都在感受它:难度能否做到"越下越难",靠它第一天就内置的关卡序号 / 节点深度两个维度;每次平衡调整无需改代码即可生效,让"测试数据驱动平衡"成为本作的开发方式——这是个人开发在资产与人力受限下仍能保证手感稳定的底牌。 - -D2 遵循既定的"**schema 先行、数值回填**"策略:本 GDD 只定数据结构、注册表与校验模式,具体数值留空位,由后续系统 GDD(A3 行动经济、B4 奖励经济、C3 难度曲线等)按设计顺序回填。没有 D2,参数将散落各处硬编码:调一次难度要改五处代码,战斗无法用固定种子复现,headless 自动化测试无从谈起。 - -## Player Fantasy - -D2 没有专属的玩家幻想——它是玩家永远不该注意到的地基。正面的情绪目标由其余系统承载:P1"我算对了"的掌控感来自 A1/A2 的可推理设计,P2 的延迟兑现感来自 B1 的可见结算。D2 对体验的贡献是三种**消极保障**——它不制造情绪,但它的失职会直接摧毁这些情绪: - -- **手感稳定**:所有影响手感的数字(AP、旗子、折算比例、奖励值)集中一处可调。任何"这轮玩起来不对劲"都能不改代码地快速修正、反复验证——玩家感受到的是"每次迭代都更顺",而不是改动引发的新毛刺。 -- **公平可信**:RNG 统一种子化,相同的决策序列必然得到相同的战斗结果。"我明明算对了却输了"永远不应源于不可复现的随机——这是 P1 的信任底线。 -- **难度可信**:数值表天生带关卡序号/节点深度维度,"越下越险"(P4)由结构化数据保证,而非散落各处的魔法数字——难度曲线因此可审计、可回溯。 - -## Detailed Design - -### Core Rules - -1. **单一事实源**:所有设计师可调的玩法数值只存在于 `data/tables/` 下的 `.tres` 资源;代码中禁止出现玩法数值字面量(引擎/工程常量除外)。违反视为评审阻塞项。 -2. **单点访问**:各系统经 autoload **`ConfigDB`** 的类型化属性读取(例:`ConfigDB.action_economy.ap_per_round`);禁止绕过 ConfigDB 自行 `load()` 表文件或长期缓存副本(保证校验单点与热重载一致性)。 -3. **Schema 先行、数值回填**:每个数值表 = 一个自定义 Resource 类(`data/schemas/`,字段带类型/范围/默认值/注释)+ 数据文件(`data/tables/`)。本 GDD 交付全部 schema 与占位表;数值由 owner 系统 GDD 回填: - -| 表资源 | Schema 占位内容 | Owner(回填 GDD,设计顺序位) | -|---|---|---| -| ActionEconomyTable | AP/旗/折算/清图字段名 | A3(第 2 位) | -| VariationTable | 变异类型枚举 + **biome/tag 数据字段**(AD 门禁) | A4(第 3 位) | -| StatusEffectTable | buff 时限/叠层字段名 | B3(第 4 位) | -| BoardGenTable | 布雷数/可推理率参数/尺寸字段名(P1 生成端保障) | A1(第 5 位) | -| EnemyTable | 敌人属性/词条/意图可见性字段名 | B2(第 7 位) | -| RewardTable | 奖励池权重 + **"使用时机"字段占位** | B4(第 8 位) | -| SettlementTable | 结算顺序/来源标注字段名(P2 归因) | B1(第 9 位) | -| DifficultyTable | (level_index, node_depth) 行结构、成长参数 | C3(第 12 位) | -| HelperItemTable | 探测/安全旗参数 | A5(第 11 位) | -| MetaTable | 代币/天赋字段名 | C4(第 16 位) | - -4. **进度维度内建**:凡随进程成长的表,行键必须是 `(level_index, node_depth)`;无成长语义的全局常量表允许单行。解析规则见 Formulas-R1。 -5. **RNG 单点**:autoload **`RngService`**(D2 范围)持有封闭命名流:`board_gen`(A1 布雷)、`reward_roll`(B4 掉落)、`combat_var`(B1 结算浮动)。玩法代码禁止 `randomize()` 或自建 RandomNumberGenerator。master seed 在冒险开始时由 C2 调用设定。 -6. **失败即响(fail fast)**:校验错误(字段越界/类型错/表为空或某 level 无行/重复键/悬空引用/权重和 ≤0/未播种流取数)在 editor、CI、headless、release 一律致命中止。MVP 有意不做软回退——错误数值上线比崩溃更伤(P1/P2 的信任底线)。 -7. **零 UI 依赖**:D2 及其测试不 import 任何 Control/场景类;"Core 层 `--headless` 跑完整战斗"工程债在数据侧的落实。 -8. **版本化**:`SCHEMA_VERSION` 常量归 D2;表文件与存档(D3)携带版本号,高版本拒读。 - -### States and Transitions - -| 状态 | 进入条件 | 行为/出口 | -|---|---|---| -| Unloaded | 进程启动前 | 磁盘 `.tres` 未加载 | -| Loading | `ConfigDB._ready()` | 按表清单逐一 `load()`;文件缺失即入 Failed | -| Validating | 单个资源加载成功 | 调 schema 的 `validate()`,错误入收集器 | -| Ready | 全部通过 | 类型化属性可读;RngService 流就绪 | -| Failed | 任一致命错误 | 全构建致命中止并输出错误清单(Rule 6) | -| Reloading(仅 debug) | 编辑器热重载/调试键 | 战斗中拒绝;否则重走 Loading → Ready | - -RNG 生命周期:进程启动 → 流待命(**未播种时取数即致命**)→ 冒险开始设定 master_seed → 每场战斗派生 scope 种子 → 冒险结束保留供复盘。 - -### Interactions with Other Systems - -| 系统 | 方向 | 接口契约 | -|---|---|---| -| 全部 20 系统 | 它们 → D2 | ConfigDB 类型化读取;禁止其他取数路径 | -| A1 | 消费 | VariationTable schema(biome/tag 字段)+ `board_gen` 流 | -| A3 / A4 / B2 / B3 / A5 / D1 | 消费 | 各自表 schema 占位(见 Core Rules 表) | -| B4 | 消费 | RewardTable schema(含"使用时机"占位)+ `reward_roll` 流 | -| B1 | 消费 | SettlementTable schema + `combat_var` 流(可回放步骤流的数据前提) | -| C2 / C3 | 消费 | `RngService.set_master_seed()` + DifficultyTable 行解析 | -| D3 | 消费 | `SCHEMA_VERSION` + 存档内 master_seed 快照(续玩/复盘) | -| D2 外发 | → | 不订阅任何玩法事件;仅 debug 构建发 `config_reloaded`(D1 调试用) | - -双向一致性:systems-index 依赖表中以 D2 为依赖方的系统(A1、B2、C3 及 Foundation 层全员的事实依赖)与本节一致;D2 不依赖任何玩法系统(依赖层 1:无)。 - -## Formulas - -> systems-designer 代理已复核(lean 门禁);其指出的 scope 重置撞种子缺陷与 hash() 稳定性问题已修正并入。 - -### R1 难度行解析(difficulty_row_resolution) - -`row = resolve(table, level_index, node_depth)` - -- `L* = max{ lv ∈ LevelKeys(table) | lv ≤ level_index }`;空集 → `L* = min LevelKeys(table)` -- `D* = max{ dp ∈ DepthKeys(L*) | dp ≤ node_depth }`;空集 → `D* = min DepthKeys(L*)` -- 非精确命中(缺失类型 `level_floor` / `depth_floor`)记 warning:**去重键 = table_id**(每表每次运行至多一条),内容含请求 (level_index, node_depth)、解析结果 (L*, D*)、缺失类型——供 C3 审计难度曲线断档 -- **不存在 default 行兜底、不存在 clamp 外推**:表非空且每个 level 至少 1 行是 Rule 6 校验前置;超表成长外推是 C3 owner 公式的职责,D2 只解析到最近已有行 - -**Variables:** - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| level_index | int | ≥1 | 当前关卡序号(1 起) | -| node_depth | int | ≥0 | 节点深度(0=关卡入口) | -| L* / D* | int | 表内键 | 命中行键 | - -**Output Range:** 行资源必有值(前置条件由校验保证);极端输入(超表大关卡号)命中最大已有行。 -**Example:** 表含行 (1,0) (1,4) (2,0) (2,6);`resolve(t, 3, 3)` → L*=2(level_floor)、D*=0(depth_floor)→ 返回 (2,0) 行,warning 一条(去重后)。 - -### R2 流种子派生(stream_seed_derivation) - -`stream_seed = ( SALT_s XOR ((master_seed + scope_counter × 0x9E3779B97F4A7C15) MOD 2^64) ) AND 0x7FFFFFFFFFFFFFFF` - -**Variables:** - -| 变量 | 类型 | 范围 | 说明 | -|---|---|---|---| -| SALT_s | int64 | 编译期常量 | board_gen=0xA0761D6478BD642F · reward_roll=0xE7037ED1A0B428DB · combat_var=0x8EBC6AF09C88C6E9(互异奇常数,均 ≠ 乘数 0x9E3779B97F4A7C15) | -| master_seed | int64 | [0, 2^63) | 冒险主种子;`set_master_seed()` 对负输入 abs() 归一化并 warning | -| scope_counter | int64 | ≥0 | **每流独立的全局单调计数器**:set_master_seed() 时归零,此后每次派生 +1,永不重置(不按关卡/图序重置——否则不同关卡的同序号图会得到相同种子) | - -**设计约束与边界:** -- 不用运行时 `hash()`——Godot 文档不承诺其跨版本稳定,而跨版本可复现是 P1 信任底线;流集合封闭(Rule 5),编译期盐即可 -- 取数前置:流未播种(master_seed 未设)即 `push_error` + 中止(Rule 6 同级),禁止 seed=0 之类的静默回退 -- 输出经 AND 掩码保证非负后再赋 `RandomNumberGenerator.seed`;GDScript int 为 64 位,scope 实际规模(<10^6)距溢出界极远,无需额外防护 - -**Output Range:** [0, 2^63),任意两次不同输入(盐/主种子/scope 任一不同)输出完全不同;同输入恒同输出。 -**Example:** master_seed=42 时 board_gen 流前 4 次派生(scope 0–3)= 2339089373825164293 · 4485977604321908752 · 2024629813010603131 · 8849696722413293638;同 scope=3 下 combat_var = 6060164893835244160;master_seed=43 的 board_gen scope=3 = 8849696722413293637。 - -### R3 调试覆盖链(debug_override,仅 debug 构建) - -`effective = override[key] if _has_override(key) else table_value` - -边界四条:① 覆盖判定与存储内聚于 ConfigDB(Rule 2 单点),gameplay 不可见 override 来源;② override 值类型必须与 schema 字段一致,不一致 → debug warning + 忽略该条;③ release 构建不加载、不注册任何 override 源(恒等是结构保证而非"碰巧不生效");④ override 仅为运行时状态,永不回写 `.tres`。 - -### R4 显式排除 - -玩法平衡公式(伤害、掉落权重、成长曲线)**不在 D2**——归 owner 系统 GDD(B1/B4/C3 等)。本 GDD 不含任何平衡数值公式,只负责取数与解析。 - -## Edge Cases - -- **If 表文件缺失或 load() 失败**:致命中止,错误清单含路径;无软回退(Rule 6)。 -- **If 字段越界 / NaN / 类型不符**:`validate()` 收集后致命。 -- **If 表为空或某 level 行集为空**:校验阶段致命(R1 前置条件),不会进入运行期。 -- **If 请求 (level_index, node_depth) 无精确行**:按 R1 floor 解析 + warning(去重键 table_id)——预期行为,不是错误。 -- **If level_index 超过表最大 level**:命中最大 level 行(floor 规则的自然结果,无独立 clamp 分支)。 -- **If master_seed 为负**:`abs()` 归一化 + warning,保证 ∈ [0, 2^63)。 -- **If 未设 master_seed 就取随机数**:`push_error` 后**显式中止**(GDScript 的 push_error 本身不终止进程——游戏内走致命错误路径,冒烟脚本 `quit(1)`),取到的值不可用——这是 C2 未接线的显式暴露,禁止 seed=0 软回退。 -- **If 战斗进行中请求热重载**:拒绝并返回 false,提示"下一场生效"。 -- **If 存档携带的 SCHEMA_VERSION 高于当前**:拒绝读取(比较逻辑归 D3,常量归 D2)。 -- **If 奖励权重表权重和 ≤ 0**:validate 致命(B4 回填后必须 > 0)。 -- **If debug override 类型与 schema 字段不符**:warning + 忽略该条(仅 debug;release 无 override 源)。 -- **If 同一流名被重复注册或请求未知名流**:debug 断言中止(流名封闭)。 -- **If 两个系统同帧请求同一流**:允许——计数器各自 +1 按调用顺序串行生效,单线程假设成立(Godot 主线程玩法逻辑),不引入锁。 - -## Dependencies - -**Upstream(hard)**:无。Foundation 层,D2 不依赖任何系统。 - -**Downstream**: - -| 依赖方 | 性质 | 接口 | -|---|---|---| -| 全部 20 系统 | hard(Rule 1 单一事实源) | ConfigDB 类型化读取 | -| A1 | hard | VariationTable schema(biome/tag 字段)+ `board_gen` 流 | -| A3 | hard | ActionEconomyTable schema 回填 | -| A4 | hard | VariationTable 回填 | -| B2 | hard | EnemyTable 回填 | -| B3 | hard | StatusEffectTable 回填 | -| B4 | hard | RewardTable 回填(含"使用时机"占位)+ `reward_roll` 流 | -| B1 | hard | SettlementTable 回填 + `combat_var` 流 | -| C2 | hard | `set_master_seed()` 调用方(冒险开始) | -| C3 | hard | DifficultyTable 回填 + R1 行解析审计 | -| A5 / C4 / D3 | hard(垂直切片 / Alpha) | HelperItemTable / MetaTable 回填;D3 另消费 SCHEMA_VERSION + master_seed 快照 | -| D1 / D4 / D5 / D6 | soft | 如需参数表再增 schema(现无占位) | - -- A2 无直接依赖(只外发事件;其参数经 A3 表承载),与 systems-index 的 A2 回边规则一致。 -- **接口漂移修订规则**:owner GDD 定稿时可以修改占位 schema 类(schema 与表同仓),但必须回写本 GDD 的 Core Rules 表清单与 `design/registry/entities.yaml`,并在本文件 Status 行登记修订。 -- 双向一致性:与 systems-index 依赖分层表核对一致(A1←A4,D2 · B2←D2 · C3←D2,B2 · Foundation 含 D2)。已知待定:C3 是否消费 B1 输出(见索引门禁增补记录,C3 GDD 定稿,不影响 D2)。 - -## Tuning Knobs - -**D2 自身 knobs(元参数):** - -| Knob | 默认 | 调过高 | 调过低 | -|---|---|---|---| -| validation_strictness | fatal | ——(fatal 即上限) | warn:放行带病数值,CI 冒烟失去意义 | -| floor 解析策略 | floor + warning(无外推) | —— | 引入外推/静默会掩盖 C3 难度断档 | -| rng_stream_names | 封闭 3 流 | 增流需改代码(有意设卡) | 流复用破坏可复现隔离 | -| debug_override_enabled | false(仅 debug 构建) | 污染测试基线 | —— | -| 表路径清单 | `data/tables/` 固定 | —— | 散装路径破坏单点访问 | - -- **Knob 交互**:validation_strictness=warn 将使冒烟测试(AC-1)失效,两者必须联动改;floor 策略与 C3 的难度审计共享语义,改动需 C3 GDD 知情。 -- **占位表中的原型参考值**(provisional——owner GDD 定稿前不视为平衡事实):AP 8/轮 · 旗 4/轮 · 伏击 +3/层 · 标中 +5/面 · 停手折算 ×2 · 清图 +10 与剩余 ×1 · 增伤 1.5× / 减伤 0.5× / 持续 2 次结算 · 敌 18HP / 4ATK · 胜场成长 +25% HP / +1 ATK · 奖励池 5 类(伤害/增伤/减伤/AOE/治疗)。owner:A3 / A4 / B3 / B4 / B1 / C3 按设计顺序回填。 - -## Visual/Audio Requirements - -无直接表现面(纯数据层)。仅两项开发侧"可视化":Godot 编辑器 Resource inspector(自带)与校验错误控制台输出(错误清单格式见 AC-1)。无音频需求。 - -## UI Requirements - -MVP 无面向玩家的 UI。debug override 经 Godot 编辑器 / 命令行参数设置,不做自定义面板;校验失败在 editor/CI 输出控制台,release 构建走引擎默认错误路径。 - -## Acceptance Criteria - -> qa-lead 代理复核(lean 门禁):初稿 8 条仅覆盖 5/8 核心规则、5/13 边界,战斗重放条目在 D2 阶段不可测(无战斗载体)——以下为补齐与降级后的清单。除标注"人工/deferred"外全部可纳入 `--headless --script` 冒烟框架。 - -**加载与校验(Rule 3/6)** -- **AC-1** GIVEN 干净检出,WHEN `godot --headless --script tests/smoke_data.gd`,THEN Core Rules-3 表清单的 10 个表全部加载且 `data/tables/` 无清单外 .tres;脚本成功 `quit(0)`,任一失败 `quit(1)` 并输出错误清单(表路径 + 字段 + 错误类别)。 -- **AC-2** GIVEN `tests/fixtures/` 夹具集(越界字段 / 文件缺失 / 空表 / 某 level 无行 / 权重和 ≤0 各一),WHEN 冒烟脚本逐夹具校验,THEN 每个均致命中止(quit 非 0)且错误清单含对应类别(EC1/EC2/EC3/EC10)。 - -**公式(R1/R2/R3)** -- **AC-3** GIVEN R2 黄金向量,WHEN master_seed=42 派生 board_gen scope 0–3 与 combat_var scope=3、master_seed=43 派生 board_gen scope=3,THEN 6 个结果逐个等于 Formulas-R2 Example 常量;同流同 scope 重复派生恒等。 -- **AC-4** GIVEN master_seed=42,WHEN board_gen 跨模拟"关卡切换"连续派生,THEN scope_counter 单调不重置(各关同序号图种子互异)。 -- **AC-5** GIVEN 表含行 (1,0)(1,4)(2,0)(2,6),WHEN `resolve(3,3)`,THEN 返回 (2,0) 行且 warning 恰一条(含请求/结果/缺失类型);WHEN 同表再 `resolve(3,4)`,THEN 不再发新 warning(去重键 table_id);WHEN `resolve(99,99)`,THEN 命中最大已有行(EC5)。 -- **AC-6** GIVEN master_seed=-7,WHEN `set_master_seed()`,THEN 归一化为 7 + warning,后续种子 ∈ [0, 2^63)(EC6)。 -- **AC-7** GIVEN debug 构建 override{ap=99},WHEN 经 ConfigDB 读取,THEN effective=99;GIVEN override 类型与 schema 不符,THEN warning + 忽略该条;GIVEN `reload()` 后,THEN .tres 文件内容不变(R3 边界①②④)。 -- **AC-8** GIVEN 非 debug 构建(feature 标签模拟),WHEN `_has_override(key)`,THEN 恒 false(R3 边界③;release 模板构建验证为半自动)。 - -**静态与架构(Rule 1/2/5/7/8)** -- **AC-9** GIVEN D2 文件集(data/schemas、ConfigDB、RngService、tests),WHEN 静态扫描,THEN 无 `randomize()` 调用、无 ConfigDB 之外的 `load("res://data/…")`(Rule 2/5)。 -- **AC-10** 同扫描无 `extends Control/Node2D`、无 `.tscn` preload,**且** AC-1 headless 实跑通过——两项合成判定 Rule 7。 -- **AC-11** WHEN 请求未知名流或重复注册流名,THEN debug 断言中止(EC12)。 -- **AC-12** GIVEN 同帧对同一流连续两次取数,THEN 两个互异且顺序确定的种子(EC13)。 -- **AC-13** WHEN 代码检查,THEN `SCHEMA_VERSION` 常量存在且 ConfigDB 可读、10 个 schema 均携带版本字段(Rule 8;"高版本拒读"路径 deferred→D3)。 - -**人工与延迟项** -- **AC-14(人工)** Rule 1 数值字面量禁令:启发式扫描 + GDD 评审人工复核(无法完全自动化)。 -- **AC-15(deferred→B1)** 战斗级可回放:同 master_seed 同动作序列 → 结算步骤流逐行相同(B1 集成测试;D2 阶段无战斗载体)。 -- **AC-16** GIVEN debug 构建且 reload 门标志置位(模拟战斗中),WHEN `reload()`,THEN 返回 false、ConfigDB 值不变、不发 `config_reloaded`;GIVEN 门未置位,WHEN `reload()`,THEN 返回 true 且新值经类型化属性可读。 - -## Open Questions - -1. **headless 测试载体终稿**:MVP 用 `--headless --script` 冒烟(本 GDD 决策);gdUnit4 是否在 Technical Setup 引入并迁移冒烟用例——owner:Technical Setup 阶段(systems-index 门禁增补记录项)。 -2. 编辑器内表文件热重载自动化(当前仅 debug 键触发;低优先)。 -3. 数值表显示名的本地化——D6 归口。 -4. C4 MetaTable 并入 ConfigDB 还是独立 autoload——C4 GDD 定(倾向并入)。 diff --git a/design/archive/gdd-2026-09-14/reviews/proposal-reward-polarity-2026-09-13-review-log.md b/design/archive/gdd-2026-09-14/reviews/proposal-reward-polarity-2026-09-13-review-log.md deleted file mode 100644 index f41e3440..00000000 --- a/design/archive/gdd-2026-09-14/reviews/proposal-reward-polarity-2026-09-13-review-log.md +++ /dev/null @@ -1,23 +0,0 @@ -# Review Log — proposal-reward-polarity-2026-09-13 - -## Review — 2026-09-13 — Verdict: NEEDS REVISION -Scope signal: L -Specialists: lean 模式(用户要求跳过多专家;主会话独立分析。触发源、上游 GDD〔B4/B1/B3/A2/A3/C3〕、registry、切片数据表、playtest 报告均已通读) -Blocking items: 5 | Recommended: 7 -Summary: 核心概念成立——复用 B4 install 期预分配脊柱、零新增效果行(直伤形态除外)、徽章栈位已预留、预注册指标、批次拆分合理;承重方向无动摇。全部 blocking 为规格级缺口:①类型↔奖励行映射未定义(可选类/注入格/roll 程序)②A3 F1 条款②③⑤契约重议义务未列入 delta ③R6"惩罚必须落地"与 B3 满层拒绝/B2 cap=4 冲突且越层语义未定("2 层封顶"与数据 max_stack=16 矛盾)④授予段直伤致死的段序裁定缺(评审侧曾误读为"挖死"——用户纠正:扫雷阶段零数值计算,直伤在结算段授予段落地,原则本身无违背)⑤registry/D2/game-concept/game-pillars 回写义务未枚举。Recommended 首项:数据基线声明(提案的"既有结构"实为 2026-09-13 切片数据批,B3/B1 GDD 与 registry 未吸收——B3 四行 vs 数据六行、"标错惩罚未上线" vs 已上线)。 -Prior verdict resolved: First review - -## 同日修订(2026-09-13,用户拍板两项:直伤结算段落地原则确认 + 负向封顶 = 池 clamp 饱和) -Blocking ① → R1 增类型 = 行家族属性(cell_type 列、单段 roll 结构不动、注入格同映射);② → §3 A3 增 F1 三条款重推义务;③ → R6 改池 clamp 饱和 + B2 cap 显式例外 + 满层拒绝结构不可达论证;④ → §3 B1 增授予段致死短路裁定 + 架构对齐注记(全兑付均在结算段);⑤ → 新增 §3.5 跨文档回写清单。Recommended 项随批:基线声明入头部、OQ-5 撤销改既定事实引用、触发源引用修正、雾格标错中性池兜底、OQ-6 探旗反滥用登记、类型先验泄漏显式拍板、指标 5 增补。 - -## OQ 全闭合定稿(2026-09-13,用户拍板 → 提案 v3,已拍板待实施) -- OQ-1:继承泛化(踩雷统一走类型负向路由、伏击为负向表一行)——用户批内自裁。 -- OQ-2:标中雷正向取代固定 weaken 赠予;A3 条款②锚对象改"标中雷类型正向当量下界"随批重议。 -- OQ-3:weaken 负向 = **sapped 乏力(反噬镜像)**——我方输出 −25% 进 hero_offense 池(attack_up 镜像,B3 新数据行、机制零改动);否决"敌方 weaken 抵免"(破 B3 Rule 8 负空间)与"暂缓复用 enrage"两候选。 -- OQ-4:雾格图标"?"中性标——预制裁决(雾回归时适用)。 -- OQ-6:雾格内容态封禁(board_gen fog_region_count=0,A4 结构不动、雾回归走重设计批)+ 反滥用机制不引入,指标 5 观测兜底。 -- 随批:§0 基线行更新(B3 七行口径)、§3 B3 数据行 +1、§3.5 registry/D2/B3 清单同步(七行 + sapped→hero_offense 映射)、批 1 增雾封禁内容态调整、§4 指标 5 改观测兜底口径。用户明示免复审,本日志为终态记录。 - -## 终审清雾(2026-09-13,用户指示:提案文本零雾格内容) -用户复核指示"现在不需要有任何和雾格有关的内容"——提案 v3 终稿清除全部雾格残留五处:§3 D1 雾格块(OQ-4 预制裁决 + 雾格标错兜底)、§3.5 systems-index 义务清单两条雾条目、OQ-4 条目整体删除、OQ-6 改写为无雾版(探旗反滥用机制不引入、指标 5 观测兜底——裁决实质保留)、批 1 雾封禁注记。grep 复核零命中。 -**雾格封禁行动的去向(记录义务)**:极性验证期雾格内容态封禁(board_gen 内容行 fog_region_count=0 / variation 池不出 fog 行——A4 结构与 GDD 不动)不在本提案文本承载,落点 = 切片内容/配置批(A1 board_gen 行值 / A4 变异池,C3 内容决策域);雾回归时走重设计批(届时雾×极性交互——雾内类型先验、雾格图标呈现、雾格标错归因——重新设计,本日志上方 OQ-4/OQ-6 原裁决文本仅作历史参考,不再作为预制条款)。 diff --git a/design/archive/gdd-2026-09-14/systems-index.md b/design/archive/gdd-2026-09-14/systems-index.md deleted file mode 100644 index 93133685..00000000 --- a/design/archive/gdd-2026-09-14/systems-index.md +++ /dev/null @@ -1,381 +0,0 @@ -# 系统索引(Systems Index) - -> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike) -> 生成:2026-09-06 · 分解来源:`design/gdd/game-concept.md`(概念定稿)+ `docs/prototype-report-minesweeper-battle-concept.md`(原型 v3 验证结论;demo 代码已于 2026-09-12 删除) -> Review mode:lean(TD-SYSTEM-BOUNDARY / PR-SCOPE / CD-SYSTEMS 门禁按 lean 跳过) - -## 文档树导航 - -> 本文件是全部设计文档的树根:先在这里看整棵树和每个节点的一句话概要,决定要进哪个节点。每个节点内部遵循"一页纸"纪律——一节/一条规则/一张公式一页内读完(`tools/gdd_lint.py` R9 强制)。 - -``` -Dungeon Sweeper 设计文档树 -│ -├─ 入口层 -│ └─ gdd.md 独立版 GDD:6 节讲清游戏(概念/循环/系统清单/规模/美术/不做清单) [v1] -│ -├─ 概念层 -│ ├─ game-concept 世界观、目标受众、创意风险登记 [定稿] -│ └─ game-pillars 四支柱:P1 我算对了 · P2 因果归因 · P3 雷的两面 · P4 地牢氛围 [定稿] -│ -├─ 系统层(每系统一份 GDD,文件在 design/gdd/) -│ │ 注:`design/gdd/analysis/` 为各系统推演件目录——design 件只装结论,推演与理由(候选取舍/公式推导/开放问题)在对应 analysis 件 -│ ├─ D2 数据配置 九张表单一事实源 · RNG 封闭流 · fail-fast 校验 [定稿] -│ ├─ A3 行动经济 AP/RAP 账本与价目 · 轮次状态机 · 五条款经济契约 [定稿] -│ ├─ A4 地形变异 雾与变异布置约束 · 承重数学(厚度/f≤8d) [定稿] -│ ├─ A1 棋盘生成 五阶段确定性生成管线 · 可推理率双判据 [定稿] -│ ├─ A2 排雷玩法 三事件回边 · 批次仲裁 · install 四不变式 [定稿] -│ ├─ B3 增益状态 三向效果统一容器 · 单一结算次数量纲 [定稿] -│ ├─ B2 敌人系统 行为环三拍 · 多敌模型 · 意图线索契约 [定稿] -│ ├─ B4 奖励经济 掉落池与双背包 · 两级奖励(即时/可选) [定稿] -│ ├─ B1 战斗结算 七段编排 · 明细流水协议 · 条款①③⑤闭合 [定稿] -│ ├─ A5 辅助道具 挖掘期信息与行动力道具 · 四效果 · 校验谓词 [定稿待人工复核] -│ ├─ C3 难度曲线与Boss 数值成长与全局变异 · SLICE-TUNED 行集 [切片调参版] -│ ├─ C2 冒险结构 关卡序列 · HP 账本 · 关卡大奖励 · 失败重开 · C1 接口契约 [Approved] -│ └─ D1 HUD 框架 五区布局 · 27 项呈现义务 · 信号载荷 schema [定稿待评审] -│ -├─ 表现参照 -│ ├─ design/ux/battle.md 战斗屏级交互与文案(呈现形态权威) [APPROVED] -│ └─ design/art/art-bible.md 视觉基础与图标键契约(§1–4 定稿) [定稿] -│ -└─ 工程面 - ├─ design/registry/entities.yaml 跨系统事实登记表(数值单一事实源) - ├─ docs/architecture/ 架构文档与 ADR - └─ production/session-state/ 项目当前进度(每里程碑同步) -``` - -**怎么读**:想 30 秒了解整个游戏、或给朋友介绍 → 从入口层 `gdd.md` 开始;想懂一条具体规则 → 进入对应系统 GDD 的「核心规则」(人话先行、举证在后);想查一个数值 → registry 或对应 GDD 的 Tuning Knobs;想看某系统管什么/不管什么 → 该 GDD 的「速览」。节点一页装不下就是文档的错,拆子节点,不许铺开。 - -## 系统枚举(20 个) - -### A. 核心玩法层(扫雷侧) - -| ID | 系统 | 来源 | 说明 | 里程碑 | -|---|---|---|---|---| -| A1 | 扫雷棋盘生成 | 隐含 | 布雷、初始安全区、变异布置、按难度参数生成 | MVP | -| A2 | 排雷玩法规则 | 显式 | 小人控制、挖/旗/移、连锁展开、数字提示 | MVP | -| A3 | 行动经济 | 显式 | AP(每轮重置)、RAP 池、旗子(无上限)、停手/清图/耗尽三出口 | MVP | -| A4 | 地形变异 | 显式 | 迷雾/岩浆/冰冻等变异清单与交互规则 | MVP | -| A5 | 扫雷辅助道具 | 显式 | 显影/真视/预读/加 AP 四类辅助消耗品;获取与使用规则 | 垂直切片 | - -### B. 战斗层 - -| ID | 系统 | 来源 | 说明 | 里程碑 | -|---|---|---|---|---| -| B1 | 战斗结算规则 | 显式 | 伤害公式、结算顺序、胜负判定 | MVP | -| B2 | 敌人系统 | 隐含 | 敌人类型/词条、目标选择规则 | MVP | -| B3 | 增益/状态系统 | 显式 | buff 时限、叠层、衰减时机 | MVP | -| B4 | 奖励与道具经济 | 显式 | 奖励表、道具池、权重数值、拆弹奖励 | MVP | -| B5 | 战斗表现 | 隐含 | 结算画面 → 战斗动画、伤害数字 | 垂直切片 | - -### C. 结构与成长层 - -| ID | 系统 | 来源 | 说明 | 里程碑 | -|---|---|---|---|---| -| C1 | 关卡节点地图 | 显式(形态待定) | 关卡内移动、遭遇点/奖励点分布;形态候选已登记(2026-09-09):四方格步进式前进——格网地图、每步从相邻四格选一格推进,可后置 | 垂直切片 | -| C2 | 冒险结构 | 显式 | 关卡序列、关卡大奖励、失败重开 | 垂直切片 | -| C3 | 难度曲线与精英/Boss | 显式 | 数值成长、精英图/Boss 图全局变异 | 垂直切片 | -| C4 | 元进度(存档/天赋/代币) | 显式 | 存档结构、天赋树、代币经济 | Alpha | - -### D. 表现与支撑层 - -| ID | 系统 | 来源 | 说明 | 里程碑 | -|---|---|---|---|---| -| D1 | HUD 与界面框架 | 隐含 | 棋盘/队伍/日志/结算的 UI 容器(简版) | MVP | -| D2 | 数据配置与数值表 | 隐含 | 硬编码参数迁移为可调配置 | MVP | -| D3 | 存档序列化 | 隐含 | 元进度持久化框架 | Alpha | -| D4 | 音频 | 隐含 | 挖掘/踩雷/结算/胜利反馈 | Alpha | -| D5 | 教学引导 | 隐含 | 小人三动作 + 两层循环教学 | Alpha | -| D6 | 设置/本地化 | 隐含 | 常规打磨项 | 完整愿景 | - -## 依赖分层 - -| 层 | 系统 | 依赖 | -|---|---|---| -| 1 Foundation | A3, A4, B3, D2, D3, D6 | 无 | -| 2 Core | A1 ← A4,D2 · A2 ← A1,A3,A4 · B2 ← D2 · B4 ← D2(2026-09-09 B4 定稿收窄:原"A2,B3,D2"——A2 事实经 B1 转化零直接接口、B3 为验收锚关系非运行时边,见 B4 Dependencies 修订注记) | Foundation | -| 2.5 | **A5 ← A2,A4,B4**(辅助道具:依赖排雷规则与变异定义;奖励获取侧挂 B4) | Core | -| 3 Feature | B1 ← A3,B2,B3,B4,D2 · C2 ← C3,D2 · C3 ← D2,B2 · C4 ← D3,C2,D2 · C1 ← C2,C3,B2,B4 | Core | -| 4 Presentation | D1 ← A2,A3,B1 · B5 ← B1,D1 | Feature | -| 5 Polish | D4 ← A2,B1 · D5 ← A2,A3,B1 | Presentation | - -- **循环依赖:无**。全项目唯一允许的回边:A2 只外发事件(`cell_revealed` / `round_end` / `flag_judged`),B4/B1 订阅后回调——A2 不依赖任何人(TD-SYSTEM-BOUNDARY 定) -- **D2 接口依赖边补全(2026-09-07 re-review)**:B4(reward_roll 流)、B1(set_reload_gate 调用)、C2(master_seed 接线)、C4(MetaTable 消费)四条对 D2 的边已补入上表——此四者为 API/接线级依赖,非纯数据读取;其余系统的数据读取为事实依赖,不逐条列边(完整清单见 `design/gdd/d2-data-config.md` Dependencies 表) -- **C3←A1 方向说明**:C3 仅依赖 A1 的**配置 schema**(类型依赖);难度参数经编排器/D2 传递给 A1,禁止 C3 反向调用棋盘生成 -- **瓶颈系统(设计需一次定稳)**:A2 排雷玩法规则(B4/D1/D5 挂其事件)、B1 战斗结算(B5/D4/D5/C3 消费其输出)、D2 数据配置(全员依赖) -- **叶子系统(可晚设计)**:C1、C4、D4、D5、D6 - -## 门禁修正记录(2026-09-06,CD/TD/PR/AD 四总监 CONCERNS 汇总落实) - -- **B2 扩为"战斗单位系统"**:主角与敌人共用受伤/死亡接口;含**雷触发的敌方优势词条(伏击清单)**与**敌方意图可见性规格**(身份承重项,CD 门禁) -- **B1 GDD 须含"轮次生命周期编排"独立章节**(round_end 事件 → 结算 → 判定 → 重置/换图的 owner);输出契约为**可回放步骤流**(结算逻辑内禁止 await/动画);MVP 验收含结算明细来源标注(伤害道具/安全格增益/标中旗削弱/清图奖励/雷→伏击;~~停手折算~~ 已随 A3 RAP 修订作废——停手改产 RAP、退出战斗结算) -- **A1 GDD 须含**:可推理率生成参数(P1 支柱的生成端保障)+ biome/tag 数据字段(AD 门禁换皮约束) -- **A4 MVP 范围收窄**:变异框架 + 迷雾(岩浆/冰冻等无 MVP 容器,随关卡解锁归垂直切片后) -- **B2 MVP 范围收窄**:1–2 种敌人 + 少量词条(名录扩展归垂直切片/Alpha) -- **D2 GDD 策略**:只定 Resource schema + autoload 注册表 + 校验模式,数值表留空位随各系统 GDD 回填;**数值表结构第一天就带关卡序号/节点深度维度** -- **工程债登记**:Core 层必须可 `--headless` 跑完整战斗(不引用 Control/UI);RNG 种子服务归 D2(Foundation);已引爆雷格可通行、治疗不溢出等细节规则写入对应 GDD -- **AD 项**:B5 GDD 前插入"战斗表现美术测试"(一屏样张锁定角色剪影/动画方案/战斗空间);临时 SFX 从 D4 拆出挂垂直切片里程碑 -- **流程债已清**:game-pillars.md 已建(4 支柱);概念文档已增补 Visual Identity Anchor + 目标受众;原型 REPORT.md 已归档(PROCEED) - -## 门禁增补记录(2026-09-07,Concept → Systems Design 重审 CONCERNS 落实) - -> 完整报告:`production/gate-checks/gate-check-systems-design-2026-09-07.md` · 判定 CONCERNS(无阻塞),stage.txt 已写入 - -- **A2 前置**:标错惩罚(v3 现无惩罚)用原型小补丁实测后关闭;可与原型 v3 终验合并为一次会话(CD/PR 门禁) -- **art-bible 排期**:最晚在 D1 GDD(设计顺序第 10 位)前创建(至少 §1–4),"格子样张测试"(数字可读性定风格,game-concept 早期风险登记第 1 条)并入执行;垂直切片门禁硬性要求 art-bible(AD 门禁) -- **B4 GDD 须预留**道具 schema 的"使用时机"字段(主动战斗道具后续版本加入) -- **D1 GDD 须解决**"小人移动路径预览"的表现归属(来源:game-concept 视觉锚风险登记) -- **D2 GDD"校验模式"章节须定** headless 测试载体(`--script` 冒烟 vs gdUnit/GUT);**B1 GDD"轮次生命周期编排"章节须定**事件总线载体(autoload 单例 vs 直连)(TD 门禁) -- **C3 GDD 需定稿**"C3 是否消费 B1 输出"(依赖表 C3 ← D2,B2 与瓶颈注记口径不一)并回写本索引(TD 门禁,可延后) -- **创意风险登记**(CD 门禁,详情见 game-concept"创意风险登记"节):安全格奖励可预期性(P2 前提)→ B4/A4 落实;"我算对了"高光兑现节点 → B1/B4 设计 -- **垂直切片前置**:按预注册验证信号做一次正式 playtest(与标错惩罚实测合并)(CD 门禁) -- **A3 下游经济契约**(2026-09-07 A3 二轮评审登记,同日 RAP 结构修订改写,三轮评审增补条款⑤并钉死闭合 owner):B1 GDD 须承接并验收——① **效果档位对照表**:安全格 buff / 标中旗 debuff / 清图奖励 / 敌方增益统一当量、单一线性换算(分源改率须回 A3 重议);② 标中旗 debuff 档位锚:**严格 >** 最低档安全格 buff 当量,且以**连锁放大的边际挖掘收益**为对照基准(provisional 1:1)、每战标中旗总吞吐由 B1 对账;③ **挖掘风险不等式**:P(安全)×buff 当量下界 > P(雷)×敌方增益当量上界(锚 A1 可推理率参数 × B2 惩罚上限表值,**B1 单一闭合 owner**,B1 GDD 强制检查点);④ 清图奖励 > 0 且预留**按图类型(biome/tag)差异化分支**的结构位(B4 表设计,A3 只上报 cleared;图类型战斗域恒定、不逐图重掷,A1/B4 共同验收);⑤ **清图 vs 弃图刷新支配性**:清图奖励下界使"推到底清图"期望当量 ≥ "确定格挖完即弃图刷新"期望当量(B1 闭合对账,强制检查点——该环与 A1 可推理率反向耦合,是 P1 失败模式的经济对冲)。**request_refresh 契约**:玩家经 D1 发起、B1 结算编排期代理调用(B1 接口须含玩家意图路径,禁止 RAP 满自动刷);刷新成功后回发 `new_board` 为契约义务,未刷新的 stopped/ap_exhausted 轮回发 `new_board` = B1 违约 fail-fast。**【2026-09-12 D4 修订作废】refresh 前移挖掘期(Active 相位受理、B1 `refresh_board` 编排、无结算段无 round_end、每轮上限 2);new_board 回发义务仅限 cleared 轮,stopped/ap_exhausted 恒 same_board——现行契约见 A3 Rule 11 / B1 AC-29/AC-30 / registry `rap_rules` 与下方 2026-09-12 修订登记块】**round_end 双发射源**已登记:A2 外发棋盘路径、A3 直发停手路径(payload 同构);EC4"先停后挖"批次仲裁 deferral 至 A2 集成测试,**义务清单**:{cleared×stopped、stopped×ap_exhausted} × 两到达序共四组合 + RAP 记账随胜出 path_tag(批次 cleared 胜出 → 剩余 AP 作废不入 RAP)。B4 GDD 侧:标中旗一次性兑付、**资格以雷格实例为键**(A3 OQ5,三轮改定——拔旗重插不恢复已消费资格)+ 清图奖励插槽。D1 GDD 侧(三轮增补):RAP 战斗末清零可见反馈。原"stop_multiplier 不等式①②"随停手折算作废而删除。 - -## 门禁增补记录(2026-09-08,B3 定稿登记) - -> B3 GDD:`design/gdd/b3-status-effect.md`(Designed,待 /design-review)· registry 已登记 `status_effect` 条目 · D2 StatusEffectTable 已回填(接口漂移规则) - -- **B1×5 义务清单(B1 GDD 门禁评审逐项核对落位,缺项即 blocking——A4 对 A1/A2 登记先例)**:① 同轮多授予按确定次序调用 apply_effect(EC3 溢出归因依赖)② 事实→授予恰一次转化(EC6——B3 是 dumb 账本不去重)③ percent→乘数换算方向与合成值地板成文(EC7/F2——weaken AP 界 −200%/表界 −400%、defense_up 顶点 −100% 三例)④ 最后一轮 decay 判定(F3/A3 EC8 同款;battle_end 全清兜底)⑤ F1 条款 1 效果档位对照表以 B3 实例为对照实物 -- **🔴 weaken 锚预警(B1 强制检查点输入,registry status_effect.anchor_warning 已登记)**:weaken(−25%×d1)vs A3 F1 条款 2 锚(debuff 当量严格 > 最低档安全格 buff 当量)两独立线性代理同向预检不过(25 vs 100;≈1 vs ≈4)——B1 对照验收优先裁决;坐实违反则上调 magnitude 或 B4 重定参照,接口漂移回写 registry -- **A3 OQ5 收编注记(用户 2026-09-08 拍板)**:"标中旗 debuff 档位归 B4 表设计"修订为——四行 MVP 初值**定稿权归 B3**(已定稿),**锚验收权仍归 B4/B1**(条款 2 + A4 三定价硬约束引用的"最低档安全格 buff 当量"以 attack_up 行为参照对象);A3 GDD(Approved)不改,以本条 + registry ownership_note 为准。**【2026-09-09 B4 评审迁移注记 → 2026-09-11 回迁】**:参照对象曾迁 defense_up 当量(attack_up 时为死行)——2026-09-11 用户裁决"基础攻击恒存在"(HeroTable.atk 域 [1,999]、0 加载拒绝、MVP=6)后 **attack_up 复活,参照对象回迁 attack_up 当量**(消费面 = 主角战斗段先手攻击——B1 GDD 同批增补);本条"attack_up 行为参照对象"字样恢复现行,迁移期结束(历史见 registry status_effect.anchor_warning 回迁注记;C3 首次调参时按 attack_up 口径复算条款 2 预检) -- **EC8 reload gate B1 侧落点(qa-lead 缺口登记,2026-09-09 B4 定稿时错号修正:原记"EC9"——D2 实际编号为 EC8)**:set_reload_gate 置位/复位的真实调用方唯一落点 = B1——B1 GDD 须承载"战斗中真的被置位"的验收(D2 AC-16 只测门机制);防 gate 半句永久零落点 -- **ambush 量纲**:flat "+3" 的单位归 B2 定稿(候选"每颗已开雷伤害加成";联动 F1 条款 3 上限表值,B2 GDD 验收项) -- **B4 三项**:① 首个 refresh/independent 内容行上线时补真实内容行冒烟 AC + 夹具探针退役(B3 EC4/OQ3)② clear_reward 源授予路径确认(source=clear_reward,条款 4 插槽)③ weaken/attack_up 锚验收(条款 2) -- **StatusEffectTable 回填完成**:schema 8 字段 + Rule 4 豁免(定义表键=effect_id)+ 四行 MVP;悬空引用政策 = B4 首引时补校验(B3 EC2);D2 Core Rules 表行与 Status 行已同步回写 - -## 门禁增补记录(2026-09-09,A1 定稿登记) - -> A1 GDD:`design/gdd/a1-board-generation.md`(Designed,待 /design-review)· registry 已登记 `board_gen_table` 条目 + action_economy.referenced_by 增 A1 · D2 BoardGenTable 已回填(接口漂移规则) - -- **A2 双包含回验(A2 GDD 门禁评审缺项即 blocking)**:① A2 实际展开域 ⊆ A1 排除域(既有)② **A1 求解器初始态 ⊆ A2 实际初始展开域**(F1 注记④度量保真对偶——新增;若 A2 定稿展开更小,A1 回退出生 3×3 最小态口径) -- **B1 强制检查点输入口径(登记 B1 GDD)**:条款 3/5 对账消费 **actuals 分布(F4 报告 C 的 p10)而非 inferability_target 参数**——"拿参数当事实"对账空心化防御;fog_burden_ratio(付费格分母)= 条款 5 精确口径;attempt 边界非 scope 事件(B1 编排注记);inferability vs P(安全) 措辞登记 registry(非同义词——生成端结构性上界代理之占比形式) -- **F4 全量批量工具排期(qa-lead G7)**:调参期红线工具(N=256/行)owner = A1 交付物 / C3 消费——**与 D2 OQ5 曲线导出工具同批登记**(排期倒挂:A1 定稿→首行数值回填→即需抽查;临时载体 = 冒烟缩样 AC-6/10,统计意义有限) -- **参考行 provisional 声明**:BoardGenTable MVP 参考行(L1/L2)仅 schema 自洽性证明——曲线数值归 C3 调参所有权,禁止作为平衡事实引用;参考行 biome 占位值 {"dungeon"} 待词表 owner(B4/C1+AD)定稿替换(A1 OQ4) -- **黄金图回归向量协议**:五类手工核验小板 + 整数对比对 + 逐格信息源推导记录入版本库;换 solver_rules/信息源/metric_version = GDD 修订 + 向量重制(推理域冻结的行为侧兑现);**A1 /design-review 时安排手工推导第二人复核**(OQ5) -- **度量独立入口分解面(qa-lead G1,A1 实现契约条款)**:推理器/F3 度量/合法性谓词三入口暴露为独立纯函数(与内嵌调用同一实现)——实现期 ADR 确认;若不暴露,AC-7/8/9/12 单元腿降级重议 -- **A2 前置偏离登记(2026-09-09 用户拍板)**:门禁原要求"标错惩罚用原型小补丁实测后再写 A2 GDD"(2026-09-07 CD/PR 门禁;候选 = 敌方伏击+1;兼任 A3 OQ2 旗滥用定价职责)——现改为**标错惩罚以 OQ 形式登记进 A2 GDD**(候选方案与实测义务随 OQ 保留,不阻塞设计),偏离理由:实测依赖 playtest 会话、先推进设计主链;A2 /design-review 时须核对该 OQ 在位 -- **A1 full 评审终态(2026-09-09,用户拍板放行)**:8 blocking 同日核销(P1 两项达标判据 + target 域 [0.85,1] 绝对锚 / 雾占比上限 0.25 / F2c 成本闸 + 禁墙钟 / 雷数取整与布雷钉死 / F2≡Schema 合流 / AC-6(a) 芯环改写 / AC-11 前提腿 / 断言 B 收紧达成区占比)+ 第三轴登记约定(Boss=Dmax 行、elite_/boss_ 命名空间预留、OQ6 重审门)。**新登记下游承接项**:① EC5 零合法板玩家侧诚实呈现(提示/补偿/回退)→ B1/D1 域;② EC5 运行期熔断(同 (L,D) 连续降级/非法 → 确定性回退已知好种子)→ 实现期 ADR(OQ2 关联)。D2/registry 接口漂移已同步;recommended 9 项留档 A1 日志 - -## 门禁增补记录(2026-09-09,B3 full 评审登记) - -> B3 GDD full 评审:NEEDS REVISION(7 blocking),同日核销——日志 `design/gdd/reviews/b3-status-effect-review-log.md`。修订摘要:enemy 侧**单敌假设入文**〔用户拍板〕· B1 义务 5→8 · D1/B5/D5 呈现义务清单登记 · AC-15 机制更正 + reloaded 根全清单规格 · 致命夹具补根〔dup_key〕· AC-18 随 registry 逐字段键重构 · weaken 红警补修复空间不对称 + OQ1 归一口径前置 · stack-不重置 R 登记 OQ7 playtest 证伪项。 - -- **B1 义务清单 5→8(B1 GDD 门禁评审逐项核对落位,缺项即 blocking;①–⑤ 为 2026-09-08 原清单)**:⑥ **每结算编排恰一次 decay_round**(decay 基数=1 是 dur=1 一次性语义与全部衰减语义的先决条件;Active 相位 double-decay 在 B3 侧无守卫,信任 B1 编排)⑦ **结算明细按授予流水逐条标注来源**(F1 合并坍缩归因的兑付面补偿——合并实例只持首授 origin_cell/round_index)⑧ **“溢出未生效”行进结算明细协议**(Rule 5 后半承载;呈现归 B5/D1) -- **D1×4**:① HUD 常显 + EC12 空态规格定稿(隐藏栏 vs 空槽由 D1 裁决但须成文)② effect_id→icon 映射键契约(art-bible 形状+色相双通道)③ 有利/有害极性呈现映射(数据源 = B1 SettlementTable 效果语义,非 magnitude 符号——负值增益存在)④ 战斗结束全清的状态栏去留。**B5×2**:① 溢出行呈现(数据源 = B1 义务⑧)② origin_cell→玩家可读形态(缩略图/格子高亮;坐标不直接呈现)。**D5 增补**:“同轮拿满优于跨轮叠”教学(OQ7 配套)。**B4 增补**:奖励身份预读(stack 时序规划的推理原料,创意风险 #1 切面)——均缺项即 blocking,随各 GDD 门禁评审核对 -- **单敌假设(用户 2026-09-09 拍板,B3 Rule 1 入文)**:MVP 战斗 = 单个敌人,target_side 无歧义(enemy 侧 side-wide = 该敌);**B2 定敌人数模型时回验**——定多敌即触发 target_ref 接口漂移补列(B1 归集语义/B2 模型/D1 呈现裁决随批验收) -- **weaken 锚裁决前置(OQ1 增补,B1 强制检查点输入)**:B1 先钉死归一口径(每结算瞬时当量 vs 每 AP 总暴露)——瞬时读法 m_w≥51 可行(F2 越域界随移 AP 界 −408%/表界 −816%,7 层触 B1 地板);总暴露读法 m_w>100 被 percent 域**禁止(该分支不可行)**;口径落定前禁止数值修订,落总暴露则现实解 = B4 重定参照 -- **AC-19 扫描域登记(B3 文件集)**:B3 全部 GDScript 产物(状态容器类 + StatusEffectTable schema 类 + 冒烟脚本,文件名实现期定)纳入 D2 AC-9 模式项目级 CI 扫描域——owner:Technical Setup 归口随 B3 实现建立成员清单(qa-lead 评审缺口:此前三份 GDD 引用同一无载体域) -- **registry status_effect 条目逐字段键重构**(B3 owner 修订,2026-09-09):fields/mvp_content 由散文改逐字段 YAML 键(action_economy 同构)——AC-18 机器对账前提;knob 活值不作定值对账(A4 AC-8 同款);anchor_warning 增修复空间不对称;b1_obligations 同步 5→8 - -## 门禁增补记录(2026-09-09,A2 定稿登记) - -> A2 GDD:`design/gdd/a2-minesweeper-rules.md`(Designed,待 /design-review)· registry 已登记 `a2_event_surface` / `a2_initial_expansion` 两条件目 - -- **四件已登记事项逐项落位核销(用户 2026-09-09 开工简报)**:① **A2×4 清单**(A4 登记)+ **A1 双包含回验两臂**——落位 A2 GDD Dependencies 门禁义务表 + AC(A2×4①→EC4 腿 · ②→AC-12 · ③→EC4 腿/AC-18/20 · ④→AC-18;双包含①②→AC-3;**门禁评审缺项即 blocking**);② **A3 委派**——初始展开定义落点(免费/计入清图/无奖励 = Core Rule 4/AC-1)+ round_end 棋盘路径外发 payload 同构(Core Rule 2/10,AC-7/8/9);③ **标错惩罚以 OQ1 登记在位**(候选 = 敌方伏击+1,实测义务随 OQ 保留;**A2 /design-review 核对在位,缺位即 blocking**);④ **已引爆雷格可通行**(Core Rule 11/AC-15——工程债核销)。A3 EC4 批次四组合 deferral 已在 A2 冒烟兑现(AC-10 语义序仲裁 F4,含类内稳定序腿 e) -- **🔴 A1 修订义务(systems-designer 反例 B,主会话独立复算证实——阻断级,A1 定稿后首条)**:A1 布雷数下限 round(d×(W×H−9)) ≥ 1 拦不住"初始展开即 cleared"退化板——8×8 八雷先布后删幸存 1 颗距离-2 雷 → 最终板全 0 格连通 → R₀=S 开局免费清图;N=1 参数行 100% 退化、F4 断言 A(inferability=1.0)零拦截、min_safe_count 无效(|S| 被动满足)。**义务(A1 GDD 修订走接口漂移)**:F5 legality 增 `R₀ ≠ S`(违例 = 尝试作废重试,clearable 同款)+ F4 断言 A′ 族严格零覆盖 + Rule 4 排除域/可达域基准措辞钉死"以最终产物板计";A2 侧 install 不变式④纵深防御(b_degenerate 板拒绝,AC-1b)——双包含两臂不受影响 -- **B1×3 强制项(B1 GDD 门禁评审逐项核对落位,缺项即 blocking)**:① 结算触发 = Waiting 相位编排点、不依赖事件到达序(stopped 轮 A3 直发 round_end 与 A2 flag_judged 批的到达序不承载语义——事件序契约 flag_judged < round_end 全路径统一)② reward_eligible=false(initial 通道)格不得进入奖励入库(A3 EC5 委派闭环)③ 标中旗兑付去重(资格以雷格实例为键——A2 诚实重复上报的对侧) -- **D1×6 强制项(2026-09-09 A2 full 评审由 D1×1 扩容,缺项即 blocking)**:① stop 意图经 A2 `settle_batch` 提交、**不直调 A3**(单一结算序保证——A3 Rule 9"输入层直调"的调用方细化为 A2 批次入口,A3 GDD 不改、以本条 + registry a2_event_surface.api_surface 为准)② 四种格态一眼可辨(已开 0 格地板/已开雾格无字/未开格/未开雾格——左键移动 vs 挖消歧前提,误挖不可逆)③ 悬停预承诺(光标区分移动/挖/旗)+ 可挖域常驻指示 + chord 肌肉记忆首遇提示(非模态每 run 一次)④ 已引爆雷格"可通行可读"呈现 ⑤ `compute_move_path` 呈现语义定稿(合法性指示 vs 穿行动画——P4 载体)⑥ 单意图帧输入收集 + voided 呈现义务(至少 stop 被作废须可感知)+ 每次拒绝玩家可感知(映射源 = reject_reason + sub_reason);移动路径预览数据源 `compute_move_path` 已备(表现归属归 D1 GDD,2026-09-07 门禁项不变) -- **B1/B4 增补两条(2026-09-09 A2 full 评审登记,B1/B4 GDD 门禁评审核对落位,缺项即 blocking)**:① **高光兑现节点条目化**(创意风险 #2/#3 合并——"我算对了"爆发结算 + chord 缺席的标中旗即时兑现补偿候选;原散文登记升义务清单——B3 先例:清单外登记会丢失)② **连锁批量授予溢出吸收设计**(13 格链 × B3 max_stack=2 ⇒ 大量"溢出未生效"行进结算明细,P2 画面反向伤害连锁幻想——溢出转一次性资源/治疗或显式接受,裁决归 B1/B4) -- **A2 full 评审修订完成(2026-09-09,四专员 + CD 终审 NEEDS REVISION 六 blocking 同日核销)**:GD-1 连锁不越旗(传播集 ∖ G,经典 flood 惯例——旗 = 1 AP 链阻断器)· F4 到达序无关性声明收窄((path_tag, hint, AP/RAP) 全批域不变;划分序无关仅异类四组合;AC-10 增耗尽型救援/联合清图用例)· ActionOutcome 增 sub_reason 封闭枚举(UX-1——批前免费窗口,registry 已同步)· D1×6 义务包 · AC 修复包("EC4 腿"编号化 AC-6、b_chain/b_fog spawn=(3,2)、board_invalid 诊断枚举、AC-7 ap=1 同帧竞争、OQ2 范围收窄)· 用语纪律清扫(双闸/腿/袋区/合成判定 + registry terminology 条目);随批:Rule 11 雷格通行有价捷径注记(GD-2 降级 residual——A1 clearable 闸按安全格 8 邻连通计,强制过路费板生成期被拦截)· OQ1 增惩罚重复性裁决项(hit=true 有去重 / hit=false 惩罚无去重的不对称,实测会话前钉死) -- **A2 侧接口事实(provisional 登记)**:批次语义序仲裁(cleared-dig → stop → 其余,F4 四组合真值表 + RAP 记账随胜者);A2 零表读取零 ConfigDB 引用(D2"A2 无直接依赖"事实证实,AC-22③——若实现期 ADR 裁决需读表,走接口漂移) - -## 门禁增补记录(2026-09-09,B2 定稿登记) - -> B2 GDD:`design/gdd/b2-enemy-system.md`(**Approved**——2026-09-09 full 评审 8 blocking 同日核销收口,见下方增补块)· registry 已登记 enemy / hero / clause3_supply 三条目 + status_effect 两注记(single_enemy_assumption 回验改写 / ambush_unit_definition 量纲定稿)+ terminology 增 B2 六词条 · D2 EnemyTable 行回填 + HeroTable 行新增(接口漂移) - -- **B1×6 义务清单(B2 GDD 门禁评审逐项核对落位,缺项即 blocking——B3 对 B1 登记先例)**:① 单位接口调用集中在结算编排、行为环推进每结算恰一次(double-advance 无守卫)② 雷→伏击事实转化恰一次(每雷格实例至多一次)③ 伤害 clamp/负值/溢杀语义与死亡判定时机成文 ④ F1 条款 3 闭合对账(B2 cap 表值 + 量纲 + **A1 actuals p10 非 target 参数**)⑤ 默认目标规则消费与单体/AOE 分流(固定顺位)⑥ 伏击 cap 溢出"溢出未生效"明细行协议 -- **D1×4 义务清单(视觉推测型呈现,缺项即 blocking;2026-09-09 full 评审增补口径)**:① enemy_id→图像线索映射清单成文(**预告时序 = 下一拍预告、挖掘期全程可见**〔B2 Rule 8⑤〕;**含强度档位/环长直觉编码说明**;形状+色相双通道,art-bible 约束)② 线索映射**全局恒定**(enemy_id 键——跨 run 禁重掷)③ 单位顺位与存活可读(固定顺位推测前提;顺位标记资产入 B2 Visual Req 2 下限)④ 敌方 side 池呈现口径(B3 敌侧延伸) -- **B3 单敌假设回验结果**:不成立——定多敌(用户拍板;B3 预授权接口漂移条款兑现)——registry single_enemy_assumption 已改写(side-wide 兼容 + target_ref 扩展位);B3 GDD 正文不改,以 registry 为准 -- **ambush 量纲定稿(2026-09-08 B3 块"ambush 量纲"项兑现)**:+3 flat = 每次攻击类行为附加 3 点主角 HP(charge 拍零兑付)——registry OQ2 关闭条件;值仍 provisional,条款 3 锚验收归 B4/B1(B2 供给 clause3_supply 口径:单结算自然边界〔用户定稿〕+ cap 表值默认 4) -- **cap=4 定稿注记**:反灾难护栏定位(绑定阈 = 单轮 5–8 雷灾难轮);旧默认 8 使溢出协议死码(min(雷数≤8, 8) 恒等式)已废弃;量级注记——atk=4 时 L≥2 伏击分量过半(常态支配修正入口 = C3 atk 曲线 / B4·B1 m_amb 锚,登记方向非 B2 义务) -- **qa-lead 缺口预检 7 项**:🔴-1 query_attack/ambush_grant_plan face 归属(owner:实现期 ADR,B2 OQ1)· 🔴-2 多敌语义默认零消费者复验(owner:C1,B2 OQ2)· 🔴-3/4 已随批修正(F4 满配语境 / EC17 读写切分)· 5–7 承载于 AC 前言(信任编排 / HeroTable 单行落点 / 坐标登记协议) -- **视觉推测型注记**:意图可见性规格 = 不直接显示行为/数值,敌种图像承载稳定可学线索(用户拍板)——P1 护栏 = 线索映射每 run 恒定(D1×4②);结算明细数字兑现(P2 不变);双舞台资产管线陷阱不受影响(B5 前美术测试照旧,B2 只锁视觉状态清单数据面:grub 1 态 + ambusher 3 态) - -### 2026-09-09 B2 full 评审增补(六专员 + CD 终裁,8 blocking 同日核销 → Approved) - -- **胜利路径声明(CD 排序 #1;原文 2026-09-09,2026-09-11 用户裁决退役)**:原"hero atk=0 → 当前内容态结构性不可通关、B4 先行 = 任何可通关验证的先决"作废——**基础攻击恒存在**(HeroTable.atk 域 [1,999]、0 加载拒绝、MVP = 6 原型锚 provisional;主角每结算战斗段先手攻击顺位最前敌),胜利路径 = 基础攻击 + 奖励侧增量共同承载(B2 Overview 2026-09-11 改写;B1 战斗段同批增补主角先手攻击步 + hero_attack 来源值) -- **B1×6 之① 增补**:结算内调用序成文 **query_attack→apply_damage→advance**(倒序读到下一拍;B1 冒烟须回放结算步流);推进口径 = 每存活**敌**单位(主角无环,环接口对 hero 拒绝) -- **资产下限增补**:受击反馈/死亡表现/顺位标记三类入 B2 Visual Req 2 资产需求下限(顺位标记归 D1×4③、同等 blocking) -- **新增 OQ7/8/9**:精英/Boss 编码位(**C1 定稿强制核对**——键冻结下同深度第二敌种触发行集致命,改键走 D2 Rule 4 接口漂移)· grub 单拍环体验证伪(playtest 预注册,两拍环备用案归 C3)· 零伤害死局组合跨字段护栏(实现期 ADR/D2) -- **OQ6 更正**:标错惩罚事件源 = flag_judged{hit=false}(**非 mine_hit**)——B3 source_class 结构冻结,须 B3 GDD 修订非加行;B2 F3 重验触发补"新增非 mine_hit 授予源"支 -- **F4 供给口径修正**(registry clause3_supply 已同步):结构上界改 **min(AP 上界, cap)** 形(cap 腿松弛收紧)· direction_precheck 裕度 4.7×→**2.3×**(按条款 2 最低档锚 +50pp 实算) - -## 门禁增补记录(2026-09-09,B4 定稿登记) - -> B4 GDD:`design/gdd/b4-reward-item-economy.md`(**Approved**——2026-09-09 full 评审 14 blocking 同日修订核销后用户拍板放行;见下方 full 评审增补块)· registry 已登记 `reward_table` 条目 + 三处接口漂移改写(rng_service reward_roll scope 语义 = 每次 board install 批 / status_effect 悬空校验首引兑现 / clause3_supply 左臂载体 = B4 F6)+ action_economy.referenced_by 增 B4 · D2 六处回写(RewardTable 定稿行 / StatusEffectTable 注记 / Dependencies B4 行 / 双向一致性 B4←D2 / Tuning Knobs 占位删除 / Status 登记) - -- **B1×6 义务清单(B4 GDD Dependencies 全文,B1 GDD 门禁评审逐项核对落位,缺项即 blocking——B2/B3 对 B1 登记先例;2026-09-09 full 评审同步**:①段序含窗口锚点与回放输入 ②增"每格受理恰一次" ④增 usable_now 组装/逐件动态守卫/击杀结果进流水**)**:① **结算段序骨架成文**:授予段→**道具使用窗口(授予段后、增益/减益段前——full 评审用户拍板:当轮拾取当轮可用)**→增益/减益段→道具段→战斗段→衰减段→判定段(用户拍板核心序 buff/debuff > 道具 > 战斗不变;**窗口选择序列登记为结算回放输入事件**;B2 义务①②③的转化与推进落点随段序定位)② 奖励受理与分流编排(grant → buff 类 apply_effect / 道具类 stock;**每格受理恰一次、stock 与 grant 返回一一对应**;满层拒绝 = 零兑付 + "奖励未生效"明细行、无折算,**行携带可聚合计数/批次字段**)③ clear_reward 授予路径(**B3 OQ4 关闭条件**:install 期 roll、cleared 编排期兑付——兑付后同结算窗口即可选用)④ 道具段编排(窗口数据组装 = B4 query_inventory + **B1 侧守卫预判 usable_now**、选定序逐件施加、**满血守卫拒绝不烧包 + 同窗顺序多包逐件动态守卫**、**零效果判定读 B2 存活集 + "已消耗未生效"明细行〔E10 照常消耗拍板的 B1 侧承接——缺口预检 1 逐字核对〕**、**击杀结果进流水〔H3 感知数据前置〕**、治疗 clamp)⑤ 生命周期编排(battle_over 调 clear_inventory〔**清空前后快照计数供清空反馈行**〕;board retire 调映射消亡)⑥ roll_board 调用恰一次(B4 侧相位守卫见 E5/AC-1;B1 编排纪律承载调用时点半) -- **D1×5 义务清单(缺项即 blocking;2026-09-09 full 评审 3→5 扩容)**:① 已开格 + 库存奖励身份恒定可读(reward_id 键全局恒定、icon 形状+色相双通道——art-bible 约束;**库存常读条 = 挖掘期规划面**而非仅轮末窗口)② 道具使用窗口呈现(授予段后弹出;选用/跳过/选择序、窗口时机指示、**usable_now 可用性投影**〔满血治疗包禁选/提示〕、空库存建议不弹窗、窗口触发政策注记)③ 结算明细**四类行**呈现(道具行〔语境注记〕/ "奖励未生效"行〔**按聚合计数呈现**〕/ "已消耗未生效"行 / "使用被拒"行——数据源 B1 流水;未选用件"随战斗结束消亡"语境注记)④ **H2 清图奖励行强调呈现**(轮末仪式峰值)⑤ **battle_over 库存清空可见反馈**("剩余道具 ×N 随战斗结束清空"——RAP 清零可见反馈同款先例) -- **两项 E 节拍板(2026-09-09 用户裁决,其中第一项覆盖并行会话草稿)**:**道具段照常消耗**(选定即承诺——无存活敌的已选刀照常 Used + 零效果 + "已消耗未生效"行;不对称理由 2026-09-09 full 评审更正:原"敌 HP 不可见"与 B2 血条数字可读矛盾作废,现行理由 = 守卫所有权不对称〔满血守卫是表局部判定、零效果判定须读 B2 存活集〕+ 反抖动;误触防护由窗口 usable_now 预判承载)· **清图槽允许 buff 行**(A3 条款④兑现口径 = 行级恒有正当量〔F3 加载期校验〕,运行时满层零兑付为合法例外 + 明细行;预警④单独计数监控) -- **attack_up 复活 + 锚参照回迁(2026-09-11 用户裁决批——原"死行 + 锚参照迁移"条目〔2026-09-09,F4 口径后果〕退役为历史)**:基础攻击恒存在(HeroTable.atk 域 [1,999]、0 加载拒绝)→ attack_up 复活、唯一消费面 = 主角战斗段先手攻击(B1 同批增补);"道具伤害恒定表值不吃 percent 修正"拍板不变(attack_up 只乘基础攻击、不乘刀);A3 条款 2 锚参照对象**回迁 attack_up 当量**(换算归 B1 条款①对照表;B3 红警裁决前置不变);**attack_up 已随同日两级奖励批入默认根池**(attack_up_basic w20 t2——本条"入池随奖励改造批"残余已兑现) -- **两级奖励 + 关内延续批(2026-09-11 用户裁决,同批改写 B4/B1/B3/D2/registry + 切片落地)**:① 奖励按**交付轴两类**——即时类 {buff, instant_aoe, instant_heal}(授予段当场兑付、不进库存、零决策,默认根 75%)/ 可选类 {damage_item, heal_pack}(入库存、窗口选用、更强,25%)——category 五值枚举;② **库存生命周期 = 关卡域**(跨战斗延续、关卡末 clear_inventory——原战斗域拍板作废,"关卡结束"事件归 C1/C2、落位前上层显式调用 B1 level_clear);③ **窗口单件制**(至多选用一件——原任意多件作废);④ **治疗两级**:instant_heal 即时小额 + heal_pack 稀缺强治疗(w 25%→6%、p 4→12);⑤ buff 时长当次化(attack_up/defense_up D=1);⑥ **B1 义务⑤/D1 义务⑤改写**(battle_over 清库 → 关卡末 level_clear + 清空反馈);⑦ 同批登记:预警②④⑦结构性缓解注记、方向预检重算(刀供给 ≈1.8|资格格|/板 + 即时类与基础攻击分量)、F5 保底重锚(仅计 damage_item = 可选伤害保底)、P_min=8、AC-19 对账对更新 (knife_adv, attack_up_basic)。敌 hp / 奖励供给联动重算义务(预警⑥)归 C3 随批执行 -- **缺口预检 2 项阻塞级 deferral 至 B1**(qa-lead,共 11 项全文见 B4 GDD——lean 9 + full 评审 2):① B1 编排半整体 deferral(段序/窗口/守卫/四类明细行协议——冒烟以构造序扮演零断言)② A4① 当量升级与②③状态(AC-19 现为档位序检查——B1 对照表落定后升当量对账;**② MVP 结构性不可闭合〔clear_default 常量池,激活载体 = clear_\ 插槽〕、③静默绿灯风险——Dependencies 显式宣告**) -- **概念层口径交 consistency-check**(两处):主动道具 MVP 激活(game-concept"后续版本加入"→ use_timing 单值兑现)· 库存战斗域 vs Peglin"道具跨循环累积"参照差异 -- **索引错号修正顺带**:B3 块"EC9 reload gate"→"EC8"(D2 实际编号,上文已改) - -### 2026-09-09 B4 full 评审增补(五专员〔game/systems/economy/qa/ux-designer〕+ CD 终裁——NEEDS REVISION,14 blocking 同日修订核销,待 delta 复核放行) - -> 承重机制经对抗评审零动摇:install 期预分配确定性脊柱、封闭 RNG、F1–F6 边界实算、编排被动性、AC/夹具架构——CD 终裁"机械核心是管线迄今最扎实的,结构上没有需要推倒的东西";全部 blocking 为文本级/附表级(B2 先例)。日志 `design/gdd/reviews/b4-reward-item-economy-review-log.md`。 - -- **用户评审拍板:窗口锚点 = 授予段之后、增益/减益段之前(当轮拾取当轮可用)**——消除"当轮拾取下轮才可用"未陈述规则与末图清图奖励必然作废两伪影;核心段序(buff/debuff > 道具 > 战斗)不变。Rule 5/E10/E15/D1×②/B1×①④ 五处随批改写;E15/OQ4 主体消解(残余 = 未选用件消亡注记〔D1 义务③⑤〕+ 折算/继承归 Alpha C2) -- **跨文档真相分裂修复(三处)**:D2 Core Rule 5 与 D2 Interactions B4 行的 reward_roll 旧语义("每次奖励结算/每轮结算取号")补同步为 install 批语义(原定稿批只改了 registry 与 D2 Dependencies 行——B4"registry/D2 已同步"声明对 D2 正文失实,实现者按旧正文接线会使 B4 全部 σ 轨迹 AC 报废);systems-index A3 OQ5 注记、registry status_effect.anchor_warning、clause3_supply.direction_precheck 三处补 defense_up 锚参照迁移注记(迁移后预检未重跑事实同批登记);game-concept 创意风险 #1 / 可证伪信号 / agency 定位句三处 MVP 口径注记 -- **预读声称如实降级(四方独立确认的 overclaim)**:"奖励身份预读 = 我要去拿 X 路线规划/创意风险 #1 正面解"在 MVP 结构性不成立(reveal = 同轮授予、未开格不呈现)——四处承重位(Overview/Player Fantasy/E3/预警④)改写为真话:已开格+库存恒读 + 每格必有货 + 雾档先验 + 叠层感知挖掘;寻路 = OQ2/A5 二期形态;创意风险 #1 维持 OPEN;playtest 证伪信号按 MVP 口径读取(防"缺失功能被误判为设计失败") -- **结构新增**:**RewardConfigTable**(单行全局接口漂移——T_fog_min/K_dmg/N_draft/P_min 的 Rule 1 载体,registry `reward_config` 条目 + D2 表清单回填);**RewardTable 第九字段 display_name**;F5 加载护栏两条致命(floor_supply_missing / no_damage_row——后者关闭"K=0 零伤害世界静默复活不可通关"后门,B2 OQ9 并案);默认根内容行集登记(knife_t1/knife_adv/heal_t1/defense_up_basic/clear_knife + 刀供给方向预检——溯源原型锚);API 输入域语义补裁(E18 重复受理幂等/E19 清单外坐标/E20 stock 受理域/E21 枚举序)+ B1×②"每格恰一次" -- **AC 修复**:AC-14 分支 3 与 AC-3 分支 3 同输入矛盾消解(相位守卫不在豁免域);AC-6 分支 2 改 32σ 双重量化 + 分支 4 致命腿改烤入根(override 不触发加载校验);σ 协议补预推进机制 + 纸面契约子集声明(A2 OQ2 先例)+ b4_reroll 夹具补全登记 + 第二人复核义务;AC-15 增使用期快照分支;AC-19 默认根改非平凡对账对 (knife_adv, defense_up_basic);"无洞"声明撤回重述(覆盖口径 = EC 21/21 映射 + 输入域补裁,负空间学说边界如实登记) -- **E10 理由更正(拍板本体不变)**:原"敌 HP 精确值玩家不可见"与 B2 呈现规格(hp/max_hp 血条数字可读)矛盾——现行理由 = 守卫所有权不对称(零效果判定须读 B2 存活集,B4 零跨系统读不开口子)+ 反抖动;窗口 usable_now 预判承载误触防护 -- **经济侧登记**:失衡预警重校准扩容 ①–⑧(①拆短缺/浪费、④按吸收上限重推并拆稳态/连锁双表、⑤雾板分层〔A4 明文要求〕、新增⑥速杀退化/⑦窗口摩擦/⑧H2 曝光率);A4 硬约束②③ MVP 休眠显式宣告(②结构性不可闭合、③静默绿灯);C3 调参期批量仿真义务(F5 概率性致命带);H2/H3 升 D1 义务④⑤ + 创意风险 #2 爆发结算机制本体显式登记归 B1 强制检查点 -- **用语纪律清扫**:腿→分支(全文)、档位序代理→档位序检查、贴地/行洪水/自救面/换签/红警机械替换或加注,registry terminology 增 B4 六词条(刀/烧刀烧包/批尾/死行/档位序检查/预推进) - -## 门禁增补记录(2026-09-10,B1 定稿登记) - -> B1 GDD:`design/gdd/b1-settlement.md`(Designed,待 /design-review)· registry 新增 `settlement_table` / `clause5_dominance` 两条件目 + 四处接口漂移回写(weaken −25→−65 / anchor_warning F0 回执 / clause3_supply 闭合回执 / board_gen 消费回执)+ 三处 b1_obligations 履行回执(B3×8/B2×6/B4×6)+ terminology 五词条;D2 SettlementTable 已回填(接口漂移) - -- **F0 归一口径裁决(B3 红警关闭,B1 强制检查点兑现)**:条款②锚验收归一口径 = **每结算瞬时当量**(总暴露分支被 percent schema 域禁止 + 与 B2"单结算自然边界"冲突,排除);**m_w −25 → 值域 [60,85]/默认 −65**(终值 = B4/B1 共裁,B1 OQ2);地板 = 乘数零点 −100pp、交叉层数 ⌈100/m_w⌉ = 2(原"7 层触地板"预读更正);defense_up 参照保持 -- **条款①③⑤闭合首版验算完成(B1 单一闭合 owner)**:条款①对照表以 B3/B4 默认根活行为对照实物(D_ref=12 载体 = SettlementTable.equivalence_ref_damage;defense_up = 最低档安全格 buff 锚 6.0 HP/结算);条款③默认通过(L1 ≈2.0× / L2 ≈2.6× 边际配对)——**满配语境 unit_count=3 最坏盲点破线 → C3 调参约束**;条款⑤两态通过 + **保守地板缺口如实登记**(C 单独兜底不足,非阻塞)——**actuals p10 / fog_burden_ratio 交付后全部强制重跑(B1 AC-39/40)** -- **高光兑现节点双落(创意风险 #2/#3 机制本体,用户 2026-09-10 拍板——A2 登记义务条目化兑现)**:#2 **完美排雷**(板级零误标 ∧ ≥1 标中 → 清图奖励当量 ×P_perfect 默认 ×2;与踩雷正交、计数随 install 重置、RAP 刷新图无兑付点、上界受护栏 B 防钓鱼线 C_eff ≤ 24 约束);#3 **标中旗 highlight 标记**(数据面——当轮兑付 + 明细强调组合补偿 chord 缺席);呈现归 D1 -- **D1×3 义务清单(B1 出具,缺项即 blocking,并入 D1 既有台账 A2×6/B2×4/B3×4/B4×5)**:① 高光行强调呈现(perfect_sweep 高光行 / 标中旗 highlight / H2 清图奖励强调——数据源 = B1 Core Rule 14 流水行协议)② 完美排雷呈现形态 ③ EC5 零合法板提示/补偿/回退形态(数据面 = 非法产物标记上抛,A1 EC5 玩家侧体验债的 B1→D1 承接) -- **C3 消费 B1 对账输出的事实依赖成立**(2026-09-07 TD 门禁悬案回执)——对账输出 = 调参约束清单(满配破线 / 保守地板缺口 / 护栏 A/B 突破条件),非运行时接口;C3 GDD 定稿时回写本索引 -- **实现期 ADR 裁决项 ×2(B1 出具)**:事件总线载体(TD 门禁 2026-09-07 项的 B1 侧——与 A2 OQ2 同一裁决;AC-6/33 相关 THEN 为纸面契约直至落地)· B2 OQ1 两 face 归属(query_attack/ambush_grant_plan) -- **UX Flag**:B1 有 UI 贡献(结算明细屏 + 道具使用窗口)——Phase 4 前置 `/ux-design`,stories 引用 `design/ux/[screen].md` 非 GDD -- **B1 冒烟口径(项目首个全部玩法上游 Approved 的系统)**:真 A3/A2/B2/B3/B4 全集成 + A1 程序构造桩(取号契约同构,真 A1 全链路登记端到端 deferral)+ C1/C2 encounter 直供(provisional);可回放 AC-33 = D2 AC-15 deferred→B1 兑现;编排唯一性单向静态扫描(B2/B3/B4 API 符号命中文件 ⊆ B1 文件集) - -## 门禁增补记录(2026-09-12,战斗屏 UX 修订登记) - -> `design/ux/battle.md` /ux-review 完成:NEEDS REVISION 7 blocking 同日修订落稿(复检待跑)——B1 UX Flag 承载面即本 spec。同批用户拍板 **D4 弃图刷新前移挖掘期**,四处 GDD + registry 同步修订(接口漂移走各 GDD 修订流程,本块为索引登记): - -- **A3**:`request_refresh` Active 相位受理(原仅 Waiting)+ **每轮上限 2 次**(`refresh_cap_per_round` 结构位默认 2——D1 提案采纳,原"无结构性上限"作废;RoundStart 重置)+ Waiting 代理退役;**旧板旗随旧板作废**(零兑付、旗 AP 不返还——A2 EC11 全量重置承载);**经济预警**:挖掘期当场刷新无结算发生,原"敌方时间税"自惩半句失效——OQ3 弃图率/刷新率预警阈值联动复核(登记) -- **A2**:install_board 受理域增 **Active·仅弃图刷新路径**(B1 `refresh_board` 编排内、A3 扣费成功为前提;非刷新路径"防轮内换板"不变) -- **B1**:stopped/ap_exhausted 轮**恒 same_board**(原 Waiting 期刷新代理 + AC-29 退役/改写);新增**挖掘期刷新编排 `refresh_board`**(A3 扣费 → A2 retire → A1 generate → A2 install → B4 roll_board 恰一次;无结算段、无 round_end——编排唯一性原则保持);AC-30 改恒 same_board 口径 -- **systems-index 本体更正**:A4→D1 义务 ×2→×3(第③项 = 已开雾格 tint + 雾区全开完成信号——原索引漏记;OQ8 已于 battle.md 裁决采纳) -- **B4**:五处旧"battle_over 库存清空/随战斗结束消亡"摘要同步为关卡末 level_clear 口径(权威 = D1 侧义务清单⑤/L94) -- **D1 呈现义务台账状态**:battle.md 对 A2×6/A3/A4×3/B1×3/B2×4/B3×4/B4×5 的承接经本轮评审逐项核对(实质承接全齐;B1×3 映射错位、`settlement_snapshot`/`can_request_refresh` 自造接口引用已修正);entry 17①②③ 战斗屏落点齐备(场景级 AC 已入) - -## 门禁增补记录(2026-09-13,art-bible §1–4 定稿登记) - -> `design/art/art-bible.md` 已建成——2026-09-10 初稿(§1–4 核心方向)于本日增补批**定稿 §1–4**;2026-09-07 门禁排期项("最晚在 D1 GDD 前创建,至少 §1–4,'格子样张测试'并入执行")就此闭合。AD-ART-BIBLE solo 跳过(review-mode.txt = solo,出稿待人工复核)。 - -- **范围声明**:定稿范围 = §1–4(视觉身份宣言/氛围与情绪/形状语言/色彩系统);§5–9(角色/环境/UI/资产标准/参考方向)未建,**不阻塞 D1 GDD**——D1 消费面 = §1.2 绘制优先级栈 + §1.4 格子样张验收标准 + §3 形状语言 + §4 色彩系统 + §4.6 图标键契约。 -- **本批增补内容**:① 绘制优先级栈增补**徽章位**(数字 > 小人 > 旗 > 徽章 > 纹理 > 底色——极性提案 §0 栈位声明落位);② 雷格隐喻换轴同步(雷 = 被惊动的巢穴,"机关"旧称退役——game-concept 2026-09-12 换轴;兑现档红更名危险红,色值不变);③ **§1.4 格子样张测试验收标准成文**(第一验收项 = 数字可读性硬指标,game-concept 早期风险第 1 条;雾格不在样张范围);④ **§4.6 图标键契约冻结**(效果图标 B3 数据六行 + 提案新增 sapped;奖励徽章 B4 默认根八行 + clear_blast 并列预留;格面类型图标五类——极性提案 R1;敌种线索键 B2 Rule 8——键与通道分配冻结、终稿美术归样张/asset-spec 批);⑤ 雾格资产规格一行占位(内容封禁期暂缓,雾重设计批再启)。 -- **D1 GDD 引用义务**:D1 既有台账(A2×6/B2×4/B3×4/B4×5/B1×3)凡涉 icon/线索/徽章的呈现义务,一律以 art-bible §4.6 键契约为视觉侧依据;键集扩容(新效果/新奖励/新敌种/新类型)走 art-bible §4.6 修订,禁运行时换图。 -- **待随批事项**:极性提案实施批须按其 §3.5 正式登记 D1 义务条目入本索引 D1 台账(未开格类型图标/极性视觉语言/负向文案族);registry terminology 增 图标键/徽章/极性 三词条(本批已登记)。 - -## 门禁增补记录(2026-09-13,D1 定稿登记) - -> `design/gdd/d1-hud-framework.md` /design-system 完成:12 节 + 台账表/冲突清单零占位(solo 模式,出稿待人工复核;/design-review 须新会话)。registry 已登记 `d1_presentation_surface` 条目 + terminology 两词条(命令式回执驱动/程序化占位)。 - -- **义务台账核销(缺项即 blocking 项闭环)**:D1 既有台账(A2×6 / B2×4 / B3×4 / B4×5 / B1×3 / A4×3 / A3 + A1 EC5——battle.md §13 27 项)逐项落位表见 D1 GDD Dependencies(门禁评审核对用);已裁决项直接继承 battle.md(双舞台五区布局 / 路径预览=合法性指示 / 悬停预承诺 / 四格态 / 雾图例与首遇 / 四类明细行 / 窗口单件原位激活 / 高光行强调 / 库存关卡域清空反馈 / B3 空态=槽隐藏 / EC5 零合法板=仅提示)。 -- **切片教训三条硬性要求兑现(entry 17,D1 GDD 门禁评审核对项)**:① 信号载荷 schema 13 项成文表(Core Rule 17——A2 三事件/B1 行协议/B4 窗口载荷引用既有 schema + ux 遥测六行与命令式刷新面新成文)② 场景级 headless 测试进 AC(AC-19 战斗屏探针 + ADR-0004 双载体)③ 信号时点状态可见性规则(Core Rule 18:销毁前捕获/载荷自包含/禁回读核心生命周期态 + AC-20 静态扫描与像素重放断言)。 -- **D1→上游接口漂移登记 ×3**:① A3 只读观测量扩列轮内已用刷新次数(刷新按钮"本轮剩 N 次"读数缺口——OQ2)② B1 `settlement_snapshot` 契约登记(切片已实现、GDD 未登记——OQ3,D1 现行消费 = 步骤流判定行 + presentation_snapshot() 零阻塞)③ 极性提案实施批 D1 义务条目(冲突④)。 -- **D1 侧裁决两条**:① MVP 格面徽章只在已开格呈现(B4 Rule 8"未开格身份不呈现"为现行锁定规则——art-bible §4.6.3 未开格预读的机制前提随极性提案实施批,冲突⑤)② 订阅纪律按 ADR-0001 收窄(呈现层只订 B1/runner;battle.md §Events Fired 措辞差列冲突⑥待复检批对齐)。 -- **下游交付物(B5/D4/D5/A5/D6 输入)**:五区布局与双舞台裁决(第三形态)+ 键位映射表(§4.6 全键族)+ 呈现语义(敌人卡死亡禁瞬消/明细带/高光行)——B5 只叠加动画密度;D4 挂点 = 明细行类型流 + toast 触发;D5 承载位 = toast 体系 + 图例面板;C4 = TunePanel 退役接收方。 - -## 门禁增补记录(2026-09-14,D1 design-review 收口) - -> `design/gdd/d1-hud-framework.md` /design-review(lean——用户指定快速单会话,未生成专家代理):NEEDS REVISION 2 blocking 同日修订核销,用户拍板免复评放行 → **Approved**。日志 `design/gdd/reviews/d1-hud-framework-review-log.md`;lint 门禁 PASS。 - -- **Blocking ①(spec-AC)**:F1 棋盘格公式与自声称输出/AC-2 矛盾——固定边距下 36/45 数学上不可同时成立(两定值所需可用高度区间 [432,443] 与 [450,459] 不相交),示例自算实为 38/46 → 用户裁决改**两档定值(battle.md 拍板 36/45)+ 可行性校验式**(`floor(min/N) ≥ cell` 且 ∈ [30,45] 装板期断言);AC-2 措辞同步。 -- **Blocking ②(接口漂移)**:切片实现的 B1/B2 呈现面 API(`presentation_snapshot` / `is_battle_live` / `stock_count` / `query_reward_identity` / `submit_window_selection` + `hero_unit` / `all_enemies`)未在 owner GDD 登记契约——D1 冲突⑧/OQ3 扩条登记,回 B1/B2 修订批补登记(B5 GDD 前);registry `d1_presentation_surface` 为现行契约载体。 -- **顺路核销**:状态头 C3 状态更正(Designed 非 Approved);C1-lite 切片代码契约注记(C1 GDD 定稿时回填);新增 AC-26 可访问性基线(字号下限/无闪烁 >3 次/秒/减动效/纯鼠标)+ 覆盖矩阵 Rule 22→AC-23/26。 -- **MVP 设计链收口注记**:D1 放行后设计顺序 1–10 位(D2/A3/A4/B3/A1/A2/B2/B4/B1/D1)全部 Approved——MVP 玩法与呈现层 GDD 齐备,下一站 A5(垂直切片里程碑首位)。 -- **命名统一核销(session-state entry 35)**:request_refresh / refresh_cap_per_round / install_board 受理域语义 / round_end_board·round_end_stopped 实名——D1 GDD Rule 20 对照表 + AC-25 grep 断言;切片四 provisional 名退役。 - -## 门禁增补记录(2026-09-14,A5 定稿登记) - -> `design/gdd/a5-minesweeper-aux-items.md` /design-system 完成:lean 格式 + lint PASS(表格占比 84%),solo 模式一次会话定稿——专员/总监代理全部跳过,出稿待人工复核;/design-review 须新会话。registry 已登记 `a5_aux_items` 条目 + terminology 四词条;`variation_table.mvp_content.counter_item_ids` 回填 [probe_dust](A4 预授权"A5 期回填"兑现——A5-1 义务闭环)。 - -- **设计指令兑现(用户 2026-09-14)**:"每个维度都要有对应道具" = 五维度框架 {info, risk, action, plan, counter} + F2 覆盖谓词(五维度各 ≥1 活行的加载后内容审计断言,AC-12 机器可查)+ A4×③ 框架契约(未来变异建行时随批配 ≥1 反制道具);"稀有道具高数值与多维度结合" = 稀有两行 tier 3 超现行池最高档 + 双 effect_kinds 组合(地穴全图卷 = 全雾显影×全图预读;爆破工兵包 = +4 AP×3×3 真视)、稀有读数 ≈0.17 件/板(F1) -- **承重护栏(P1 防塌方)**:真视窄域——替代推理的效果(mine_reveal)目标域 ≤3×3、全图级仅限恢复推理原料类(显影/预读);schema 校验强制(夹具 a5_target_violation) -- **接口漂移预授权 ×3(对侧修订批兑现,缺项即 blocking——A5 GDD 义务清单 21 项)**:① **A3 grant_ap 第 9 API**(`grant_ap(n) -> bool`——Active 相位受理、remaining_ap += n 无上限域、零随机;A3 GDD 修订批登记)② **B4 category 扩值 aux_item**(预留枚举激活——Rule 1 修订;effect_id 双表校验 + use_timing 扩 during_dig + 默认根六行 + 池总权重算)③ **D2 AuxItemTable 新表**(A5 回填 owner——七字段 + 校验族 + 两处表值回填) -- **零特判延伸声明**:A2 代码零 A5 分支——叠加层为 A5 自持派生信息层(显影/真视/预读三集)、零回写 A2/B4 状态、随图消亡;A5 零随机零事件订阅零 UI(B4 Rule 10 同款编排被动性) -- **既有 OQ 收口 ×3**:A4 EC6 显影语义定稿(fog_reveal = 恢复推理原料非排雷、时效 = 本图持续)· A4 OQ2(探测时效/定价/counter_item_ids 首引/悬空校验)· B4 OQ2 A5 侧(呈现深度 = 道具驱动预读、自动寻路不做) -- **下游义务登记**:B1×①②③(use_aux 编排/生命周期/授予路由——缺项即 blocking)+ D1×①…④(库存条/使用交互/叠加层呈现/清空反馈——缺项即 blocking);A2 零义务(零特判延伸——A2 GDD 不改) -- **生效前提**:B4×①…⑤/D2×①② 修订批兑现前,RewardTable 含 aux 行会加载致命(B4 Rule 1 预留值拒绝 fail-fast)——A5 GDD AC-12/13 登记 deferral,对侧义务登记即生效条件 -- **UX Flag**:A5 有 UI 贡献(库存条/使用交互/叠加层呈现)——Phase 4 前置 /ux-design;Asset Spec 候选挂 art-bible 样张批 - -### A5 评审修订登记(2026-09-14,solo 快速审核) - -> `/design-review a5-minesweeper-aux-items.md --solo`:Verdict NEEDS REVISION——3 blocking + 5 recommended 同日核销(v1.1-lean,lint 复跑 PASS);用户拍板两项边缘规则:① **area_3x3 边缘窗口照常受理**(resolved_target = 窗口 ∩ 板内格,角 4 格/边 6 格——拒绝案否决,防烧包感反噬护栏初衷)② **零信息目标不可用不消耗**(板级判据 → 图标灰/入口禁用〔B4 usable_now 先例〕;点击级 → 拒绝零消耗;组合行判据取 OR——爆破包 ap_grant 恒可用;真视零雷恒有效——零雷 = 信息)。承重修复:F3 方向自相矛盾改写(P(雷) 对 ι 递增——收益在盲赌暴露下降非单赌命中率,registry formulas 同批同步)· 使用目标校验谓词表(Core Rule 8 展开)· EC17/EC18 · AC-15/AC-16(真视/预读运行时路径补测);同日用户拍板免独立 re-review 直接放行(Approved——B2/B1/D1 先例);日志 `design/gdd/reviews/a5-minesweeper-aux-items-review-log.md`。 - -## 门禁增补记录(2026-09-14,C3 design-review 修订批) - -> `design/gdd/c3-difficulty-curve.md` /design-review(lean 单会话——用户指定不生成专家代理):NEEDS REVISION 8 blocking 同日修订核销,**用户拍板免复评放行 → Approved**。日志 `design/gdd/reviews/c3-difficulty-curve-review-log.md`;C3 v2 lint PASS。**B4/B1/B2/D2/registry 同批接口漂移回写(X-6~X-10)**。 - -- **八 blocking 核销**:① 遭遇随机化 owner 侧登记(B1 encounter 掷骰步 + AC-5 scope 腿 / B2 spawn override 参数 + unit_count_max + 物种集三敌种 / D2 EnemyTable schema +2 / registry enemy 十键)② F6 关级供给带退役 → **生存链区间模型**(用户设计:每战 S/K 区间三档判定〔绿/黄/红〕+ 关级通关恒等式 + 输出占比带 + C4 区间平移换算率)③ MVP 行值总表 v3 转正(切片 .tres 权威源;r_boss 记录值更正 0.98 = 150/153.5 期望口径)④ registry boss_hp_anchor 回写 [0.5,1.1] + 加难走廊 [1.1,1.35] ⑤ 条款⑤计价基元重推(clear_blast C=40,缺口 6.1/51.8——clause5_dominance.c3_ruling)⑥ 供给控制器/clear_blast 换位/K_dmg=0/armor_type 四批转正 ⑦ F7 六步→七步(增 B4 登记常数与对账重制步)⑧ F5 真人方向更正 + 带锚定稿。 -- **用户拍板四项**:切片奖励侧三改动(clear_blast 换位 / K_dmg 1→0 + 战斗首件保证 / 供给控制器归 B4)全采纳转正 · armor_type 克制批纳入 MVP(goblin=none / bugbear=a / ogre_chief=b,克制矩阵入 SettlementTable)· 三带锚定稿(L1 通关率 [30,50] / 通关余量 p90≤13 & p10≥3 / L1 形态带:教学位绿 + 中段黄 + Boss 黄不红)· 加难杠杆批内即调。 -- **加难杠杆与 OQ7**:杠杆候选 = r_boss 走廊(Boss 180–207)/ 群战上探 / 供给 decay 0.6——**扫描待执行**(本会话无 godot 运行时;F7 第③步 level_monte_carlo 四表对照),落带前 v3 值 provisional-pending-scan;真人终标定仍归 playtest 批次 2(OQ3)。 -- **DND 更名批对齐**:grub→goblin、ambusher→bugbear、boss_guardian→ogre_chief——B1/B2/D2/registry 已 sweep;D1 冲突② 键集对齐随之落定(D1 GDD 侧冲突条目收尾注记留其下次修订批)。 -- **登记在案 follow-up**:① B1/B2/B4/D2 存在**既有 R8 lint 债**(核心规则表要点列编号引用——lint 工具本日更新晚于四 GDD 批准时点,非本批引入;各自下次修订批清扫,本批触改行零新增违例)② B2 多敌夹具与 AC 记号(bugbear 行)随 B2 实现批核验 ③ OQ7 扫描执行 ④ B4 F5 保底语义迁移后其 AC-6/AC-7 断言措辞随实现批对齐。 - -## 门禁增补记录(2026-09-14,C2 定稿登记) - -> `design/gdd/c2-adventure-structure.md` /design-system 完成:lean 格式 + lint PASS(表格占比 86%),solo 模式一次会话定稿——专员/总监代理全部跳过,出稿待人工复核;/design-review 须新会话。registry 新增 `level_table` / `adventure_table` 两条件目 + 补登 `hero_override_parameter_passing`(切片 E4 批实现、登记缺口闭合)+ terminology 三词条(HP 账本 / 关卡收束点 / 关卡大奖励)。 - -- **C2 待决四问收口**:① **关卡序列结构** = MVP N=2 线性(L1 地牢基线 → L2 雾解锁 + 数值台阶),冒险通关 = L2 Boss 击杀;加关 = 内容批(链行 + C3 数值 + 变异解锁同批——序列覆盖义务,越界关卡 = 内容生产缺口);N=2 生效前提 = C3 L2 深度轴行值填充批(enemy/board_gen (2, D1–D4)——OQ1 机制兑现,未落地前 N=1 单关冒险为合法态)② **关卡大奖励** = 三件固定构成(max_hp +10 经 begin_battle 覆盖值通道 · 血回满【与 C3 满血开局校准口径闭合——通关率带跨关合成的前提】· 代币记账 +10/关)——不进库存域、末关通关不兑付 ③ **失败重开** = 死亡即冒险终(Roguelike 已锁)、重开 = 新 master_seed 全新一轮、放弃同失败型结算(非战斗期受理,MVP 无 UI 入口——语义预留)④ **C1/C2 边界** = C2 序列/结构层(冒险状态机/HP 账本/大奖励/重开/种子接线),C1 关内节点行进层(行进/兑付触发/战斗发起);收束点语义 = C1 先调 B1 level_clear 再向 C2 宣布 level_end——接口契约四件套(start_level / report_battle_end / heal_clamped / level_end)为 C1 GDD 强制输入(C2 在 C1 之前设计,边界措辞即 C1 接口基线) -- **切片先例转正切分**:level_runner 关卡域生命周期切两半——冒险域(序列推进/HP 账本/大奖励/重开/种子)归 C2 侧新 owner,关内行进与节点兑付触发归 C1;两处切片简化由 C2 转正改写:① 切片 start_level 逐关播种 → 冒险域单种子(关卡间 RNG 连续)② 切片每关开始 HP 回满 → HP 跨关延续(恢复只来自恢复点节点与大奖励两个显式口) -- **下游义务登记**:C3×①(L2 深度轴行值 enemy/board_gen (2, D1–D4)——N=2 生效前提)· D2×2(RngService 种子注入入口登记 provisional 名 reseed / AdventureTable 建表——接口漂移)· B1×1(begin_battle 入参供给方转正——依赖表 C1/C2 行收编,随 B1 修订批)· C4×2(token 记账消费 / 天赋注入位——远) -- **UX Flag**:C2 有 UI 贡献(冒险摘要结算画面 / 关卡推进指示 / 放弃入口非战斗期)——Phase 4 前置 /ux-design;无新增资产需求 - -## 门禁增补记录(2026-09-14,跨评审回写批:D2 漂移 + B3 接口漂移 + B1 重算) - -> /review-all-gdds(`design/gdd/gdd-cross-review-2026-09-14.md`)§七 批调度第 1–2 批执行完毕;修订纪律 = 正文只写现行规则 / 版本历史各一行 / registry 同批回写 / gdd_lint PASS(B3/D2/B1 三文件,本批以核心规则表增依据列完成 R8 引用列迁移)。进度追踪表三行状态自 Needs Revision 回滚(B3/D2 → Approved,B1 → Designed——历史放行记录见各 review log 与跨评审报告附录)。 - -- **批1·D2 漂移批(🔴-2 五处 + X-8 补登)**:RNG 流 2→3(encounter——盐值/黄金向量第 6 常量/全流零计数前提)· pool_tag 增 active_inject · RewardConfigTable +2 字段(active_p0/active_decay)+ k_dmg 默认 0 禁区条款解除 · 默认根行集 clear_knife→clear_blast · HelperItemTable→AuxItemTable(A5 定稿转正,schema 目录九→十张);X-8 补登 = SettlementTable 逐表字段行补 4 字段(十二字段)+ EnemyTable MVP 三敌种行;接口漂移修订规则增"回执按受影响字段/枚举粒度逐表 diff schema 目录"流程纪律。 -- **批1·B3 接口漂移批(🔴-1 前半)**:defense_up.magnitude −50→**−30**(减伤墙批 C3 投值回写落地——B3/registry 同批)+ 免伤轮叙述同步(defense_up 单侧不可达 D'=0,现行可达路径 = weaken 饱和);registry terminology.免伤轮 词条同批。 -- **批2·B1 重算批(🔴-1 后半)**:F0/F1/F4/F5 按现行三输入(duration=1、m_d=−30、C3 v3 曲线 d0.25/t0.88 换锚)重推——**条款③两参考板形翻为破线**(锚行 ≈0.48×/0.47×;E_dig 重推 7.2→4.5;满配 ≈0.16×),旧"通过"回执退役、破线升格 C3 曲线级约束(**V_safe 侧杠杆重议**——defense_up.magnitude/duration 纳入禁独立调参联动网络 m_w↔D_ref↔m_d↔duration_d);条款⑤四态重推(保守地板需求 110.3/166.8,C3 裁决②维持);F1 对照表按现行行集重登(attack_up 死行注记清除——锚对照实物改 attack_up 行,registry 回迁口径重跑兑现);**W3 充能规格 = B1 F6**(累积时点/单轮 cap/不吃 percent/逐分量甲效查表 floor)+ AC-44;**W6** 挖掘期刷新改每轮 cap 2(RoundStart 重置);AC-22/36/37/39/40/41 改写;registry anchor_warning / clause3_supply / clause5_dominance 三处重登回执。 -- **登记在案 follow-up**:① W2 护栏 B 复核 + 护栏 A 重推(本批已登记旧值链待重推注记与方向性读数——护栏 A ≈−1.1 越下界)→ C3 收口批三选一落档 ② B3 F0 锚对照读数已随批同步(attack_up 参照)③ A3 条款①扩列(W3 另一半)归零散批 ④ W7/W11 等 C3 收口批项不受本批影响。 - -## GDD 设计顺序 - -1. D2 数据配置与数值表 -2. A3 行动经济 -3. A4 地形变异 -4. B3 增益/状态系统 -5. A1 扫雷棋盘生成 -6. A2 排雷玩法规则 -7. B2 敌人系统 -8. B4 奖励与道具经济 -9. B1 战斗结算规则 -10. D1 HUD 与界面框架 -11. A5 扫雷辅助道具 -12. C3 难度曲线与精英/Boss -13. C2 冒险结构 -14. C1 关卡节点地图 -15. B5 战斗表现 -16. C4 元进度 -17. D3 存档序列化 -18. D4 音频 -19. D5 教学引导 -20. D6 设置/本地化 - -## 进度追踪 - -| ID | 系统 | 状态 | GDD 路径 | -|---|---|---|---| -| D2 | 数据配置与数值表 | Approved | `design/gdd/d2-data-config.md` | -| A3 | 行动经济 | Approved(2026-09-07 三轮 re-review 8 条文本级 blocking 同日核销;用户拍板免独立 delta 核销直接放行。F1 五条款契约与 refresh 玩家意图路径为 B1/B4/D1 GDD 的强制输入;日志 `design/gdd/reviews/a3-action-economy-review-log.md`) | `design/gdd/a3-action-economy.md` | -| A4 | 地形变异 | Approved(2026-09-08 两轮独立评审:full 8 阻塞 + 同日 re-review【六专员 + CD 终裁】6 阻塞均同日核销;CD 终裁 delta 核销免第三轮,用户拍板放行【A3 先例】;承重数学(厚度≤2【≡任意 3×3 窗口非全雾】/f≤8d/两态 AP/F1 谓词)经两轮对抗零动摇;日志含两轮阻塞→修复对照表:`design/gdd/reviews/a4-terrain-variation-review-log.md`)。**门禁登记(2026-09-08 re-review 补全——下游 GDD 门禁评审逐项核对落位,缺项即 blocking)**——**A1×15**:① 候选池门控(F1)② cell_constraint 生成期强制 ③ 出生区及生成期可达域永不含雾(可达域 A1 确定性计算)④ 可推理率按雾边双向净效应建模(寂静减项 × 推理锚增项,禁单向补偿)⑤ 清图预算增量构成核算(雾致预算增量 = 链不可达雾格数 × dig_ap_cost,设计期聚合校验、违例 = 调参修正)+ 链不可达雾格占比生成期计算输出(B1 对账输入生产者义务)⑥ 空池静默 ⑦ 降级静默 + 产物合法 + 部分达成按 shortfall 分级上报(EC2)⑧ 多变异选取消费 board_gen 流(回放确定性)⑨ EC3 邻接出生区合法(谓词 = 出生 3×3 及可达域内无变异格)⑩ EC10 雾占比参数域(< 全覆盖 × 可推理率联动,可判定谓词)⑪ EC11 双雾区实例独立(布置身份与 board_gen 取号独立)⑫ 厚度≤2【≡任意 3×3 窗口非全雾】/ f≤8d 参数域 ⑬ EC2 判据含连通分量尺寸 ⑭ 降级率按 (level_index, node_depth) 埋点 + 最低雾出现率义务【批量统计断言形式,阈值与样本量归 A1 GDD 定】+ 禁放宽 Rule 3 达成 ⑮ board_biome 非空域校验(fail-fast)。**A2×4**:EC4 连锁开雾格(无数字 + 级联停止 + 计入清图 + 奖励入库)· EC5 雾内旗恒不中(含标错惩罚上线后一致性推论)· 开格上报携带变体标记(数字显示判定数据源)· EC8 棋盘持有生成期变异快照、抗表重载。**D1×3**(2026-09-12 更正:原记 ×2 系索引漏记第③项——A4 GDD UI Requirements 明写"三个呈现义务"):① 图例"迷雾 = 无雷盲区"条目(恒在、不设解锁门、可回看)② 首遇提示(触发 = 首个实际含雾板进入可操作状态、每 run 一次;必含要点 = 无雷盲区 / 雾格不传播连锁 / 雾内旗纯损;非模态不劫持输入)③ 已开雾格 = 地板无字 + 底色层 tint 残留与雾区全开一次性完成信号(验收候选转正——OQ8 已于 design/ux/battle.md 裁决 2026-09-12:采纳 tint + 视觉合并域信号单元;详见 A4 UI Requirements③)。**B4×3 定价硬约束**:雾内奖励档位下界 ≥ 最低档安全格 buff 当量 · 清图奖励锚随雾成本负担(链不可达同分母)上浮 · 雾板净当量优势带上界(防福利)。**B1 条款 5 输入**:三腿入账两态验算 + 雾板净当量优势带 + 防钓鱼方向(对账 A3 OQ6)+ 链不可达占比(A1⑤ 生产者)。承重规则不变:生成期布置约束(雾区仅非 0 安全格【区内无雷无 0 格】)+ 零特判原则;"雾区无雷"为玩家可见知识;A3 F1 条款 5 对账注记三腿入账(非"消解");registry variation_table / variant_pool_gate / fog_ap_note 已同步改写 | `design/gdd/a4-terrain-variation.md` | -| B3 | 增益/状态系统 | Approved | `design/gdd/b3-status-effect.md` | -| A1 | 扫雷棋盘生成 | Approved(2026-09-09 full 评审 MAJOR REVISION NEEDED——8 blocking 同日修订核销 + cheap-now 6 项顺路核销,用户拍板免独立 re-review 直接放行【A3/A4 先例】。承重修订:**P1 可推理率两项达标判据**(inferability_core = 剔除雾格后的可推理率,防止"雾区无雷"知识单独撑线)+ **target 域 [0.85,1] 绝对锚**(断言 A″)+ **雾占比绝对上限 0.25** + **F2c 成本闸**(attempts×W×H ≤ 16384 provisional,运行期禁墙钟逃生)+ 雷数取整/布雷钉死(round 先定数、先布后删)+ F2≡Schema 合流(count=0⇒f=0 腿)+ AC-6(a) 芯/环改写 + AC-11 前提腿 + **断言 B 收紧达成区占比**(A4⑭ 两件套落位)+ **第三轴登记约定**(Boss=Dmax 行 + elite_/boss_ 命名空间预留 + OQ6 C1 定稿强制重审);σ 打包防碰撞修复;D2/registry 接口漂移已同步。recommended 9 项未核销留档(AC-10(d) 条件化、⑬ 差分夹具、板ⅲ′ 对照板、O4 登记等——见日志);日志 `design/gdd/reviews/a1-board-generation-review-log.md`) | `design/gdd/a1-board-generation.md` | -| A2 | 排雷玩法规则 | **Approved**(2026-09-09 full 评审:四专员〔game-designer/systems-designer/qa-lead/ux-designer〕+ CD 终审 NEEDS REVISION 六 blocking 同日修订核销,用户拍板放行【A3/A4/A1/B3 先例】。承重修订:**连锁不越旗**(GD-1——传播集 ∖ G,旗 = 1 AP 链阻断器)· **F4 到达序声明收窄**(划分序无关仅异类四组合)+ AC-10 耗尽型救援/联合清图用例 · **ActionOutcome.sub_reason 封闭枚举**(拒绝可辨数据契约)· **D1×6 义务包**(格态可辨/悬停/雷格可读/路径语义/单意图帧/voided 呈现)· AC 修复包(AC-6 编号/b_chain·b_fog spawn=(3,2)/诊断五类枚举/ap=1 同帧竞争)· 用语纪律清扫 + registry terminology 条目;随批 Rule 11 有价捷径注记 / OQ1 惩罚重复性裁决项 / B1·B4 高光与溢出两条登记。承重结构〔确定性引擎/三事件面/F1–F4/零特判〕经对抗评审零动摇;日志 `design/gdd/reviews/a2-minesweeper-rules-review-log.md`。**下游义务见门禁增补记录 2026-09-09 A2 块:A1 修订义务(🔴 反例 B)、B1×3 + 高光/溢出两条、D1×6,缺项即 blocking**) | `design/gdd/a2-minesweeper-rules.md` | -| B2 | 敌人系统(战斗单位系统——CD 门禁扩容身份) | **Approved**(2026-09-09 一次会话定稿 + 同日 full 评审〔六专员 + CD 终裁〕NEEDS REVISION 8 blocking 同日核销、用户拍板免独立 re-review 直接放行【A3/A4/A1/B3 先例】。lean 定稿:lean 门禁 systems-designer〔Formulas〕/qa-lead〔AC 17 条 + 覆盖矩阵 + 缺口预检 7 项〕已咨询,CD 视角随 full 评审补位。定稿要点:**多敌模型**(1–3 同敌种单位——B3 单敌假设回验不成立,side-wide 零接口变更兼容 + target_ref 扩展位;registry single_enemy_assumption 已改写)· **HeroTable 新增**(接口漂移回写 D2,单行全局,atk=0 机制开关)· **意图视觉推测型**(不预告数值/行为,敌种图像线索稳定可学、全局恒定——CD 承重项定稿 + full 评审补预告时序⑤)· **Peglin 行为类型学转译**(行为环确定性轮转:attack/charge/heavy MVP,guard/boost/hinder/summon 预留校验拒绝;双敌种 grub/ambusher 双环;死亡即不动手 + 同步轮转定理)· **伏击量纲定稿**(每攻击类行为 +3 HP 附加、charge 零兑付——registry OQ2 关闭条件)· **cap 默认 4**(反灾难护栏;旧 8 溢出协议死码废弃)· 条款 3 供给 = 单结算自然边界(用户定稿)· EnemyTable 八字段回填 + 每行集恰一敌种校验。**下游义务 B1×6 + D1×4 缺项即 blocking**(① 增调用序成文;D1×4① 增预告时序/档位、② 全局恒定)。full 评审承重修订:**当前内容态无胜利路径声明**(B4 先行 = 可通关先决)· 资产下限补受击/死亡/顺位 · 多敌夹具根改 ambusher 行(三处死测试修复)· AC-7 恒假判别加 m_e≥2+SKIP · OQ6 事件源更正(flag_judged 非 mine_hit)· OQ7 精英/Boss 编码位预登记(C1 强制核对)· 主角推进域排除 · F4 裕度 2.3× + min(AP,cap) 收紧(registry 同步);**新增 OQ7/8/9**。承重机制〔F1–F4 实算/同步定理/side-wide 池〕经对抗评审零动摇;日志 `design/gdd/reviews/b2-enemy-system-review-log.md`) | `design/gdd/b2-enemy-system.md` | -| B4 | 奖励与道具经济 | **Approved**(2026-09-09 full 评审〔五专员 + CD 终裁〕NEEDS REVISION——14 blocking 同日修订核销,用户拍板免独立 re-review 直接放行【A3/A4/A1/B2/B3 先例】;核销质量依据 = 全部 blocking 为文本级/附表级、承重机制〔预分配确定性脊柱/封闭 RNG/F1–F6 边界实算/编排被动性/AC 架构〕经五方对抗零动摇。承重修订:**窗口锚点移授予段后**〔用户评审拍板:当轮拾取当轮可用〕· **跨文档真相分裂修复**(D2 正文两处旧 reward_roll 语义补同步 / 锚参照迁移三处传播 / game-concept 三处注记)· **预读声称如实降级**(创意风险 #1 维持 OPEN,寻路归 OQ2/A5)· **RewardConfigTable 新增**(Rule 1 载体)+ RewardTable 第九字段 display_name + F5 加载护栏两条致命(no_damage_row 关闭零伤害世界后门,B2 OQ9 并案)· 默认根行集登记 + 刀供给方向预检 · API 输入域补裁(E18–E21)+ AC-14/AC-3 矛盾消解 + σ 预推进/纸面契约声明 · E10 理由更正(拍板不变)· 失衡预警①–⑧ 重校准 · A4②③ MVP 休眠显式宣告 · 用语纪律清扫 + terminology 六词条。lean 定稿要点(2026-09-09):install 期身份预分配 / 库存战斗域 / 恒定表值(attack_up 死行)/ F5 草稿重 roll / 道具段照常消耗 + 清图槽允许 buff 行两拍板。registry `reward_table` + `reward_config` 两条目;**下游义务 B1×6 + D1×5 缺项即 blocking**(见门禁增补记录 B4 块 + full 评审增补块);缺口预检 2 项阻塞级 deferral 至 B1;日志 `design/gdd/reviews/b4-reward-item-economy-review-log.md`) | `design/gdd/b4-reward-item-economy.md` | -| B1 | 战斗结算规则 | Designed | `design/gdd/b1-settlement.md` | -| D1 | HUD 与界面框架 | **Approved**(2026-09-13 /design-system solo 模式一次会话定稿;2026-09-14 /design-review lean 评审〔用户指定单会话,未生成专家代理〕NEEDS REVISION 2 blocking 同日修订核销,用户拍板免复评放行【A3/A4/A1/B3/B2/B4/B1 先例】。承重结构〔27 项义务台账/订阅纪律 ADR-0001/13 项载荷 schema/切片教训三条硬性要求/AC 架构〕经逐项对上游核实零动摇;blocking 均为文本级:① F1 公式与 36/45 输出矛盾(固定边距下数学不可同时成立——spec-AC 阻塞标准)→ 两档定值 + 可行性校验式〔用户裁决〕② 呈现面 API 接口漂移登记扩条(冲突⑧/OQ3:B1×5 函数 + B2×2 投影 + settlement_snapshot 信号——registry `d1_presentation_surface` 为现行契约载体,回 B1/B2 修订批补登记);顺路核销:C3 状态头更正 / C1-lite 切片契约注记 / AC-26 可访问性基线;lint 门禁 PASS;日志 `design/gdd/reviews/d1-hud-framework-review-log.md`。定稿要点:**呈现义务台账 27 项逐项落位**(A2×6/B2×4/B3×4/B4×5/B1×3/A4×3/A3+A1 EC5——GDD Dependencies 落位表,battle.md §13 承接升格系统级验收)· **切片教训三条硬性要求兑现**(entry 17:信号载荷 schema 13 项成文表 Core Rule 17 / 场景级 headless 探针 AC-19 / 信号时点状态可见性规则 Core Rule 18 + AC-20)· 订阅纪律按 ADR-0001 收窄(呈现层只订 B1/runner + 命令式回执驱动五面成文——registry `d1_presentation_surface` 登记)· **命名统一核销**(entry 35:request_refresh / refresh_cap_per_round 正式名,AC-25 grep 断言零残留)· 程序化占位策略(art-bible §1.4 引用、样张不阻塞、占位同受数字可读性硬指标)· _draw 维持 GridContainer 裁决(ADR-0003 Decision 3——复议留样张后,OQ1)· 冲突清单 ⑧ 项(含⑤ D1 裁决:MVP 格面徽章只在已开格呈现——B4 Rule 8 承接,未开格预读随极性提案实施批)· 接口漂移登记 ×3(A3 轮内刷新计数读数缺口 / B1 settlement_snapshot 契约 / 极性提案批 D1 条目) | `design/gdd/d1-hud-framework.md` | -| A5 | 扫雷辅助道具 | **Approved**(2026-09-14 /design-review --solo 快速审核 NEEDS REVISION——3 blocking + 5 recommended 同日核销,用户拍板免独立 re-review 直接放行【B2/B1/D1 先例】。用户拍板两项边缘规则:① area_3x3 边缘窗口照常受理〔resolved_target = 窗口 ∩ 板内格〕② 零信息目标不可用不消耗〔板级图标灰/入口禁用、点击级拒绝、组合行判据取 OR、真视零雷恒有效〕。定稿 = 2026-09-14 /design-system solo 模式一次会话。定稿要点:**五维度框架 {info, risk, action, plan, counter} + F2 覆盖断言**("每维度都有对应道具"机器可查)· **真视窄域护栏**(替代推理 ≤3×3、恢复推理可全图——P1 防塌方)· **MVP 六行**(四常规单维 + 两稀有多维高数值——用户设计指令直接兑现)· **获取挂 B4**(aux_item 预留枚举激活——义务 B4×①…⑤)· **使用经 B1 挖掘期编排**(use_aux 规范序——义务 B1×①②③)· **板级叠加层**(零特判延伸——A2 代码零 A5 分支)· **A3 grant_ap 第 9 API 接口漂移预授权**(义务 A3×①)· 21 项跨 GDD 义务清单 + F1–F3 + 16 AC + lint PASS;A4 EC6/OQ2 与 B4 OQ2 收口。**注意:B4/D2/A3 修订批兑现前 aux 行入池会加载致命(生效前提显式登记)**) | `design/gdd/a5-minesweeper-aux-items.md` | -| C3 | 难度曲线与精英/Boss | **Approved**(2026-09-12 /design-system solo 定稿;2026-09-14 /design-review lean 单会话——NEEDS REVISION 8 blocking 同日修订核销,用户拍板免复评放行【A3/A4/A1/B3/B2/B4/B1/D1 先例】。v2 修订批承重要点:**生存链区间模型**(S/K 区间三档判定〔绿/黄/红〕+ 关级恒等式 + 输出占比带——用户设计,替代关级供给带)· **MVP 行值总表 v3 转正**(切片 .tres 权威源,三敌种 goblin/bugbear/ogre_chief)· **带锚定稿**(通关率 [30,50] / 通关余量 p90≤13 & p10≥3 / L1 形态带)· **四批切片既成事实转正**(clear_blast 换位 / K_dmg=0 / 供给控制器归 B4 / armor_type 克制批)· F7 七步 · B1×1/B2×3/D2×2/registry 接口漂移回写(X-6~X-10)· 条款⑤重推(C=40,缺口 6.1/51.8)· **OQ7 加难杠杆扫描待执行**(r_boss 走廊 180–207 等候选,provisional-pending-scan)· 敌种更名批对齐(D1 冲突② 落定);日志 `design/gdd/reviews/c3-difficulty-curve-review-log.md`) | `design/gdd/c3-difficulty-curve.md` | -| C2 | 冒险结构 | **Approved**(2026-09-14 /design-review --solo 快速审批〔单会话,未生成专家代理〕——Verdict APPROVED:0 blocking / 3 recommended / 4 nice-to-have,recommended 随 C2 下次修订批或对侧批次执行;日志 `design/gdd/reviews/c2-adventure-structure-review-log.md`;lint PASS。七项已锁事实核对零冲突(C3 带锚/OQ1、B1 begin_battle·level_clear、B4 库存关卡域、A4 unlock_level=2、game-concept 死亡即终与时长、registry 四条目+三词条、lint+R8+R3);六项压力测全过——F1 合成 [6,20]% 口径闭合前提结构成立、N=1/N=2 生效前提与 AC-10 SKIP 自洽、C1/C2 边界给分支/精英留足空间、大奖励所有权三分清晰、失败重开与 game-concept 一致、两处切片简化改写经切片代码核实相符(start_level 逐关播种 / 每关回满)。承重裁决要点(2026-09-14 /design-system solo 定稿):**冒险域四件套**——关卡序列 MVP N=2 线性(L1 地牢基线 → L2 雾解锁 + 数值台阶;生效前提 = C3 L2 深度轴行值填充批,未落地前 N=1 单关冒险合法态)· 关卡大奖励三件(上限 +10 经 begin_battle 覆盖值通道 / 血回满【与 C3 满血开局校准口径闭合】/ 代币记账 10——AdventureTable 单行全局,末关不兑付)· 失败重开(死亡即冒险终、重开全新种子、放弃同失败型非战斗期受理)· master_seed 接线(冒险 = 种子域单位,零流消费);**HP 账本** = 跨战斗持久性 C2 半边兑现(registry `hero_override_parameter_passing` 补登);**C1/C2 编排边界** = 收束点在 C1(先调 B1 level_clear 再宣布 level_end)、冒险层只接结果——接口契约四件套(start_level / report_battle_end / heal_clamped / level_end)为 C1 GDD 强制输入;registry 新增 `level_table` / `adventure_table` + terminology 三词条;lint PASS(表格占比 86%) | `design/gdd/c2-adventure-structure.md` | -| C1 | 关卡节点地图 | 未开始 | — | -| B5 | 战斗表现 | 未开始 | — | -| C4 | 元进度 | 未开始 | — | -| D3 | 存档序列化 | 未开始 | — | -| D4 | 音频 | 未开始 | — | -| D5 | 教学引导 | 未开始 | — | -| D6 | 设置/本地化 | 未开始 | — | - -## 备注 - -- 原型结论已作为 GDD 素材:小人控制、AP 8、标雷判定、奖励统一结算、增益跨轮次不跨战斗等定稿见 `design/gdd/game-concept.md` -- 概念文档待定问题(主动战斗道具、标错惩罚、节点地图形态、反雪球)将在对应系统 GDD 中解决;~~停手折算比例~~ 已随 2026-09-07 A3 RAP 结构修订作废(停手 1:1 转存 RAP、清图作废) -- **概念层增补(2026-09-09,用户定稿)**:产品名 **Dungeon Sweeper** + 世界观背景(地牢下探叙事 + 机制隐喻映射)+ 美术方向"格子 = 地牢地砖"已写入 game-concept.md;P4 支柱增命名承载。均为表现层/命名层,不触碰任何已锁机制数值与接口(A1–B3 已定稿 GDD 不受影响);art-bible 任务照旧排期(最晚 D1 GDD 前),"格子样张测试"验收项不变 -- **概念层增补(2026-09-12,用户拍板)**:叙事属名换轴——雷格 = **惩罚格**(类型化属名:首发地牢类型 = 怪物巢穴;陷阱/岩浆/冰冻化身及各自机制分化登记为未来机制侧方向归 A1/A2——"陷阱→直接扣血 / 标中陷阱→怪物受伤害"与现行"开雷→敌方优势"锁定规则的取舍归机制侧,概念层不承诺)+ 插旗玩家可见动词 = **控制**(类型无关;对内文档与机制协议仍为"旗/插旗";"封印/镇/反制"降级为类型风味词)+ 连锁展开 = **坍塌显形**(B5 连锁动画 / D4 音效方向登记)+ 标错惩罚叙事 = **控制失败的失控反噬**(随机读作失控;重复性措辞随 A2 OQ1)+ 宝箱呈现仅绑定可使用道具类奖励(非道具奖励不摆箱;"搜刮/遗落物"为可选氛围框架登记不锁)+ 世界观厚度 = **碎片点缀**(不含前人日志)——已写入 game-concept.md 世界观与命名节(映射表 + 背景句,带版本注记)与视觉锚原则 5 表现措辞;均为表现层/命名层,不触碰任何已锁机制数值与接口(A1–B4/B1/C3 已定稿 GDD 不受影响);依据记录:`design/research/lore-nest-metaphor-2026-09-12.md`(⑤节 6 问同日拍板回写);D1"控制"动词手感、art-bible 旗形态/巢感样张、D5 教学措辞、D6 结算风味词输入只在记录③登记,各归各的时机 -- **概念层增补(2026-09-14,用户拍板)**:术语层级补录**行动层**——轮次挖掘期的原子决策单位:有价行动(挖/插旗/拔旗)1 AP/次、受每轮 AP 预算约束(现行表值 8),移动/停手免费不计 AP;行动/意图/动作三视角钉死(玩家决策 / A2 数据形态〔单意图帧整批〕/ A3 计价类别)——写入 game-concept 术语层级表、对应关系(轮次 ⊃ 行动 ×K)与核心循环树。同批**层名裁决 = 节点**(C1"关卡节点地图"注册名与切片 node_* 接口零改动;节点类型分类学与分支机制归 C1 GDD 展开)+ 遭遇 = 战斗事件同义词(不作层名)+ 三个 reward 拆名(节点奖励 / 安全格奖励〔B4〕/ 节点奖励覆盖层〔OQ9 spec〕)——registry terminology 四词条登记。均为命名层,不触碰任何已锁机制数值与接口