Files
nexus/Project/fonrey/ADR.md
2026-04-30 20:33:51 +08:00

206 lines
8.9 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.
# Fonrey ADR 动态决策记录Architecture & Requirement Decision Records
> 目的:沉淀 Vibe Coding 过程中的**技术决策**与**需求决策**,避免跨会话后方案漂移。
> 适用范围全项目TECH_STACK / DATA_MODEL / PRD / TEST_CASES / 开发流程)。
> 维护原则:新增决策只追加,不覆盖历史;若决策被替代,必须新增 supersede 记录。
---
## 变更历史
| 日期 | 变更人 | 变更内容 |
|---|---|---|
| 2026-04-30 | Atlas | 初始化 ADR 动态决策记录;补录当日关键技术与需求决策 |
## 一、记录规范(必须遵守)
### 1.1 决策ID规则
- 格式:`ADR-YYYYMMDD-XXX`
- 例:`ADR-20260430-001`
### 1.2 决策类型
- `TECH`:技术决策(架构、接口、数据、测试、流程规范)
- `REQ`:需求决策(范围、术语、优先级、验收口径)
### 1.3 状态枚举
- `accepted`:已生效
- `superseded`:已被替代(需指向新 ADR
- `deprecated`:废弃(不再执行)
### 1.4 最小字段
每条 ADR 必须包含:
1. 决策ID
2. 日期
3. 模块
4. 类型TECH/REQ
5. 状态
6. 背景
7. 决策内容
8. 影响范围
9. 关联文档
10. 备注(可选)
---
## 二、按日期记录(主索引)
## 2026-04-30
### ADR-20260430-001
- **类型**REQ
- **模块**:测试治理(全局)
- **状态**accepted
- **背景**:测试文档与沟通中存在“业务旅程/测试用例”术语混用,易导致执行偏差。
- **决策**:全项目统一使用“测试用例”术语,不再以“业务旅程”作为执行口径。
- **影响范围**`TECH_STACK/测试规范.md``TEST_CASES/*`
- **关联文档**`TECH_STACK/测试规范.md`
### ADR-20260430-002
- **类型**TECH
- **模块**:测试治理(全局)
- **状态**accepted
- **背景**:多模块并行时测试编号易重复、不可追溯。
- **决策**:采用全局唯一测试用例编号:`TC-FON-XXXXXX`,并建立注册表,禁止复用废弃编号。
- **影响范围**:所有测试用例文档与测试报告系统
- **关联文档**
- `TEST_CASES/TEST_CASE_ID_SPEC.md`
- `TEST_CASES/TEST_CASE_REGISTRY.md`
### ADR-20260430-003
- **类型**TECH
- **模块**:测试执行与报告
- **状态**accepted
- **背景**:失败定位粒度不足,无法快速定位到具体步骤。
- **决策**:测试报告必须支持 `test_case_id + step_id` 级追踪,并记录 `expected/actual/error_message` 与证据路径。
- **影响范围**CI 报告、自动化测试框架
- **关联文档**`TECH_STACK/测试规范.md`
### ADR-20260430-004
- **类型**REQ
- **模块**:登录管理
- **状态**accepted
- **背景**:登录 PRD v2.0 与技术方案存在接口命名漂移。
- **决策**:登录模块接口路径以 PRD v2.0 为唯一权威,技术方案与测试用例全部对齐 PRD 路径。
- **影响范围**:登录模块 API 设计、自动化测试调用路径
- **关联文档**
- `PRD/登录管理/用户登录管理模块PRD.md`
- `TECH_STACK/登录管理技术方案.md`
- `TEST_CASES/TEST_CASES_LOGIN_MODULE.md`
### ADR-20260430-005
- **类型**REQ
- **模块**:登录管理
- **状态**accepted
- **背景**Story 边界存在历史遗留混淆。
- **决策**:登录模块范围冻结为:短信验证码登录为 MVP 正式能力;“找回用户名”废弃;微信扫码保留为预留。
- **影响范围**:实现范围、测试覆盖边界
- **关联文档**
- `PRD/登录管理/用户登录管理模块PRD.md`
- `TECH_STACK/登录管理技术方案.md`
### ADR-20260430-006
- **类型**TECH
- **模块**:客户端发布管理
- **状态**accepted
- **背景**:发布模块缺少可执行技术方案,无法指导实现与测试。
- **决策**:新增独立技术方案文档,明确 Electron 壳层边界、EV 签名、Heartbeat、自动更新、完整性校验、R2 版本管理、官网分发、便携版策略。
- **影响范围**`apps/release` 设计与落地
- **关联文档**
- `TECH_STACK/客户端发布管理技术方案.md`
- `PRD/发布管理/客户端发布管理模块PRD.md`
### ADR-20260430-007
- **类型**TECH
- **模块**:客户端发布管理 / 数据模型
- **状态**accepted
- **背景**:统计口径需支撑跨租户版本分布与活跃安装数。
- **决策**:以 `public.client_heartbeats` 作为心跳事实表,使用 `(tenant_id, device_id)` 为 Upsert 锚点,活跃定义为最近 24h。
- **影响范围**:统计接口、看板与聚合查询
- **关联文档**`DATA_MODEL/DATA_MODEL_PUBLIC.md`
### ADR-20260430-008
- **类型**TECH
- **模块**:客户端发布管理 / 安全
- **状态**accepted
- **背景**:下载链路存在篡改与损坏风险。
- **决策**:客户端更新包必须进行 SHA256 完整性校验,校验失败禁止安装并保留当前版本可用。
- **影响范围**:客户端更新器、发布接口响应字段
- **关联文档**
- `TECH_STACK/客户端发布管理技术方案.md`
- `PRD/发布管理/客户端发布管理模块PRD.md`
### ADR-20260430-009
- **类型**TECH
- **模块**:客户端发布管理 / API
- **状态**accepted
- **背景**:历史文档存在 `/api/client/updates/*``/api/release/updates/*` 双口径。
- **决策**:发布模块统一采用 `/api/release/...` 命名空间。
- **影响范围**:服务端路由、客户端调用、测试用例
- **关联文档**
- `PRD/发布管理/客户端发布管理模块PRD.md`
- `TECH_STACK/TECH_STACK.md`
- `TECH_STACK/客户端发布管理技术方案.md`
### ADR-20260430-010
- **类型**TECH
- **模块**:文档治理(全局)
- **状态**accepted
- **背景**:多目录文档缺少统一变更追溯入口。
- **决策**`TECH_STACK / DATA_MODEL / TEST_CASES` 下文档统一添加“变更历史”章节,并规范位置:**头部元信息之后、正文主章节(## 一/## 1之前**。
- **影响范围**:全量技术文档与测试文档
- **关联文档**
- `TECH_STACK/*.md`
- `DATA_MODEL/*.md`
- `TEST_CASES/*.md`
---
## 三、按模块分类记录(视图索引)
## 3.1 测试治理(全局)
- `ADR-20260430-001`术语统一为“测试用例”REQ
- `ADR-20260430-002`全局唯一测试编号机制TECH
- `ADR-20260430-003`:报告粒度到 step_idTECH
## 3.2 登录管理
- `ADR-20260430-004`:接口路径以 PRD 为准REQ
- `ADR-20260430-005`MVP 范围冻结REQ
## 3.3 客户端发布管理
- `ADR-20260430-006`新增独立技术方案TECH
- `ADR-20260430-008`SHA256 完整性校验强制TECH
- `ADR-20260430-009`API 命名空间统一 `/api/release/...`TECH
## 3.4 数据模型public schema
- `ADR-20260430-007``client_heartbeats` Upsert + 24h 活跃口径TECH
## 3.5 文档治理(全局)
- `ADR-20260430-010`变更历史章节统一规则TECH
---
## 四、历史记录Append-Only Log
> 说明:本节为机器可检索的历史流水,不删改旧记录。
| ADR ID | 日期 | 模块 | 类型 | 状态 | 摘要 | 关联 |
|---|---|---|---|---|---|---|
| ADR-20260430-001 | 2026-04-30 | 测试治理 | REQ | accepted | 术语统一为“测试用例” | `TECH_STACK/测试规范.md` |
| ADR-20260430-002 | 2026-04-30 | 测试治理 | TECH | accepted | 测试编号全局唯一 `TC-FON-XXXXXX` | `TEST_CASES/TEST_CASE_ID_SPEC.md` |
| ADR-20260430-003 | 2026-04-30 | 测试执行 | TECH | accepted | 报告必须定位到 `test_case_id+step_id` | `TECH_STACK/测试规范.md` |
| ADR-20260430-004 | 2026-04-30 | 登录管理 | REQ | accepted | 登录接口路径全部按 PRD v2.0 | `TECH_STACK/登录管理技术方案.md` |
| ADR-20260430-005 | 2026-04-30 | 登录管理 | REQ | accepted | 登录模块范围冻结(含废弃/预留) | `PRD/登录管理/用户登录管理模块PRD.md` |
| ADR-20260430-006 | 2026-04-30 | 客户端发布 | TECH | accepted | 新建独立技术方案文档 | `TECH_STACK/客户端发布管理技术方案.md` |
| ADR-20260430-007 | 2026-04-30 | 数据模型 | TECH | accepted | `client_heartbeats` Upsert + 24h 活跃 | `DATA_MODEL/DATA_MODEL_PUBLIC.md` |
| ADR-20260430-008 | 2026-04-30 | 客户端发布安全 | TECH | accepted | SHA256 校验失败禁止安装 | `TECH_STACK/客户端发布管理技术方案.md` |
| ADR-20260430-009 | 2026-04-30 | 客户端发布 API | TECH | accepted | 统一 `/api/release/...` 路径 | `TECH_STACK/TECH_STACK.md` |
| ADR-20260430-010 | 2026-04-30 | 文档治理 | TECH | accepted | 变更历史章节位置统一规范 | `TECH_STACK/*.md` `DATA_MODEL/*.md` `TEST_CASES/*.md` |
---
## 五、后续维护约定
1. 每当接受新技术或需求决策,**当天必须新增 ADR 条目**。
2. 若新决策替代旧决策,在新 ADR 中写明 `supersedes: ADR-xxxx`,并将旧条目标记 `superseded`
3. PRD / TECH_STACK / DATA_MODEL / TEST_CASES 发生关键口径变化时,必须同步更新本文件。
4. 本文件是跨 Session 的决策权威输入之一,和 PRD 一起喂给 Agent。