Skip to content

Latest commit

 

History

History
544 lines (400 loc) · 19.8 KB

File metadata and controls

544 lines (400 loc) · 19.8 KB

Mega2 改进计划 — 通用治理与组织规范

本文档定义所有改进计划文档的统一组织方式、共同约束、治理规则和执行标准,是 docs/ 目录下所有专项改进计划的基础框架。

文档组织体系概述

文档分层结构

docs/
├── general.md               ← 本文档:统一治理规范、共同约束
├── README.md                ← 总索引与全景执行计划
├── integration.md           ← 集成测试:端到端验证框架
├── [模块改进计划文档]
│   ├── contract.md          ← Contract 边界归并
│   ├── config.md            ← Config 模块拆分与 SecretRef
│   ├── vault.md             ← Vault 安全加固与凭据迁移
│   ├── mail.md              ← Mail 模块(已废止;见 website-mail.md)
│   ├── notification.md       ← Notification 多渠道系统
│   ├── website-auth.md      ← Website Better Auth 会话接入
│   ├── website-mail.md      ← 产品邮件投递(website)
│   ├── orbit.md             ← Orbit 依赖重构(项目引用 → API 依赖)
│   ├── trunk-push.md        ← Trunk 直推形态与 Monorepo 写入序列化
│   └── libra.md             ← Libra 协作、Agent 变更证据与主干把关
└── [文档范围外]
    └── protocol.md

补充登记(2026-09-06):libra.md 为 Agent 变更证据与 Libra 协作专项需求, 阶段 0–5 分别为契约、可信接收、任务与修订、主干把关、团队历史/运维、可选接入。 它复用 trunk-push.md 的根写入路径,验收场景在 integration.md 登记;执行依赖与优先级见 README 的 5b 条目。 当前为用户明确要求的文档编写与 review,不执行本文「执行时的共同需求」中的代码实现/版本发布步骤。

文档角色定义

文档 角色 职责
general.md 基础框架 定义所有文档的共同规则、约束、治理标准
README.md 总体协调 整体执行计划、依赖关系、优先级、里程碑
integration.md 验证框架 端到端测试场景、Docker 环境、验收标准
contract.md 边界归并 API/Git/Vault/Policy 模块路径和边界约束
config.md / vault.md / mail.md / notification.md 专项规划 各模块的现状分析、阶段规划、实施细节
orbit.md 依赖治理 把对 orbit 实现 crate 的 path 引用重构为只依赖 orbit-api 契约
trunk-push.md 写入路径与部署形态 Monorepo 根树写入的序列化;push_policy 形态开关(review / trunk);产品规则以 ../monorepo.md 为准
libra.md Agent 变更证据 Libra 摄取、任务/CL 修订、证据授权、精确版本验证与 landing;共用 trunk-push 写入边界

所有文档的共同结构规范

必须包含的部分

每个改进计划文档都应遵循以下统一结构,确保信息完整性和查询可索引性:

1. 开头标题与描述(必需)

# 模块名 实现方案分析

本文档记录 `mega2`[模块][主题描述]> **关键依赖**:与其他文档的强绑定说明和集成测试指引

要求

  • 一句话总结文档主题
  • 明确列出与其他文档的依赖关系
  • 指明相关的集成测试场景

2. 事实校准部分(必需)

## 事实校准(日期)

> 本文档中的代码引用已对照当前 `src/` 重新核对...
> 需特别注意以下与早期版本不一致的事实:

1. **事实点 1**[具体描述]
2. **事实点 2**[具体描述]
3. **事实点 3**[具体描述]

要求

  • 更新日期必须是当前日期(格式:YYYY-MM-DD)
  • 核实所有代码引用(文件路径、行号、函数名)
  • 列出与文档原始版本的不符之处
  • 标注修正后的正确信息

3. 现状速览表(必需)

## 当前实现状态速览表

| 能力 / 组件 | 实现状态 | 关键事实与风险 |
|-----------|--------|-------------|
| 组件 A | 已实现 / 已激活 / 部分完成 / 仅草案 / 未实现 | [具体说明] |

要求

  • 覆盖所有主要功能组件
  • 实现状态必须从固定列表中选择(已实现、已激活、部分完成、仅草案、未实现)
  • 关键事实字段必须包含代码位置或工程现状

4. 硬约束部分(必需)

## 硬约束与不可违反的原则

本文档中以下约束是硬边界,任何实现偏离都必须重新评审:

1. **约束 1**[具体约束内容和理由]
2. **约束 2**[具体约束内容和理由]

要求

  • 每个约束必须明确说明"为什么不能违反"
  • 约束应来自系统架构、安全需求或循环依赖
  • 任何规划偏离都必须在评审时显式讨论

5. 现状 vs 目标对比(必需)

## 现状与目标对比

| 维度 | 当前状态 | 目标状态 | 实现难度 |
|-----|--------|--------|--------|
| 组件化 | 单文件 `common/config.rs` | 一级模块 `src/config/` | 中等 |

要求

  • 清晰对比"现在是什么"和"要变成什么"
  • 难度等级:简单 / 中等 / 复杂
  • 帮助团队理解改进范围

6. 分阶段实施计划(必需)

## 迁移步骤(分阶段)

**阶段 0 — 名称与描述**

1. 具体步骤 1
2. 具体步骤 2
3. 具体步骤 3

> **验收标准**
> - ✅ 条件 1
> - ✅ 条件 2

要求

  • 每个阶段必须有清晰的步骤列表
  • 验收标准必须是可测试的、具体的、量化的
  • 不包含时间估计(天数、周数)
  • 不包含人员分配或团队划分

7. 前置依赖矩阵(必需)

## 前置依赖矩阵

本文档与其他文档的依赖关系如下:

| 本文档的工作 | 对其他文档的依赖 | 类型 | 关键同步点 |
|-----------|-------------|-----|---------|

要求

  • 清晰列出本文档的各项工作依赖谁
  • 依赖类型:前置 / 协同 / 后置 / 可选
  • 必须标出"关键同步点"(可能相互阻塞的地方)

8. 风险与约束(必需)

## 风险与约束

- **风险 1**[风险描述]
  - 影响:[影响范围]
  - 缓解措施:[如何降低风险]
  
- **约束 1**[约束说明]
  - 理由:[为什么存在这个约束]
  - 影响:[违反时的后果]

要求

  • 风险和约束必须清晰分开
  • 每个风险都必须列出"影响"和"缓解措施"
  • 约束必须说明违反的后果

9. 多维评估表(必需)

## 改进方案多维评估小结

| 维度 | 评估结论 |
|-----|--------|
| **合理性** | **高(9/10)**[原因阐述] |
| **可行性** | **中高(7.5/10)**[原因阐述] |
| **完整性** | **中(7/10)**[原因阐述] |

要求

  • 维度建议:合理性、可行性、完整性、安全性、功能正确性、可靠性、兼容性、可扩展性、合规性
  • 每个维度的评分必须是数字(x/10)加文字说明
  • 说明必须包含"当前不足"和"改进方向"

10. 小结与预期收益(必需)

## 小结

简明概括本改进计划的核心内容和价值。

## 预期收益

- [收益点 1]
- [收益点 2]
- [收益点 3]

要求

  • 小结用 3-5 句话总结全文核心
  • 预期收益必须是可观测的、可验证的

所有文档的禁止事项

文档中严格禁止以下内容:

  1. ❌ 时间估计

    • 禁止:工作量:M(约 3-5 天)完成期:1 周
    • 允许:依赖 X 先完成与 Y 协同
  2. ❌ 人员分配或团队划分

    • 禁止:由 A 团队负责需 5 人投入
    • 允许:config + vault 团队协同
  3. ❌ 具体的发布日期或里程碑日期

    • 禁止:计划 Q3 2026 完成
    • 允许:在阶段 5 完成前完成
  4. ❌ 假设或未验证的代码引用

    • 禁止:大概在 config.rs:300可能的文件位置
    • 允许:config.rs:385(已核对)当前代码版本未包含此功能
  5. ❌ 个人观点或非共识观点

    • 禁止:我认为应该...为了看起来更专业
    • 允许:基于分析,建议...架构考量...
  6. ❌ 孤立决策

    • 禁止:无视其他文档的决策而自行定义架构
    • 允许:与 config.md 保持一致遵循 vault.md 的约束

跨文档协调的共同规则

1. 强绑定与协同的明确声明

所有相互依赖的文档必须在两个文档中都明确声明这种关系:

示例

  • config.md 中应声明:vault B 的 bootstrap 拆分必须在 config 3 前或同期完成
  • vault.md 中应声明:config 3 直接依赖本阶段的改造结果

检查清单

  • ✅ 文档 A 提及依赖文档 B
  • ✅ 文档 B 也明确提及文档 A 的依赖
  • ✅ 两个文档的表述语义一致(不能相互矛盾)
  • ✅ 依赖箭头清晰(A → B 还是 B → A)

2. 循环依赖的检测与避免

不允许的循环依赖

  • A 需要 B 完成,B 需要 A 完成 ❌

允许的模式

  • A 的某个阶段需要 B,B 的某个阶段需要 A ✅
  • A 和 B 同期协同完成(LoadMode 框架) ✅
  • A 是 B 的前置,B 是 C 的前置(串行) ✅

检查方法: 在 README.md 的依赖图中,确保没有闭环。如果发现循环,立即调整各文档的阶段划分。

3. 共同前置的统一管理

日志脱敏工具CLI LoadMode 框架 等共同前置,必须在所有依赖它们的文档中都明确声明:

本阶段依赖:
1. **脱敏工具**(来自 config.md 阶段 0b)— [用途说明]
2. **CLI LoadMode**(config + vault 协同)— [用途说明]

4. 设计约束的一致性

如果多个文档涉及同一个架构层面的约束(如"Config → Storage(DB) → Vault"的循环),所有文档必须用完全相同的表述描述这个约束。

示例

  • config.md 说:Config(synchronous) → Storage(DB + object storage) → VaultCore
  • vault.md 应该用同一个表述,而不是改成其他说法

执行时的共同需求

1. 代码实现前必须完成的准备

启动任何阶段的代码实现之前,文档必须满足:

  • ✅ 事实校准已完成(代码引用已核对)
  • ✅ 前置依赖已明确列出
  • ✅ 与其他文档的协同点已沟通
  • ✅ 硬约束已识别并得到认可
  • ✅ 集成测试场景已定义(如适用)

2. 每个阶段必须独立可构建与可回归

每个阶段完成后必须满足以下验收标准:

  • cargo +nightly fmt --all --check — 无格式差异(使用 nightly 工具链)
  • cargo clippy --all-targets --all-features -- -D warnings — 无警告
  • source .env.test && cargo test 指定测试用例 — 所有指定的测试用例全部通过

说明

  • 不能使用稳定版 fmt,必须使用 +nightly 来确保统一的格式标准
  • Clippy 必须以"错误"级别处理警告,不允许存在任何警告
  • 测试必须运行特定相关的测试用例而不是全量测试,可使用 cargo test 模块名:: 指定范围
  • 任何阶段的工作不能破坏现有的构建或测试
  • 如果新增的测试在该阶段不完整,应使用 #[ignore] 标记

PRmerge 前的终极检查

  • ✅ 本地 cargo build --all 通过
  • ✅ 本地上述三项验收标准通过
  • ✅ CI/CD 管道验收标准通过

3. 文档与代码的同步更新

必须在同一个 PR 中完成

  • 代码变更
  • 对应文档的同步更新(包括行号更新)
  • 对应的单元测试或加载测试
  • 版本号递增:更新 Cargo.toml 中的 version 字段,patch 版本号加 1
    • 例:当前 version = "0.17.500",改为 version = "0.17.501"
    • 版本号更新应在该阶段的代码变更中进行
    • 每个 PR 合并时对应一次版本号递增

禁止

  • 只更新代码不更新文档
  • 只更新文档不更新代码
  • 延迟更新相关文档
  • PR 合并时不递增版本号
  • 在一个 PR 中跳过版本号更新

4. 评审时的共同检查清单

所有阶段的 PR 评审都必须检查:

  • ✅ 本 PR 是否改变了任何硬约束或前置依赖
  • ✅ 如果改变了,是否同步更新了所有相关文档
  • ✅ 代码引用(如有)是否正确
  • ✅ 是否引入了新的循环依赖
  • ✅ 相关的集成测试是否也被更新

5. 事实校准的定期维护

每次代码重大变更后(如大量行号变化、模块重组、API 改变):

  • 相关文档必须在 2 周内完成事实校准
  • 事实校准必须包含日期和核对范围
  • 任何行号偏移超过 10 行的部分都应被标出

风险管理框架

共同风险清单

所有改进计划都可能面临的风险:

风险 可能性 影响 缓解措施
代码与文档脱节 执行混乱、改进失效 同步更新、评审检查清单
跨模块协同不力 集成时发现冲突 前置依赖矩阵、集成测试
前置条件遗漏 工作无法启动 必须先完成清单、沟通机制
文档过期或错误 决策基于假信息 事实校准制度、评审制度
范围蠕动 无限期延期 硬约束、阶段边界清晰
安全假设不成立 生产环境风险 fail-closed、集成测试

决策准则

面对改进计划的关键决策时(如更改某个阶段的范围、推迟某个前置、调整优先级):

必须同时满足

  1. 与会者包含受影响模块的 owner
  2. 决策内容同步更新到 README.md 和相关文档
  3. 更新后的文档在评审前向团队预公示
  4. 预公示期不少于 2 个工作日,供团队反馈

文档版本与变更管理

版本标识方式

每个改进计划文档的版本通过以下方式标识:

## 事实校准(2026-06-14)

> 本文档中的代码引用已对照当前 `src/` 重新核对...
  • 日期代表该次校准或重大更新的日期
  • 日期遵循 ISO 8601 格式(YYYY-MM-DD)

什么时候需要更新版本日期

  • ✅ 添加或修改代码引用时
  • ✅ 改变现状描述(如模块状态从"未实现"变为"已激活")
  • ✅ 改变硬约束或前置依赖时
  • ✅ 修复事实错误时
  • ❌ 只做格式调整或文案改进时(无需更新日期)

更新时必须做的工作

  1. 更新文档顶部的校准日期
  2. 在事实校准部分补充或更新内容
  3. 更新所有代码行号引用
  4. 如果改变了与其他文档的关系,同步更新相关文档

团队协作与沟通规范

信息流与决策流

改进方案讨论
  ↓
文档初稿或更新
  ↓
内部评审(检查清单)
  ↓
团队预公示(2 工作日)
  ↓
合并到 main

涉及多个模块的决策流程

当一个决策同时影响 config、vault、mail、notification 时:

  1. 问题提出:在任何一个文档中提出
  2. 跨文档讨论:在 README.md 或专项会议中讨论
  3. 对齐表述:确保所有受影响文档用一致的语言描述决策
  4. 同步合并:同一个 PR 中更新所有相关文档

异步反馈机制

对于非紧急的文档更新(如错别字修复、重新表述),采用异步评审:

  • PR 开启后,设置 3 个工作日的反馈期
  • 无反馈则自动合并
  • 有异议可在反馈期内提出,延长讨论

验收与评审标准

文档评审清单

所有文档的 PR 必须满足:

格式与结构

  • ✅ 包含所有必需部分(事实校准、现状表、硬约束、前置依赖矩阵等)
  • ✅ 代码引用格式统一:文件:行号
  • ✅ 不包含禁止内容(时间估计、人员分配等)
  • ✅ 标题和部分编号清晰

内容质量

  • ✅ 事实校准有日期且内容完整
  • ✅ 硬约束明确说明"为什么不能违反"
  • ✅ 前置依赖矩阵与实际工作流一致
  • ✅ 阶段步骤具体、验收标准可测试

跨文档一致性

  • ✅ 与其他文档的依赖关系表述一致
  • ✅ 共同约束的表述相同
  • ✅ 如有改变前置依赖或硬约束,相关文档已同步更新
  • ✅ README.md 中的优先级顺序与各文档一致

与集成测试的对应

  • ✅ 关键功能都有对应的集成测试场景
  • ✅ 集成测试场景在 integration.md 中有明确定义

代码评审时的文档检查

每个代码 PR 的评审都必须包括:

  • ✅ 代码改动是否与对应的文档阶段一致
  • ✅ 文档中的行号引用是否需要更新
  • ✅ 是否需要更新事实校准日期
  • ✅ 是否引入了对文档的前提假设的改变

扩展与维护

添加新模块的文档时

如果后续需要为新模块添加改进计划文档(如 storage.mdauth.md),必须:

  1. 参照本文档的结构和规范创建新文档
  2. 在 general.md 中添加该模块的引用
  3. 在 README.md 的文档总览中添加该模块
  4. 明确该模块与现有文档的依赖关系
  5. 更新 README.md 的优先级和执行顺序

文档的废弃与归档

如果某个改进计划不再适用(如模块被重构或删除):

  1. 在文档顶部添加标记:[ARCHIVED 日期] 原因说明
  2. 保留文档以供历史查证
  3. 从 README.md 的活跃文档中移除
  4. 更新相关文档中的交叉引用

附录:术语与定义

关键术语

  • 硬约束:因为架构或安全原因而不可以违反的限制
  • 前置依赖:某项工作必须在另一项工作完成后才能开始
  • 协同:两项工作应该在同一时间段内共同进行
  • 可迁移凭据:可以从配置文件中转移到 Vault 的敏感数据
  • 可诊断错误:包含足够信息让用户自行修复的错误消息
  • fail-closed:在错误或缺少条件时停止运行,而不是继续执行
  • 事实校准:核对文档中的代码引用和现状描述是否与实际代码一致
  • 集成测试:验证多个模块或系统的相互作用是否正常工作

阶段编号约定

  • config.md:0a, 0b, 1, 2, 3, 4, 5, 6, 7, 8(共 10 个阶段,其中 0a 和 0b 合并为"阶段 0")
  • vault.md:A, B, C, D, E, F, G, H, I, J(共 10 个阶段)
  • mail.md:0, 1, 2, 3, 4, 5(共 6 个阶段,其中 0 和 1 已完成)
  • notification.md:0, 1, 2, 3, 4, 5(共 6 个阶段)
  • orbit.md:0, 1, 2, 3(共 4 个阶段,其中阶段 3 为决策门)
  • trunk-push.md:1, 2, 3, 4, 5, 6(共 6 个阶段,其中阶段 1-3 为独立可验收的缺陷修复——生产部署以阶段 2 为前置;阶段 6 为可选优化)
  • libra.md:0, 1, 2, 3, 4, 5(契约、可信接收、任务与修订、主干把关、团队历史与运维、可选接入;阶段 3 依赖 trunk-push 1–3)

优先级定义

  • P0:必须先做,阻塞其他工作,独立或与少数文档协同
  • P1:高优先级,在 P0 后紧随进行
  • P2:中优先级,第一批功能完整时必须包含
  • P3:后续优化,可与其他高优先级并行
  • P4:长期或可选,不阻塞关键路径

最后一次更新

  • 日期:2026-09-06(历史:2026-06-14 首版;2026-06-19 增补 orbit.md 登记)
  • 本次更新:登记 libra.md 的分层结构、文档角色、阶段编号及专项执行索引;用户要求的本次交付仅为文档与 review。
  • 内容:首版发布,定义所有改进文档的共同治理规范;2026-06-19 新增 orbit.md(orbit 依赖重构);2026-09-04 新增 trunk-push.md(Trunk 直推形态与 Monorepo 写入序列化),均已登记到分层结构、角色定义与阶段编号约定
  • 适用文档:README.md、config.md、vault.md、mail.md、notification.md、integration.md、orbit.md、trunk-push.md、libra.md

本文档是所有改进计划的基础框架。在执行改进时,遇到任何"这个应该怎么做"的问题,应首先查阅本文档。如果本文档未覆盖,应提出到团队讨论,再补充到本文档中,确保后续改进遵循相同的规则。