跳到主要内容

第二十三节 — 架构决策索引

这一节回答:本架构文档涉及的所有架构决策记录(ADR)的全景索引。每条 ADR 在哪、谁触发、状态如何、影响哪些章节。

ADR 体系约定

字段说明
编号ADR-NNN(三位数字),全局唯一,不重用
位置governance/workstreams/finbayes-arch-rewrite/decisions/ADR-NNN-*.md
状态proposed(待评审)/ accepted(已确认)/ superseded(已被新 ADR 替代)/ deprecated(已废弃但未替代)
触发章节哪个 CHAP 的设计需要这个决策
影响章节决策一旦确认后影响哪些章节的描述

ADR 是独立成档的(详见 ADR-002),不在主架构文档中展开决策对比 —— 主文档只引用结论。


已 accepted 的 ADR

编号主题文件触发影响
ADR-001工程范式:Harness Workflow + 里程碑切片 + 走通骨架试点decisions/ADR-001-工程范式.md工作流启动全篇(特别是 CHAP-25 / CHAP-27)
ADR-002架构文档结构:分层章节 + C4 画图 + 决策独立成档 + 业务建模思路decisions/ADR-002-架构文档结构.md工作流启动全篇(文档结构本身)
ADR-003工程实施栈与协作模式:OpenSpec + Archon + Claude Code 主理 + Codex 实现decisions/ADR-003-工程实施栈与协作.md工作流启动CHAP-25 / CHAP-27
ADR-004自然语言到任务的识别策略:LLM Function Calling 主导decisions/ADR-004-任务识别策略.mdCHAP-04 / CHAP-09CHAP-04 / CHAP-09 / CHAP-10 / CHAP-21
ADR-008LLM Provider 接口抽象:统一 OpenAI-compatibledecisions/ADR-008-LLM-Provider-接口抽象.mdCHAP-09CHAP-09 / CHAP-13 / CHAP-15
ADR-010输出端凭证过滤位置:综合层语义级 + Output Pipeline 格式级 双处decisions/ADR-010-输出端凭证过滤位置.mdCHAP-17CHAP-09 / CHAP-17 / CHAP-20

待写的 ADR(M1+ 实施初期补)

以下决策已在主架构文档草稿中提出初步倾向,但尚未独立成 ADR 完整论证。M0 启动不阻塞(M0 实施 Agent 按当前倾向执行 + 在工程实施仓 PR 描述中标注采用了该倾向)。

编号主题触发章节当前倾向优先级
ADR-005内部并发原语选择:asyncio / 多线程 / 多进程CHAP-12Python asyncio.TaskGroup(结构化并发)
ADR-006部署形态优先级:本地优先 / 远程优先 / 混合CHAP-14本地优先单机为第一阶段 ✅;远程托管远期
ADR-007状态写入"候选 → 已确认"两步设计CHAP-11主动状态全部走两步 + 显式拒收 / 编辑路径
ADR-009Prompt 是代码还是数据 / 版本化策略CHAP-19混合:关键 Prompt 进代码仓 + 实验性 Prompt 走 YAML

优先级判定

  • :第一阶段实施前必须有 ADR 才能起代码(涉及主干架构 / 战略边界)
  • :可在第一阶段实施初期一周内补 ADR
  • :第一阶段不阻塞,演化中再补

编号变迁说明

工作流早期 ADR-004 候选为"多 Skill 命中同一任务时的优先级规则",深度调研后该议题与"自然语言到任务的识别策略"合并 —— 后者更高优先级且涵盖前者。ADR-004 重命名为"任务识别策略",原"多 Skill 优先级"作为该 ADR 的子议题处理。

如未来"多 Skill 优先级"需独立成 ADR,会按下一可用编号(如 ADR-012)分配,不复用 ADR-004 编号。


拒绝概念的处理(无需独立 ADR)

战略层已禁入的概念清单(详见 CHAP-02 / CHAP-17)不需要独立 ADR —— 它们是战略级硬约束而非工程级决策。

拒绝概念拒绝来源工程承接
11 条字段级强约束战略白皮书构建期否决综合层 schema 不引入这 11 条字段
默认 vs 行动准备双模式同上CHAP-06 关键场景不区分双模式
升格为关系定义的"认知协作伙伴"同上全篇正文不使用该词
L3 长期状态四承诺同上CHAP-15 / CHAP-19 用户主权五维度替代
零状态前提同上CHAP-14 / CHAP-15 显式状态管理
情绪桥 / 信任债承诺同上综合层输出契约不含此类元素
行动准备 / 行动判断 / 行动方案同上任务类型清单用"交易准备 / 交易决策 / 交易行动"代替

工程层的承接通过:

  • verify-kb.mjs 的自动 grep 检查(CI 必跑)
  • PR Review gate 的人工语义复核(防同义改写)
  • 章节级的 Review 历史保留

ADR 间的关系

这张图表达什么:ADR 之间的逻辑依赖关系。ADR-001/002/003 是工作流基础;ADR-004(任务识别策略)是认知架构核心,影响 ADR-005/008/009;ADR-006 部署形态依赖 ADR-007/008 的接口稳定。

这张图特意不表达什么:ADR 的写作顺序(按工程优先级,不按依赖严格拓扑)。


ADR 编写规范(来自 ADR-002)

每条 ADR 至少含:

段落内容
Context背景:为什么需要这个决策
Decision决策:选了什么方案
Rationale理由:为什么这样选(不展开未选方案的详细评分,只说结论)
Consequences后果:决策带来的好处 / 坏处 / 影响范围
Status状态:proposed / accepted / superseded / deprecated
References关联:影响的 CHAP / 关联的其他 ADR / 关联的战略文档

关键约束

  • ADR 不变更(accepted 后追加 superseded 关系,不直接改原文)
  • ADR 不超过 80 行(紧凑 + 聚焦 + 不堆方法论)
  • ADR 文件名缩短(不含日期 / 长描述)

ADR 与主架构文档的关系

主架构文档(CHAP-NN)ADR
说"是什么 / 做什么 / 怎么做"说"为什么选这个、不选那个"
引用结论展开权衡
篇幅长篇幅短(≤80 行)
每章覆盖多个决策每条覆盖单个决策

主架构文档不重复 ADR 的内容 —— 引用 ADR 编号即可。


主架构文档之外的决策痕迹

部分小决策不独立成 ADR,但在工程实施仓的 commit / PR 描述中留痕:

决策类型留痕位置
工具版本选型(如选 Pydantic v2 而非 v1)工程实施仓的依赖文件 + 引入 commit
字段命名 / API 路径细节OpenAPI schema + PR 描述
Bug 修复中的次要设计选择PR 描述

判定标准

  • 决策影响多个章节 → 独立 ADR
  • 决策影响单一模块 → 工程实施仓留痕
  • 决策反映战略边界 → 战略层而非 ADR

已识别但暂不分配编号的潜在 ADR

下列议题可能在演化中变成 ADR,但当前不分配编号(避免编号膨胀):

  • 多 Skill / 多工具优先级规则(被 ADR-004 涵盖)
  • Cache TTL 策略(按数据敏感度分类,工程实施细节)
  • 审计 trail 归档策略(按时间分片,工程实施细节)
  • Provider Readiness 探测间隔(运维参数,工程实施细节)

这些都不到 "影响多个章节"的门槛,留在工程实施仓决策。


与其他章节的关系

  • ADR 编写规范来源 → ADR-002 架构文档结构
  • 拒绝概念清单的来源 → CHAP-02 上位继承与不变量
  • 战略未决问题映射 → CHAP-22 第一阶段缺口
  • ADR 与风险的对应 → CHAP-24 风险登记
  • ADR 如何驱动里程碑 → CHAP-25 与里程碑/任务的对应