- design 件只装结论:v2 骨架(设计目的/系统范围/核心循环/领域章节/依赖与输出/P0 闭环/P1·P2 后置/调参表/GWT 验收/版本历史),AC/EC/OQ/义务台账编号全部保留 - 新建 design/gdd/analysis/ 13 份推演件:候选取舍/公式推导/数值锚定论证/已裁决争议按问题节组织,文末附去向映射表(零丢失审计) - v1 原文备份于 design/gdd/legacy-2026-09-14-v1/(13 份) - systems-index 文档树补 analysis 目录导航行 - gdd_lint 全量 PASS(14 文件 0 不通过);迁移零裁决——19+1 项待拍板已登记各 analysis 开放问题区
45 KiB
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)直调(非 D2reload()路径:不过 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 行) |