ADR-011 · FB-RESUME · 长周期 Session 失忆防御协议
§0 决议简述
决议:建立 FB-RESUME 协议,保证 FinBayes 工程化长周期推进(M0-M7 数月)过程中,任何 session 切换 / /compact / context 爆炸 / Agent 失忆都能在 1 句话恢复完整状态。
触发原因:Step 10-13 的会话积累已经接近 context 阈值,Codex 实施期还要持续数周;不协议化保证状态硬化,必然在某次切换时丢失主线或决议。
§1 失忆的 3 类根源
| # | 根源 | 现象 | 频率 |
|---|---|---|---|
| F1 | Session 切换 | 关闭 Claude Code 重开,新 session 零记忆 | 每次启动 |
| F2 | /compact 后细节丢失 | auto-compact 把对话压缩 70-90%,关键约束(如 SVA-9 第几层执行中)可能丢 | 每次 compact |
| F3 | Context window 爆炸 | > 200K 后推理质量下降,注意力被前面无关历史吸走 | 长会话累积 |
核心问题:依赖 Claude 的"上下文记忆"是脆弱的,必须把状态硬化到 git markdown。
§2 协议 4 机制
机制 1 · 单一状态文件
新建 governance/workstreams/finbayes-arch-rewrite/CURRENT-MILESTONE.md,是项目当前推进状态的唯一事实源。包含:
- 当前 milestone / phase / active PR
- 已签 P0 决议清单
- 已完成动作(按时间倒序)
- 待办任务(按优先级)
- 已知阻塞 / 风险
- 关键文档锚点
- SVA-9 9 层快查
写入规则:每次 PR merge / milestone 切换 / 重要决议 → update + git commit。
机制 2 · Resume Prompt 标准化
任何 session 启动 / compact 后,用户只说一句话:
"按 SVA-9 + FB-RESUME 推进,读 CURRENT-MILESTONE.md 同步状态"
或更短:
"按 FB-RESUME 推进"
主控 Claude 收到后自动执行 hydration 序列:
- 读
CURRENT-MILESTONE.md - 读
ADR-012-SVA-9-战略愿景对齐九层防御.md(如已存在) - 读本文件(
ADR-011-FB-RESUME-protocol.md) - 读最近 5 个 commit log
- 读
pending-decisions-owner-map.md中所有已签 P0 决议 - 在 ≤ 100 字内回报"我现在到了哪里 + 下一步做什么"
机制 3 · Pre-compact dump(硬化保险)
/compact 之前的强制硬化:
| 触发条件 | 谁触发 | 动作 |
|---|---|---|
| 用户明示"准备 compact" | 用户 | 主控 dump 当前任务 / 决议 / 待办到 CURRENT-MILESTONE.md,git commit |
| 主控自检 context > 70% | 主控自动 | 同上 |
| 每个 milestone 完成 | 主控强制 | 同上 |
| 重大决议签字(如 MP-X) | 主控自动 | 同上 |
任何 dump 必须 git commit。状态在 git 才算"硬化"。
机制 4 · 个人域 memory 锚点
个人域 Claude Code memory 索引(Labs-FinTecAI 项目级 MEMORY.md)加一行索引,指向 finbayes_sva9_resume.md。
这样 Claude Code 任意启动自动加载这条索引,引导主控进入 FB-RESUME 流程。
§3 Resume Prompt 模板(标准化)
标准 prompt(用户用)
按 SVA-9 + FB-RESUME 推进。
或带上下文偏好(可选):
按 SVA-9 + FB-RESUME 推进。当前要点:<任务名>
例如:
按 SVA-9 + FB-RESUME 推进 P0-1 ~ P0-7
主控回报模板(≤ 100 字)
✅ FB-RESUME hydration 完成。
当前 milestone: <M0 / M1 / pre-M0>
当前 phase: <plan / execute / verify / 准备期>
当前 active PR: <#X / 无>
下一步: <一句话>
已知阻塞: <无 / 一句话>
§4 CURRENT-MILESTONE.md schema
文件必含 §1 ~ §11(详见 CURRENT-MILESTONE.md 本身)。关键字段:
current_milestone: <pre-M0 | M0 | M1 | ... | M7>
current_phase: <准备期 | plan | execute | verify | 验收>
active_pr: <#X | null>
signed_p0_decisions: [<MP-3>, <SVA-9>, <FB-RESUME>, ...]
known_blockers: [<B1 短描述>, ...]
next_action: "<一句话>"
last_updated: <ISO 8601>
last_updated_by: <agent | user>
§5 与 SVA-9 的关系
FB-RESUME 是 SVA-9 的协议级支撑(不在 9 层防御内,但是 9 层防御长跑的必要条件)。
| 维度 | SVA-9 | FB-RESUME |
|---|---|---|
| 范围 | 9 层防御 + Agent 分工 + L1 vibe check | 状态硬化 + session 恢复 + 失忆防御 |
| 目标 | 100% 达到战略愿景 | 长周期推进不丢主线 |
| 触发 | 每个 PR / milestone | 每次 session 切换 / compact |
| 关系 | FB-RESUME 让 SVA-9 能长跑数月不漂移 | SVA-9 是 FB-RESUME 的服务对象 |
两者并存:M0-M7 全程必须同时遵守 SVA-9(实施质量)+ FB-RESUME(推进连续性)。
§6 SOP · 何时强制 dump CURRENT-MILESTONE.md
| 触发场景 | 必须 dump 字段 | 必须 git commit? |
|---|---|---|
| PR opened | §3 active PR | ✅ |
| PR merged | §3 / §5 / §6 | ✅ |
| Milestone 完成 | §1 / §3 / §6 / §9 / L1 vibe check 结果 | ✅ |
| P0 决议签字 | §2 已签 P0 清单 | ✅ |
| 重大错误 / blocker 发现 | §7 | ✅ |
/compact 前(用户明示 or 主控自检) | 全文件 | ✅ |
| Session > 24 小时未 update | 全文件刷新一次 | ✅ |
§7 故障恢复场景
场景 A · 用户关闭 Claude Code 重开
用户: 按 FB-RESUME 推进
主控: [读 CURRENT-MILESTONE.md] ✅ hydration 完成
当前 milestone: pre-M0
当前 phase: SVA-9 P0 任务执行中
当前 active PR: 无
下一步: 继续 P0-1 起草 ADR-010
已知阻塞: B1 milestone-M0.yaml 真 schema 重写
场景 B · /compact 后细节丢失
同场景 A。CURRENT-MILESTONE.md 是文件不在 compact 范围内,永远准确。
场景 C · Context 爆炸推理质量下降
用户: context 太大了
主控: 立即 dump CURRENT-MILESTONE.md 当前快照 + git commit
用户: /compact
用户: 按 FB-RESUME 推进
主控: [恢复正常]
场景 D · 跨日 / 跨周续命
[Day 1 17:00] 主控收工前 dump CURRENT-MILESTONE.md(含明天接续点)
[Day 2 09:00] 用户开 Claude Code
用户: 按 FB-RESUME 推进
主控: [读文件] 继续昨天 P0-3 的不变量清单
场景 E · 跨 Agent 切换(Claude ↔ Codex)
Codex 接任务前必须读 CURRENT-MILESTONE.md。Archon workflow 在调 Codex 节点时把这份文件作为 anchor_doc 自动注入 Codex prompt。
§8 反模式(禁止)
- ❌ 依赖 Claude 的"对话记忆" — context 一爆就丢
- ❌ 状态只在 task list / TaskCreate 里 — Claude Code 重启 task list 可能不延续
- ❌ 未 commit 的 CURRENT-MILESTONE.md 改动 — 不在 git 不算"硬化"
- ❌ PR merge 后忘 update CURRENT-MILESTONE.md — 状态漂移
- ❌ 用
/clear(彻底清空)后不读 CURRENT-MILESTONE.md 就开始干活 — 必然丢上下文
§9 与既有协议的关系
| 既有 | FB-RESUME 怎么承接 |
|---|---|
governance/change-protocol.md | FB-RESUME 不替代变更协议;它是"状态可见性"层,change-protocol 是"决议合法性"层 |
个人域 Claude Code memory(Labs-FinTecAI 项目级 MEMORY.md) | FB-RESUME 通过 memory 索引接入 Claude Code 自动加载 |
ADR-003 工程实施栈与协作 | FB-RESUME 作为协作的"持续性保障"层,承接 ADR-003 的多 Agent 分工 |
pending-decisions-owner-map.md | FB-RESUME 的 §2 已签 P0 决议清单引用此文件 |
Pre-commit hook (derive:check + verify:kb) | FB-RESUME 的 dump 动作必须过 pre-commit |
§10 关联资产
- CURRENT-MILESTONE.md · FinBayes 当前状态单一事实源
- ADR-012 · SVA-9 战略愿景对齐九层防御方案(路径:
./ADR-012-SVA-9-战略愿景对齐九层防御.md,待 P0-1 落地后替换为链接) - MP-3 · kelly_cap 字段语义与下游消费协议
- ADR-003 · 工程实施栈与协作模式
- Step 13 元根因深度分析
- Change Protocol · 体系级变更流程