68 KiB
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 的结算都失去发生地。
- P1"我算对了":数字恒真透传(雾格只是不显示,数据层永不说谎)、连锁传播与生成端度量同构、每个拒绝携带可辨原因——系统回应的每一格都与玩家推演一致。
- P4"走过的伤疤":小人从出生安全区向雷图边缘探索,点击已探明区瞬移穿行、在未开边界挖掘,已引爆雷格可通行——雷不是探索终点,是走过的伤疤。
- P3"赌与算都可见":挖开雷格是事实上报而非死亡,旗是零信息收益的纯粹承诺(雾内旗恒不中也被诚实判定)——A2 不裁决得失,只保证事实流真实。
- 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)A2 引擎吃两样输入——A1 产出的棋盘、玩家提交的意图序列,吐一样输出——三种事件组成的事实流;同棋盘同意图序列必得逐位相同的事件流,为此守四零禁令:零随机(不掷骰子、不自建随机源)、零数值字面量(价格读账本、板面读生成产物、变异随格快照携带)、零表读取(参数全经上游)、零界面与输入设备依赖(唯一通道是意图对象,
--headless --script完整可驱动)。 - (规则 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 | 幂等受理 | 拒绝(板态) | 受理 |
装板与初始展开规则
规则:
- (规则 3)install_board 在 Idle/Waiting 相位受理,挖掘进行中只有"弃图刷新"这一条编排路径例外(以账本扣费成功为前提),其余在局内装板一律拒绝;受理后 A2 持有生成期变异快照(非数据表活引用,热重载改表不影响行为),当场验四条结构不变式,任一不过即拒绝装板并给出 board_invalid 错误级诊断,绝不带病运行;验过才执行初始展开、把小人放到出生 3×3 中心格。
- (规则 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 邻。
规则:
- (规则 5)挖/插旗/拔旗三个付费动作,A2 先查棋盘面(目标相不相邻、开没开过、旗位对不对),查过再请资源账本扣行动点;任一边说不行,整个动作被拒绝——棋盘不变、不扣费、不发事件;每次拒绝携带三源之一的可辨原因码(棋盘面/资源面/相位,玩家面文案归呈现层);A2 自己绝不直接扣资源;挖成之后连锁规模与清图事实(chain_size, clears_map)由 A2 上报账本。
- (规则 6)挖开数字为 0 的格时,它周围 8 向相邻的未插旗安全格免费连锁全开,一路递推到没有新的 0 格为止;连锁格只花首格挖掘价、照常计入清图进度、奖励资格照常;旗格不入链也不当传播源——旗是玩家可用的"链阻断器"(花 1 AP 插旗保护一格不被误链);雾格可被链开但永不传播(生成端保证雾格数字恒非 0),代码里没有为变异写的分支。
- (规则 7)点击任何已开格,小人经已开区一次瞬移到位——逐格走的动画是呈现层的事,规则层一次事务完成落位;合法条件两条:目标格已开、且能只经过已开格 8 向连通走过去("已探明区"含已引爆雷格——走过的雷可以穿行站立);移动免费、不经账本、不发事件;只读查询 compute_move_path 返回同一条寻路路径(固定 8 邻行主序,确定性),既是合法性判定载体、也是呈现层路径预览的数据源。
- (规则 8)旗是棋盘状态的一部分:插上的旗跨轮保留、随图存续,换图/刷新/战斗结束随之消失;没有"口袋旗"库存、数量无上限、只能插在未开格上;轮次结束时 A2 对当时在场的每面旗报一条判定——旗下是雷判中、不是雷判空,雾里的旗恒判空(雾区无雷,判定零特判);旗留在雷上就每轮诚实重复报判中,去重是结算侧的事,A2 只报事实;插拔旗本身不发事件,界面反馈走调用返回值。
- (规则 11)挖开雷格报一条 kind=mine 开格事件,轮次不结束、格子算已开——从此可以通行:小人能站上去、能穿过它继续挖;雷格不计清图进度、不能再挖、不能再插旗;同一轮可连续挖开多颗雷,每颗都是独立事实;雷格通行是有价捷径:挖已知雷 = 花 1 AP + 给敌方送优势,是玩家主动抄近路的权衡与降级板上的兜底通路,不是免费通道。
- (规则 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 |
规则:
- (规则 9)一帧多个指令全部经批次入口 settle_batch 提交——A2 唯一结算入口,单意图批等价于逐个调便捷接口;批次是整体事务:先按固定类别顺序重排(能清图的挖最优先、停手次之、其余殿后,同类内按提交顺序),再逐个执行,轮次结束条件第一次成立处定出胜者,其后意图全部 voided——零棋盘效果、零扣费、零事件;voided 不等于被拒绝——拒绝是"本来就不合法",voided 是"来不及了";停手指令经批次入口转交资源系统,停手轮的结束事件仍由资源系统直发。
- (规则 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 最小闭环
- A1 产板 →
install_board受理:持有生成期快照 + 校验四不变式(违例 fail-fast)。 - 初始展开 R₀ 免费翻开(cell_revealed ×|R₀|,channel=initial,规范序),小人落位 B3 中心格。
- 玩家意图经 D1 →
settle_batch(A2 唯一结算入口)。 - dig:棋盘面判定 → A3
try_spend→ 开格 + 连锁(cell_revealed ×(1+chain_size)),A2 上报request_dig(chain_size, clears_map)。 - flag/move:旗入棋盘(1 AP)/ 免费瞬移——零事件,反馈经调用返回值命令式驱动。
- 批次内轮次结束首次成立 → 定胜者,其后意图 voided(零效果、零扣费、零事件)。
- 收轮:
flag_judged ×N先于round_end——棋盘路径 A2 读last_round_end组包外发,stopped 路径 A3 直发。 - 三事件流被 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 |