Files
gplan-2/design/gdd/analysis/d1-hud-framework.md
T
2026-09-14 18:18:49 +08:00

225 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 迁移行) |