context-infra 检查与复盘infra.guiming.net · 全内容自包含呈现 · 生成于 2026-07-21 16:28 UTC

bestpractice_architecture_doc_design

Z3 全文↑ Z2 条目

道-方法 · 道层 skill 全文

← 返回道层 skill 索引 · 返回方法论区

本页是 <code>rules/skills/drafts/bestpractice_architecture_doc_design.md</code> 的逐字投影(仅隐私清洗,零改写)。

时点提示:本页是仓内文件 rules/skills/drafts/bestpractice_architecture_doc_design.md 的逐字投影(仅做隐私清洗:仓库根绝对路径→相对路径、家目录→~/;除此零改写)。若源文件后续有修订,以仓内真源为准。

架构文档设计方法论

本文档记录了 NightCode 架构文档重设计的完整方法论,可复用于任何复杂系统的文档组织。

1. 背景

NightCode 是一个多模型 AI Agent 编排平台。在经历多次实现尝试失败后,发现核心问题在于文档散落、版本混乱、缺乏统一的实现计划。

文档散落现状

核心问题:没有一个"唯一真实来源",每次实现都要重新拼凑信息。

2. 设计过程

2.1 调研阶段

方法:并行多源调研 + 对比分析

同时调研 4 个信息源,重点找出信息之间的不匹配:

信息源提供什么发现的问题
V4.5 Architecture文档结构模板L0/L1/L2 编号混乱,Recovery 嵌套在 Orchestration 里
Kiro Specs权威系统描述最完整但未反映 Theme 3-10 的变更
Modification Plans最新设计决策分散在 Theme 3-10,缺乏整合
Source Code实际模块结构77+ hooks、11 agents、复杂的模块关系

关键发现

2.2 框架设计原则

经过讨论确定 4 条设计原则:

  1. Follow the data flow — 按请求流转顺序组织章节(入口 → 规划 → 执行 → 基础设施),而非按技术层级编号(L0/L1/L2)。读者沿着数据流自然理解系统。
  1. Agent-centric grouping — 将 Agent 按角色分为 3 类,各成一章:
  1. Three-tier progressive disclosure — 三层渐进式披露:
  1. "Where to look" as first-class — GUIDE.md 是核心导航文档,回答"我想做 X,应该从哪开始?"

2.3 交叉引用协议(核心创新)

问题:跨层概念(如 Process Documentation)同时涉及 5+ 个章节。如果每处都完整描述 → 重复,必然失去同步。如果只写一处 → 读者要跳 5 个文档才能理解。

解决方案 — 三层协议

层 1: Canonical Source(权威源)

每个概念有且仅有一个权威文档,所有实现细节、格式规范、状态机图都只在这一处完整描述。

在 INDEX.md 末尾维护"权威源映射表":

| 概念 | 权威文档 | 涉及章节 |
|------|---------|---------|
| Process Documentation | 06-infrastructure/process-doc-system.md | 02, 03, 04, 07 |
| Context Pressure States | 06-infrastructure/context-manager.md | 03, 04, 07 |

这张表本身就是"更新时去哪同步"的查找表。

层 2: Contract Block(契约块)

在非权威文档中,用标准化的契约块描述"本层对该概念的义务":

### → Process Documentation

**本层义务**: Working Agent 必须在任务结束前输出 `[PROCESS_SUMMARY]`,
包含 status、filesModified、decisions 三个必填字段。

**本层限制**: Worker 不得修改其他 Agent 的 Process Doc 文件。

**权威规范**: [Process Doc System](../06-infrastructure/process-doc-system.md#output-format)

关键规则

层 3: Dependency Header(依赖头)

每个 detail 文档在 YAML frontmatter 中声明依赖关系:

---
canonical-for:
  - process-doc-output-format    # 本文档是这些概念的权威源
depends-on:
  - 06-infrastructure/context-manager.md  # 本文档引用了这些权威源
touched-by:
  - 03-brain-layer/README.md     # 修改本文档时需检查的其他文档
---

2.4 更新协议(5-Phase + Git + 审查)

修改任何文档时的标准流程(UPDATE-SEQUENCE.md 定义了完整版):

Git Commit(如有未提交变更)
  ↓
Phase 1: 意图锚定 — 先更新 USER-REQUIREMENTS.md,固定"为什么改"
  ↓
Phase 2: 权威源修改 — 只改一个文件,记下 touched-by 列表
  ↓
Phase 3: 契约传播 — 更新 touched-by 中的契约块
  ↓
Phase 4: 结构同步 — 仅在文件增删时触发,更新 INDEX/README
  ↓
Phase 5: 变更记录 — CHANGELOG.md 追加语义记录
  ↓
Git Commit(必须)
  ↓
Phase 6: 文档审查 — spawn doc-validator,按 R1~R5 审查

核心原则:每个环节做完就立刻更新,不攒批;按依赖顺序执行,避免加载不需要的文件(防 context 污染)。

配套机制

2.5 用户需求文档(后续补充的核心环节)

在首次创建框架后,发现一个关键缺失:设计文档中没有记录用户的原始需求和裁定。这导致:

解决方案:在框架根目录添加 USER-REQUIREMENTS.md

这是整套方法论中最重要的补充——文档框架的权威性来自用户需求,不来自任何技术文档

2.6 设计变更记录(语义层面的版本控制)

Git commit 记录文件变更,但不记录设计意图的演进。例如一个 commit 可能修改了 3 个文件,但无法说明"为什么这个设计选择从 A 改成了 B"。

解决方案:在框架根目录添加 CHANGELOG.md

记录格式:

### YYYY-MM-DD — [变更摘要]
**触发来源**: [用户裁定 / 冲突分析 / 实现反馈 / 重构]
**涉及文档**:
- `路径/文件.md` — 具体做了什么修改
**设计意图**: 一句话说明为什么做这个变更

2.7 编写规范:叙述与代码分离

设计文档的核心目的是传达"是什么"和"为什么",而非"怎么写代码"。如果代码实现细节混在叙述中,会导致:

解决方案WRITING-STANDARDS.md 定义了文档结构规范:

  1. 文字叙述占文档前 80%:需求与本质(必须放最前)、设计、职责边界、行为描述,全部用自然语言
  2. 代码设计统一放在文档末尾(附录):只保留最关键的协议、接口、数据结构
  3. V1 版本声明:附录中的代码设计标注为"V1 草案,仅供参考",实际开发时应采取更缜密的方式
  4. 不放的内容:内部实现逻辑、工具函数、配置格式、测试用例
  5. 内容单一性:每个设计内容只在权威源完整描述,非权威文档通过契约块引用,零冗余

2.8 文档审查机制(LLM 驱动)

文档写完后,如何确保质量?人工审查不现实(文档数量多),脚本检查又无法做语义判断。

解决方案:用 LLM agent 自动审查,CHANGELOG 驱动确定审查范围:

3. 最终产出物

框架结构(10 个章节 + 7 个入口文件)

docs/architecture/
├── USER-REQUIREMENTS.md        # 用户需求文档(最高优先级)
├── CHANGELOG.md                # 设计变更记录(语义层版本控制)
├── UPDATE-SEQUENCE.md          # 更新次序规范(5-Phase 流程)
├── WRITING-STANDARDS.md        # 编写规范(叙述与代码分离)
├── VALIDATION-RULES.md         # 审查规则(R1~R5)+ 审查状态追踪
├── INDEX.md                    # 全局入口 + 权威源映射表
├── GUIDE.md                    # 操作指南 + 更新协议
├── 01-system-overview/         # 架构总览、设计原则、执行模式、数据流
├── 02-orchestrator/            # Sisyphus 入口 + 指挥
├── 03-brain-layer/             # 规划流水线
├── 04-working-agents/          # 执行层 + 共享协议
├── 05-advisory-agents/         # 信息收集层
├── 06-infrastructure/          # Hook、Signal、Context、ProcessDoc、Injector
├── 07-recovery/                # Tier 0-3 恢复
├── 08-monitoring/              # Health Monitor + Model Selector
├── 09-permissions/             # Permission Templates + Anti-hallucination
└── 10-cross-cutting/           # 信息重要度、并发模型、已知问题

与 V4.5 的关键区别

维度V4.5新框架
顶层组织按技术层 L0/L1/L2按数据流顺序
Agent 文档笼统分组每个 Agent 独立文档,按角色分 3 章
Recovery嵌在 Orchestration独立成章
Permission独立成章,包含反幻觉
Advisory散落各处独立成章
导航仅 READMEINDEX + GUIDE 双入口
交叉引用无协议权威源 + 契约块 + 依赖头

4. 可复用的设计方法(适用于任何复杂系统)

  1. 多源调研 + 对比分析 — 先广泛收集所有信息源,重点找出信息之间的不匹配
  2. 按数据流而非技术分层组织 — 读者沿着请求生命周期自然理解系统
  3. 渐进式披露 — INDEX → README → Detail,3 层深度,读者按需深入
  4. 交叉引用协议 — 权威源 + 契约块 + 依赖头,解决跨模块概念同步问题
  5. 操作指南优先 — GUIDE.md 回答"我想做 X,去哪找"
  6. 更新协议内置 — 不只写文档,还要写"如何更新文档"
  7. Agent-centric 分类 — 按角色(Brain/Working/Advisory)而非按技术特征分组
  8. 用户需求文档优先 — USER-REQUIREMENTS.md 是最高优先级,所有设计可追溯到用户原文
  9. 语义变更记录 — CHANGELOG.md 记录设计意图演进,与 Git 互补(Git 记录"什么变了",CHANGELOG 记录"为什么")
  10. 叙述与代码分离 — 文字叙述占前 80%,代码设计放末尾附录,标注 V1 仅供参考
  11. 更新次序规范 — 5-Phase 严格次序(意图锚定 → 权威源 → 契约传播 → 结构同步 → 变更记录),防止 context 污染和遗忘
  12. 内容单一性 — 写入设计内容时完全拆分到权威位置,零冗余。非权威文档只用契约块引用,不复制内容。与交叉引用协议互补(协议管读取导航,单一性管写入约束)
  13. Git 版本控制包裹 — 每次文档更新前后都有 Git 提交。写入前提交保证可回滚基线(已干净则跳过),写入后提交保证变更持久化。与 CHANGELOG 互补(Git 管文件快照,CHANGELOG 管语义意图)
  14. 需求按模块归属 — 需求嵌入模块文档,不集中存放。每个模块以"需求与本质"开篇(需求是什么 → 模块本质 → 为什么重要),然后是具体设计。USER-REQUIREMENTS.md 转为用户决策登记处 + 归属索引。跨模块需求指定一个归属模块(完整分析)+ 若干影响模块(描述本地影响),复用交叉引用协议的权威源 + 契约块机制
  15. LLM 驱动的文档审查 — 每次文档修改后自动触发 LLM agent 审查。CHANGELOG 驱动确定审查范围,按 5 类规则检查(结构、需求质量、设计可追溯性、内容规范、冲突检测)。审查状态逐文档追踪,持久化在审查规则文件中。全 LLM 方案,无脚本依赖
  16. 需求贯穿渐进式披露 — "需求与本质"不只出现在最细粒度的模块文档中,而是贯穿每一层:INDEX(系统使命)→ 章节 README(子系统整体需求 + 本质定位)→ Detail Doc(单模块需求 → 本质 → 设计)。每一层自然衔接,读者在任何深度都能理解"为什么需要这个"
  17. 写入协议(内容归属判定 + 渐进式读取 + 写入场景) — 解决"给定设计文档如何写入架构"的完整路径。GUIDE.md 新增「内容归属判定」:Step 0 渐进式读取(读取范围随流程推进逐步扩大:归属判定只读框架文件 → 写入准备读目标文件 → 契约传播读 touched-by)+ Step 1-5 内容路由(概念拆解 → 查映射表 → 章节路由 → 权威源确定 → 内容拆分)。UPDATE-SEQUENCE 新增场景 F(从设计文档写入架构文档的 Phase 0→5 流程)。读取策略不放在 WRITING-STANDARDS(它只管输出格式),而是作为内容归属判定的前置步骤

5. 适用场景判断

如果你的系统...推荐使用
有 5+ 个互相交互的子系统全套方法论
有跨层概念(如权限、日志)交叉引用协议
文档超过 20 个文件渐进式披露 + GUIDE.md
多人协作维护文档更新协议 + 依赖头
简单项目(< 10 个模块)只用渐进式披露即可

← 返回道层 skill 索引 · 返回方法论区