Files
brainwave/docs/failure-memory.md
T

72 lines
4.7 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.
# 失败记忆与防回归台账
> 状态:初始风险基线;实现和运营过程中持续追加
> 用途:把容易重复的错误转化为持久约束和机械反馈
## 1. 已知高风险模式
| ID | 失败模式 | 常见症状 | 持久护栏 | 验证 |
|---|---|---|---|---|
| FM-001 | 六爻顺序被反转 | 已知输入显示成另一卦;初爻画在顶部 | 领域统一 bottom-up,仅展示适配层反转 | 已知夹具 + 4,096 组合测试 + UI 语义测试 |
| FM-002 | 6/7/8/9 映射错误 | 6/9 未变或 7/8 被标成动爻 | `LineValue` 封闭枚举,禁止散落 `% 2`/magic number | 8 种币面与映射参数化测试 |
| FM-003 | 用二进制序号冒充文王卦序 | 阴阳形正确但卦号/卦名错误 | 经审核的完整模式映射表 | 64 模式唯一性与已知卦测试 |
| FM-004 | UI top-down 数据回流领域层 | 保存后再打开结果颠倒 | DTO 字段名强制 `BottomUp`,序列化往返测试 | Room/DTO round-trip |
| FM-005 | AI 参与或改写起卦 | AI 前后卦号变化;网络失败无结果 | `CastEngine` 纯 Kotlin;解释状态与结果分离;依赖检查 | 请求前后不可变测试、离线 E2E |
| FM-006 | 用户未点击就发起 AI 请求 | 进入结果页即出现网络流量 | 显式调用门与同意状态机 | fake server 调用次数为 0 |
| FM-007 | 生产密钥进入 APK | BuildConfig/strings/NDK 中出现 key | 后端代理、secret scan、APK 检查 | CI secret scan + release artifact scan |
| FM-008 | 敏感问题进入日志 | crash/HTTP 日志出现原文 | 结构化脱敏错误码;发布关闭 body logger | 日志捕获测试与人工抓取 |
| FM-009 | 内容缺失时数组错位 | 第 N 卦显示第 N+1 卦文本 | 以显式卦号查表;启动/构建期 schema 校验 | 缺失/重复条目负向测试 |
| FM-010 | 使用未授权现代译文 | 上架投诉或无法说明来源 | 每段 `sourceRefs` + 许可证清单 + 发布签核 | 内容校验 + 人工版权审核 |
| FM-011 | “国风”装饰损害可用性 | 低对比水墨、毛笔正文、小铜币按钮 | 语义令牌、48dp、对比度和反模式清单 | accessibility test + 真机评审 |
| FM-012 | 动爻只用朱砂色表示 | 色觉用户/读屏无法识别 | 颜色 + 形状/符号 + 文本 | TalkBack 和去色检查 |
| FM-013 | 旋转或进程重建重复提交 | 丢轮次、重复 AI 扣费 | SavedState、idempotency key、显式请求状态 | 重建/并发/取消测试 |
| FM-014 | AI 输出被当 HTML/命令执行 | 恶意链接、样式或脚本进入 UI | 结构化纯文本 schema、长度和字符校验 | 对抗性响应测试 |
| FM-015 | 高风险问题得到命令式答案 | 模型要求买卖、停药、立即分手 | 服务端安全提示、测试集、本地降级 | 高风险金丝雀用例 |
| FM-016 | 为通过测试关闭门禁 | ignored test、宽泛 catch、destructive migration | DoD 与评审规则,失败必须归因 | CI 检查 skipped tests/配置差异 |
| FM-017 | 文档与实现漂移 | 代理按旧命令/旧结构工作 | 文档状态、链接检查、行为变更同提交 | CI docs check + 里程碑熵清理 |
| FM-018 | 将实时 AI 当唯一测试 oracle | 测试不稳定、成本和输出漂移 | fake server + 固定 schema fixtures | JVM/integration tests 无外网依赖 |
## 2. 故障登记模板
可复现且有再次发生价值的故障追加如下记录:
```markdown
## INCIDENT-YYYYMMDD-NN:短标题
- 发现日期:
- 影响需求:
- 环境/版本:
- 用户症状:
- 最小复现:
- 根因:
- 为什么旧护栏没捕获:
- 修复:
- 新增测试/静态规则:
- 相关提交或 issue:
- 后续观察:
```
不要记录密钥、真实用户问题或完整 AI 回复;使用脱敏夹具。
## 3. 提升规则
- 同类问题第一次出现:修复并加回归测试。
- 第二次出现:在本文件登记,并优先增加 lint、架构测试、schema 或聚合验证。
- 影响领域确定性、隐私、密钥、内容授权或高风险 AI 的问题:第一次即登记并加入发布门禁。
- 只写“以后注意”不算护栏;必须指出由什么测试、脚本、类型或评审入口阻止复发。
## 4. 定期审计问题
每个里程碑检查:
1. 是否出现新的裸数字 2/3/6/7/8/9 业务逻辑?
2. 是否有非 `CastEngine` 代码重新推导卦象?
3. 是否有新增网络路径在用户同意前发送内容?
4. 是否有日志或测试夹具包含类似真实问题的文本?
5. 是否有卦辞、字体、图片缺少来源?
6. 是否有页面绕过主题令牌或无障碍语义?
7. 是否有依赖方向、测试命令或文档链接已经过期?
8. 是否有多次出现但仍只靠人工评审发现的问题?
审计输出应形成小型、可评审的修复任务,而不是一次大规模无边界重写。