# A4 地形变异(Terrain Variation) > **状态**:Approved · lean 格式 > **版本**:v1.0-lean · 2026-09-13 · 作者:user + agents(lean 门禁:systems-designer 审查 Formulas · qa-lead 审查 Acceptance Criteria) > **承载支柱**:P1 主(信息诚实边界——"不可推理"永不伪装成"可推理")· P3(信息维度变体——定价通货从雷险换信息+AP;迷雾仅其信息切面)· P2(暗面警示——雾区奖励可预期性切面)· P4(地牢氛围本体承载) > **层级**:Layer 1 Foundation · Milestone MVP · 设计顺序第 3 位(上游 D2、A3 已 Approved) > **一句话**:A4 定义扫雷图上的地形变异——基础规则之上的区域性规则偏离;MVP 唯一变异为迷雾(边界可见、内容隐蔽),并以变异框架承载岩浆/冰冻等后续变异逐个加入。 > **复核注记**:art-director 未经咨询(Lean 模式)——生产前人工复核视觉规格与 art-bible 一致性(creative-director 已在两轮独立评审中终裁幻想节处置)。 ## 速览 | 关键问题 | 答案 | |---|---| | 定位 | 变异的定义与交互规则 owner——在基础扫雷规则上叠加区域性规则偏离的框架 + MVP 迷雾;玩家不"使用"A4,而是在挖掘中遭遇并应对它 | | 拥有 | VariationTable 8 字段定义(D2 回填 owner)· F1 候选池门控谓词 · 信息剥夺边界与双向效应 · 生成期布置约束声明(执行归 A1)· 零特判原则的规则面(义务是"不加分支")· 未来变异扩展框架 | | 不拥有 | 布置算法与区域参数(A1 BoardGenTable)· 挖/旗执行(A2)· 呈现(D1)· 教学文案(D5)· 奖励内容与定价(B4/B1)· 道具(A5)· 全局变异语义(C3)· 玩法数值字面量与随机 | | 上游输入 | D2 VariationTable schema 承载 + ConfigDB 读取(hard——唯一玩法上游);A3 价目 `ap_per_round` / `dig_ap_cost` 文档层引用(零运行时接口消费) | | 下游输出 | 候选池门控 + cell_constraint + 出生区排除(A1)· 变体属性只读查询契约(A2)· 呈现规格(D1)· 教学口径(D5)· 定价硬约束与条款 5 对账输入(B4/B1)· counter_item_ids 预留(A5)· scope=global 枚举位(C3) | | 硬约束 | 生成期布置约束(雾区仅非 0 安全格——区内无雷、无 0 格)· 零特判原则 · fog unlock_level=2 · hide_numbers⇒safe_nonzero 跨字段校验致命 · 厚度 ≤2 / f ≤ 8×雷密度 硬边界 | A4 是定义层系统:变异由棋盘生成(A1)布置在图上,玩家在挖掘中遭遇并应对——看见迷雾边界那一刻决策就出现:如何安排挖掘顺序让 0 格连锁免费吃掉雾格(连锁路由),链不可达的雾残段按全价续付清图还是停手/弃图(A3 风险退出权衡;垂直切片起再加"是否用道具买情报",A5)。清图判定含雾格——雾是清图的必经段而非可绕过的支线,"绕开走"的真实形态是 A3 的停手/弃图风险退出。 没有 A4,游戏失去两样东西:难度只能靠雷数单调缩放、关卡间"解锁新变异"的推进感(P4 越下越险)消失;且"无法推理"的格子会以埋伏形式随机出现——迷雾把"你推不出来"从暗处的埋伏变成明处的选择,是 P3"风险与收益同源"在空间维度的载体,也是对 P1"我算对了"的诚实兜底:推不出的区域被显式标注、可绕行、可买情报,而不是让玩家在自以为可推理的局面上撞墙。 ## 体验锚点 > 情绪目标一句话:**站在洞口前的权衡感**——迷雾不制造惊喜或惊吓,它制造一个看得见边界的承诺:"里面有价值,进去的代价是 AP 溢价与放弃雾格数字这份推理原料。"(玩家每轮都在看见并应对变异——直接感知) | 支柱 | 关键词 | 机制承诺 | |---|---|---| | P1 我算对了的诚实边界 | "数字不再说话" | 迷雾是游戏对玩家的坦白——把"无法推理"从埋伏变成路标:雾外仍可用区外数字推理雾边缘的雷(跨雾推理——被雾边已知约束放大的常规推理体验,"隔着雾也算出来了",是常规推理在雾边的延伸、非独立机制);进雾每一步是承诺而非计算;基础区可推理率生成保证归 A1,A4 负责"不可推理"永不伪装成"可推理";"里面有价值"是契约而非愿望——由 B4 三条定价硬约束兜底(义务清单 B4-①②③) | | P3 风险与收益同源(信息切面) | "不赌命,赌信息与行动力" | 雾区无雷是玩家可见知识——雾的"险"在信息与行动力的双重定价:盲区预算按链不可达雾格全价收紧,链可达雾格经邻接 0 格连锁免费开出(两态口径);变异框架是 P3 的长期载体,迷雾仅其信息切面,P3 雷险维度由岩浆/冰冻(垂直切片起)承接;真实耦合点在雾边(Rule 5 双向效应——A1 按双向净效应建模) | | P2 规划的延迟兑现(暗面警示) | "边界可见、内容隐蔽" | 雾内奖励若不可见,规划退化成探索惊喜(创意风险 #1,CD 门禁登记 B4/A4 落实)——Core Rules 定迷雾信息呈现规则的精确切面,奖励可见性/探测机制的接口在此预留、内容归 B4/A5 | | P4 地牢氛围的本体承载 | "趴在地图上的黑暗" | 迷雾是"下探黑暗"隐喻的直接具象——未探索的黑暗是有形状、有边界、趴在地图上的实体;后续变异(岩浆/冰冻)延续"越深越险的地貌"叙事(随关卡解锁) | 反向护栏(裁剪判据):迷雾绝不能制造"被骗感"——若雾区边界不可见、或进洞无额外价值,迷雾退化为纯负体验税(纯 AP 税);任何让雾区"隐性化"的设计默认砍掉。"里面有价值"由 B4 三条定价硬约束兜底:两条防税下界 + 一条防福利上界——防 level 2 首发关(小图低密、链免开占比结构性最高)"链免开 + 锚上浮"双白拿的福利板化与"雾=免费奖励"先验(后者会在后期雾变厚、全价残段出现时恰触发被骗感护栏)。 - 参考感受:Into the Breach 的信息诚实(游戏从不用隐藏信息骗你——本作反其道而行,把"信息缺失本身"诚实标注)· 杀戮尖塔地图的路径承诺(看得见的未知,选定的风险)。 ## 全局流程 ### 地形布置流程(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 < 参数要求 N → 尽力布置可行分量,按 shortfall 分级上报降级率(禁放宽 Rule 3 硬塞) │ ③ 可行域内布置雾区,硬边界逐项成立: │ · 雾格 ∈ 非 0 安全格(区内无雷、无 0 格) │ · 厚度 ≤2(≡ 任意 3×3 窗口非全雾)· f ≤ 8×雷密度 · 雾占比 < 全覆盖(EC10) │ · 出生 3×3 及其初始展开可达域内无变异格(保守上界 = 出生 3×3 经 0 格最大 │ flood 闭包外扩 1 格——任意 A2 展开定义的超集,Rule 7) │ · 区域随机选取经 board_gen 流取号(回放确定性) │ ④ 生成期计算并输出链不可达雾格占比(B1 条款 5 对账输入,验收⑤) ▼ 棋盘产物(格状态 + 变异标记 + 出生区)→ A2 install_board 持有生成期快照 ``` ### 雾揭示流程(运行期——零特判,A2 执行逻辑无变异分支) ``` 玩家挖格 c(全价 dig_ap_cost)或 0 格连锁传播至 c(连锁展开零价) │ A2 只读查询格变体属性(生成期快照) ▼ c 是雾格? ├─ 否 → 正常开格:显示数字(8 邻雷数恒真,值不因雾改变) └─ 是 → 开出、不显示数字(未开时专属纹理已标出区域边界) · 来源 = 连锁 → 免费(链可达雾格——EC4;雾格恒非 0,级联止于雾格) · 来源 = 单格挖掘 → 全价 dig_ap_cost(链不可达雾格) · 计入清图进度 · 安全格奖励照常入库 · 雾内插旗合法但轮末判定恒不中 ``` ### 出口分发 | 出口 | 触发 | 行为 | 依据 | |---|---|---|---| | 普通图(无变异) | 候选池为空(未解锁 / biome_tag 全不匹配) | 静默布置、不报错、无 warning——两种来源同待遇 | EC1 / F1 Output Range | | 无雾图(降级产物) | cell_constraint 无解(面积或连通分量不足) | 跳过雾布置,图仍合法;shortfall 分级上报降级率 | EC2 | | 合法雾图 | 可行域内布置成功 | 产物携带变异标记;占比参数域校验通过;输出链不可达占比 | Rule 3 / Rule 6 | | 参数域拒绝 | 雾占比 ≥ 全覆盖(极端参数) | BoardGenTable 参数校验拒绝(雾占比上限 × 可推理率下限联动不等式) | EC10 | ## 核心规则 > 每条规则两段:**人话**(作用于哪个系统、什么情况下、谁触发、触发后发生什么;效果与情况用枚举表)→ **举证**(计算方法/公式;纯流程规则明写"无计算")。 #### 规则 1:每种变异都是配置表里的一行声明,不含任何专属代码 **人话**:这条管变异怎么被定义。每种变异是配置表 VariationTable 里的一行具名声明,一共声明四件事——见下表。框架自身不含运行时逻辑:变异带来的行为改变,发生在"信息规则 × 既有系统行为"的交集里,定义行只声明交集参数,不写任何处理代码。 | 声明项 | 字段 | 回答的问题 | |---|---|---| | 身份 | variant_id / display_name / unlock_level / biome_tag | 叫什么、第几关解锁、在哪些地形主题出现 | | 信息规则 | info_mask | 隐藏玩家的什么信息 | | 布置约束 | cell_constraint | 允许落在什么样的格子上 | | 作用域 | scope | 管一块区域(region),还是全局(global——为后续预留) | **举证**:无计算(定义框架)。字段 schema 定稿与默认值见「Tuning Knobs·VariationTable schema 定稿」表(本 GDD 回填 owner,承载归 D2)。 #### 规则 2:迷雾边界看得见,里面的数字看不见 **人话**:这条管 MVP 唯一的变异——迷雾。它是作用域为 region 的信息剥夺变异,玩家在挖掘中遭遇它时,行为规则只有两条: | 情况 | 玩家看到什么 | |---|---| | 雾格还没开 | 专属纹理标出雾区范围——边界可见、内容隐蔽 | | 雾格被开出(亲手挖或连锁带到) | 照常开出,但不显示数字 | **举证**:无计算(两条行为规则)。呈现规格(纹理、边界可读性、已开雾格样式)归 D1,见「呈现与 UI 契约」节与依赖节 D1 行。 #### 规则 3:雾只铺在贴着雷的安全格上——雾里永远没雷、没 0 格 **人话**:这条管棋盘生成时雾往哪儿摆,是本 GDD 的承重规则(用户定稿)。生成器布置雾区只能选"非 0 安全格"——8 邻里至少含 1 雷的安全格,于是雾区里既无雷、也无 0 格。约束由本 GDD 声明、棋盘生成器在生成期强制执行,谁都不许为布置成功率放宽它。玩家侧的承诺是明牌:"雾区无雷"由教学与图例传达。正因雾里没雷没 0 格,既有规则才能对雾全面惰性化——下一条讲的就是这个。 **举证**:计算见「数值结论与推导·结构推论」——厚度 ≤2(可判定谓词 ≡ 任意 3×3 窗口非全雾)与面积必要上界 f ≤ 8×雷密度的推导与验算都在该节;约束逐项落点见下方实现参照表;执行义务登记 A1 验收⑫;数据载体 = cell_constraint 字段;"雾区无雷"等可教知识清单见「规则 3/5 的实现参照——雾元知识信息源」。 #### 规则 4:既有系统不为雾改任何行为,代码里零变异分支 **人话**:这条管雾与游戏其余部分的关系,同为承重规则。连锁、数字计数、清图判定、插旗、行动价目、结算——既有系统一律不感知"这格是不是雾格":雾不改变它们任何行为,代码里也不许出现"如果是雾格就……"的分支。雾格能被如此"无视",靠的正是上一条"雾里没雷没 0 格"的布置约束。六个系统面在雾下的具体表现见下方实现参照表。 **举证**:无计算(架构纪律)。挖掘侧义务 = 执行逻辑零变异分支("不加分支"而非"加处理",见依赖节下游 A2 行);A4 文件集零随机、零字面量走静态扫描(AC-7/AC-10)。 #### 规则 5:雾只藏雾格的数字,藏的同时倒送两样补偿 **人话**:这条管信息剥夺的边界——"雾到底藏了什么"的账目。藏的只有一样:未开雾格的数字;不藏的有三样,见下表。雾外数字对雾外雷的计数照常,雾边界推理仍可行、只是原料变少。剥夺之外并存增益,净效应双向、随雾形与雷密度变化——建模必须两边都算,不许只算一边: | 信息 | 雾下状态 | |---|---| | 未开雾格的数字 | 藏——唯一被剥夺的 | | 雾区边界 | 不藏——专属纹理可见 | | 已开格的全部信息 | 不藏 | | 奖励入库过程 | 不藏 | | 效应方向 | 内容 | |---|---| | 剥夺(减项) | 雾格数字本可作区外雷的推理源,其寂静使雾边附近的线索变少 | | 增益(加项) | 雾格保证无雷且必邻区外雷;雾形携带雷簇位置(k 格雾区外环必含 ≥⌈k/8⌉ 雷);雾边邻格雷候选域收缩、局部更易解——"雾边 = 推理锚" | **举证**:净效应双向且依赖雾形/雷密度——A1 可推理率参数须按生成后实测净效应建模、禁单向补偿(验收④);外环雷下界 ⌈k/8⌉ 的推导见「数值结论与推导·结构推论」;玩家可推理、可教的雾知识清单见「规则 3/5 的实现参照——雾元知识信息源」。 #### 规则 6:雾摆多大摆哪儿归棋盘生成器,A4 只管入场资格 **人话**:这条管雾区摆放的决定权。A4 不拥有布置算法:摆几个雾区、每个多大、摆在哪,与雷图共生,由 A1 生成算法 + BoardGenTable 参数(按关卡×深度两维逐行,A1 回填)决定;布置随机从棋盘生成专用随机流(board_gen 流)取号,每次生成新扫雷图绑定一次,同种子必出同图。A4 对摆放的唯一参与是资格把关:变异的解锁关号不高于当前关卡序号,才进入这一关的布置候选池。 **举证**:门控的计算形式是集合谓词 F1(unlock_level 直接整数比较 + biome_tag 通配/交集),见「数值结论与推导·F1 布置候选门控」;取号机制 = RngService scope 绑定(每次生成新扫雷图);区域数量/尺寸/占比参数域见「枚举·板形参数」表。 #### 规则 7:出生区及其连锁可达范围永不长雾 **人话**:这条管玩家的落点安全。开局站立的 3×3 出生区,连同从它出发顺 0 格连锁能自动展开到的范围,永不含任何变异——生成器布置时硬性排除。可达范围由生成期确定性算出(不依赖挖掘系统运行期的展开行为定义),取保守上界:从出生 3×3 经 0 格连锁能扩散到的最大范围(flood 闭包)再外扩 1 格,比挖掘系统实际能展开的范围只大不小。防的是"开局即瞎"与"开局预开雾格";叠加"初始展开无奖励"(定稿口径),初始展开触及雾格在构造上不可能——双保险。 **举证**:无计算(几何排除)。可达域保守上界构造见 A1 GDD;回验项(挖掘侧实际展开域 ⊆ 生成侧排除域——"构造上不可能"仅在超集关系下成立)登记 A2 GDD 门禁;"初始展开无奖励优先于连锁入库语义"保留(EC4);出生区排除登记验收③。 #### 规则 8:A4 的代码不写死数字、不掷随机 **人话**:这条管数据纪律。变异的全部定义数据放配置表 VariationTable——本 GDD 是该表回填 owner,字段 schema 见 Tuning Knobs 节。A4 相关代码零玩法数值字面量、零随机:布置随机落在棋盘生成器的专用随机流里,A4 自己既不掷随机数也不写死玩法数字,一切读表。 **举证**:无计算(数据纪律)。schema 定稿与 knob 划分见「Tuning Knobs」节;机器验收 = 静态扫描零命中(AC-7)与字面量人工口径(AC-10)。 #### 规则 9:新变异将来按同一框架加行,不另起炉灶 **人话**:这条管变异框架怎么长出新居民。岩浆、冰冻在 MVP 不建行(CD 门禁:无 MVP 容器),随垂直切片关卡解锁建行;将来某变异需要新规则字段时,走 D2 接口漂移规则同步回写本 GDD 与 D2,不在表外私加字段。精英/Boss 图的全局变异只预留一个"全局"作用域枚举位(scope=global),语义归 C3 GDD 定稿——本 GDD 只保证枚举位存在,不预写语义。 **举证**:无计算(扩展纪律)。MVP 行集内容事实(恰含 fog 一行)见「枚举·VariationTable 行集」;global 行出现时的 warning 校验见「枚举·VariationTable schema 校验类别」表;接口漂移规则归 D2。 ### 规则 3 的实现参照——生成期布置约束(几何硬边界) | 约束项 | 内容 | 执行 / 落点 | |---|---|---| | 雾区格类 | 仅非 0 安全格——区内无雷、无 0 格(非 0 安全格 = 8 邻域含 ≥1 雷) | A1 生成期强制(A4 声明 cell_constraint 数据载体) | | 玩家可见知识 | "雾区无雷" | D5 教学必授 + D1 图例条目(MVP 验收两条) | | 几何硬边界 | 每个雾格必有非雾雷邻居 ⇒ 雾区任意处厚度 ≤2——可判定谓词 ≡ 任意 3×3 窗口非全雾(3×3 实心雾块中心必为 0 格,不可能成雾) | 登记 A1 验收⑫;推导与验算见数值节 | | 面积必要上界 | 雾面积占比存在依赖雷密度的必要上界 f ≤ 8×雷密度——雾区恒为雷集切比雪夫 1-膨胀出的边界带 | 同上 | | 参数域 | "区域数量/尺寸/占比"参数(A1 BoardGenTable 域)必须在此边界内定义 | OQ1 联动;验收⑫⑩ | | 正常形态 | 1~2 格宽雾带是雾的正常形态 | 视觉规格须按最坏宽度验收(AC-9) | | 可推导元知识 | "每个雾格必邻区外雷"由规则可推出 | 按 P1 诚实原则(可推导即可教)纳入教学候选,口径归 D5 裁定 | ### 规则 4 的实现参照——零特判六面 | 系统行为 | 雾下的行为 | 性质 | |---|---|---| | 连锁展开 | 触发与传播只看真实数字;雾格恒非 0 → 雾格自身永不传播连锁(不开出新级联);但雾格可被邻接 0 格的连锁免费开出(EC4——"不传播"≠"不被开") | flood fill 代码零变异分支 | | 数字计数 | 数字 = 周围 8 格雷数恒真;雷全在雾外,任何数字的值不因雾存在而改变 | 恒真定理 | | 清图判定 | 雾格照常计入"安全格全开"判定——雾是清图必经段 | 恒等 | | 旗 | 雾内插旗合法(价目照常)但恒标不中(无雷) | 合法、无害、无意义 | | 行动价目 | 挖/旗/移动成本雾内外一致 | A3"地形成本修饰"钩子本 GDD 搁置——启用须回 A3 重议 per-cell 成本接口 | | 结算 | 雾格安全格奖励照常入库与结算 | B1/B4 无需感知雾 | ### 规则 3/5 的实现参照——雾元知识信息源(玩家可推理、可教的雾知识清单) | 元知识 | 信息源 | 消费方 | |---|---|---| | 雾区无雷 | 生成期布置约束(Rule 3)——生成保证而非运行期判定 | D5 教学必授 + D1 图例(MVP 验收两条) | | 每雾格必邻区外雷 | Rule 3 结构推论(可推导即可教——P1 诚实原则) | D5 教学候选(口径归 D5 裁定) | | 雾格恒非 0 · 级联止于雾界 | Rule 3 寄生结论 + hide_numbers⇒safe_nonzero 跨字段校验 | D5 教学(防"连锁莫名断了"的被骗感——D1 必含要点) | | 雾边候选域收缩 · 局部更易解 | Rule 5 增益侧(外环雷下界 ⌈k/8⌉) | A1 可推理率建模(双向净效应) | | 雾格成本两态(链可达免费 / 链不可达全价) | 数值节预算注记 | A3/B1 对账;D5 玩家侧保守启发式教学("雾格按全价做预算,连锁白开当惊喜"——链可达性取决于未开 0 格的隐藏拓扑,玩家决策时点不可求值,明教两态反生免费期待、恰触发反向护栏被骗感) | | 雾内旗恒空 | Rule 4 旗面(雾区无雷) | D5 教学警示"雾内插旗纯损" | ## 枚举 ### VariationTable 行集(MVP 表内容——恰含 fog 一行,AC-1 内容事实断言) | 行 | 字段取值 | 产出点 | 语义 | |---|---|---|---| | "fog"(迷雾) | unlock_level=2 · scope=region · info_mask=hide_numbers · cell_constraint=safe_nonzero · biome_tag=[] · counter_item_ids=[] | game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻;本 GDD 回填 D2 | MVP 唯一变异;岩浆/冰冻不建行(CD 门禁:无 MVP 容器),垂直切片随关卡解锁建行 | ### 板形参数(A1 BoardGenTable 域——A4 引用不拥有,禁止两表间复制参数,D2 Rule 1) | 参数 | 维度 | 约束与义务 | 产出点 / 消费方 | |---|---|---|---| | 区域数量 N | (level_index, node_depth) | 要求 N 区而实际达成 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 消费) ``` **Variables:** | 变量 | 类型 | 范围 | 说明 | |---|---|---|---| | 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 增益侧) ``` **Variables:** | 变量 | 类型 | 范围 | 说明 | |---|---|---|---| | 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 定义 ``` **Variables:** | 变量 | 类型 | 范围 | 说明 | |---|---|---|---| | 链不可达雾格数 | 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 腿 | 链不可达雾格全价无连锁折扣,抬高清图成本——敌方结算时间税随之上行 | 推高弃图 | - 雾面积占比与链不可达占比为 B1 条款 5 对账输入变量(链不可达占比的生产者义务 = A1 生成期计算输出——验收⑤,防输入变量有名无源)。 - B1 闭合对账须雾板/无雾板两态分别验算支配性不等式(A3 provisional 验算只在无雾图形况做过)+ 两条方向性护栏:① 雾板净当量优势带上界(雾板 vs 无雾板 EV 差的容许带——防福利方向);② 防钓鱼方向(与 A3 OQ6 防钓鱼约束对账):雾板下界抬升不得使"弃图刷雾板"支配"即刷"——逐板奖励差分 × 最低雾出现率 × 8 RAP 刷新会构造出 A3 OQ6 明令防的刷新钓鱼环,解法(关卡层常量锚 / 防钓鱼不等式 / 与 OQ6 显式对账)归 B4/B1。 - playtest 弃图率/完成度指标雾板分层观测(注记回执 A3 OQ3——聚合指标会被雾板污染或反向掩盖)。 ## 状态 | 阶段 | 载体 | Owner | 行为 | |---|---|---|---| | 定义(构建期) | VariationTable .tres | D2 承载 / A4 回填 | ConfigDB 加载校验;热重载走 D2 既有门(战斗中拒绝,EC8) | | 布置(生成期) | 棋盘格变体属性 | A1 | 生成新扫雷图时经 board_gen 流取号;unlock_level 门控候选池 + cell_constraint 强制 + 出生区排除 | | 生效(执行期) | 格属性只读查询 | A2 / D1 消费 | 开格时读"是否雾格"决定数字显示与否;零运行时写入 | | 消亡(随图) | 棋盘实例销毁 | A2 | 清图换新图 / 刷新 / 战斗结束——变异属性随棋盘实例消亡,无跨图存续 | 不变式:A4 无运行时状态机——变异是棋盘格的只读属性,随图生成、随图消亡;生效期零运行时写入、无跨图存续。 ## 边界情况 | 条件 | 行为 | 依据 | |---|---|---| | 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 | ## Tuning Knobs ### VariationTable schema 定稿(D2 回写义务——本 GDD 为回填 owner) | 字段 | 类型/范围 | 默认(fog 行) | knob | 说明 | |---|---|---|---|---| | variant_id | String(主键) | "fog" | ✗ | 变异标识;A1 候选池与 A2 查询的键 | | display_name | String | "迷雾" | ✗ | 图例/教学用名(本地化归 D6) | | unlock_level | int [1, 999] | 2 | ✓ | 首次可布置关卡序号(game-concept 解锁序列:普通数字→迷雾→岩浆/冰冻);本表为定义表(数值恒定)非进度成长表,键 = variant_id,进度语义承载于此列——D2 Rule 4 豁免,语义写入 schema 注释 | | scope | enum {region, global} | region | ✗ | 作用域;global 仅预留枚举位(语义归 C3,MVP 不产生 global 行) | | info_mask | enum {none, hide_numbers} | hide_numbers | ✗ | 信息规则:该变异隐藏什么;新信息规则走接口漂移 | | cell_constraint | enum {any, safe_nonzero} | safe_nonzero | ✗ | 布置约束:允许落在什么格子上——Rule 3 承重规则的数据载体,A1 生成期强制执行 | | biome_tag | StringList 可空 | [] | ✓ | 关联 biome 主题(AD 门禁换皮约束);空 = 全 biome 可用 | | counter_item_ids | StringList 默认空 | [] | ✗ | 可穿透该变异的 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 | ## 开放问题 | # | 问题 | 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 前 | ## 版本历史 | 版本 | 日期 | 改动 | |---|---|---| | 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 |