决策提案:经过评审的 ADR 维护与有界证据
状态:提案——未接受,不是权威 ADR。
日期:2026-09-19。身份:刻意未分配。本项目使用 OCP 迭代命名空间,本次变更尚未获批下一基线/迭代编号。应通过正常治理把提案放入获批的容器/章节,不能猜测版本号。实现已批准的功能计划,不代表自动接受这一架构提案。
背景
只追加的决策日志保留理由,但可能造成模型与人反复阅读。文件移动、语义整合、当前派生视图、决策接受和访问策略具有不同权限与失败方式。把它们当作一次文件重写,容易静默丢失约束或意外接受决策。
建议决策
| 职责 | 机制 |
|---|---|
| 日常证据 | 原生有界 adr_context,与用户命令共享服务,分页绑定源快照 |
| 维护请求 | 默认只读分析,显式起草模式和原生成本确认 |
| 语义发布 | 完整候选和逐单元覆盖,评审 CURRENT、来源及索引的实际字节 |
| 权威 | 绑定会话/调用/请求的原生 Question 响应、审计接受服务和显式手工恢复备用入口 |
| 生命周期 | 保留原文实质和身份,先接受后继再退役完全覆盖的前驱,维护双向 N 对 M 血缘 |
| 派生状态 | 逐根视图、全体成员/内容指纹,不自动调用模型刷新 |
| 文件移动 | 独立日志及明确授权的归档/恢复,逆向移动不改变决策状态 |
| 读取策略 | 独立 off/warn/guard,有限适配器,不宣称安全沙箱 |
复用现有风格适配器、项目 OCP 路径契约、插件作用域和接受/审计辅助函数,不建立平行治理体系。流程指引放在 L2 技能中,保留正常 /adr decide、提交检查和全日志编号。
理由
- 权限明确: 起草权限、决策接受和文件移动是不同操作。
- 历史可发现: 归档改变位置,不改变身份或效力。
- 失败可检查: 原始/目标字节日志避免覆盖无关编辑,展示部分进度。
- 成本有测量: 有界任务上下文可能更省,但首次维护及上下文重放可能昂贵。
- 声明有运行时证据: 使用真实 OpenCode 验证原生 Ask 和读取取消,不仅依赖模拟单元测试。
不采用的方案
| 方案 | 原因 |
|---|---|
| 用一份摘要替换整个日志 | 丢失原始理由、身份与审计能力 |
| 因文件陈旧或已有摘要就自动替代 | 把推断混同为已接受治理 |
| 每个后继必须逐条手工接受 | 原生 Ask 能授权准确的评审批次,无需额外摩擦 |
| 把 Shell 正则门禁当作安全边界 | 无法覆盖任意脚本、Git 和 MCP |
| 永久注入 CURRENT 或完整日志 | 每轮重复付费,并存在过期权威风险 |
| 每次编辑自动生成语义摘要 | 未授权模型开销及未经评审的语义变化 |
后果与评审问题
实现需要维护本地状态和恢复日志;操作者必须检查陈旧锁与编辑冲突。语义保真仍需人工评审。大规模维护仍需规划供应商的上下文/输出限制;单次响应上限不是总成本上限。原生批准依赖运行时可信 Question 事件通道,不构成针对任意本地进程访问的加密隔离。