FinBayes 当前 milestone 状态(FB-RESUME 单一事实源)
本文件是 FB-RESUME 协议指定的状态单一事实源。session 启动 /
/compact之后 / context 恢复时,主控首先读此文件同步状态。任何 update 必须 git commit。
§0 方向纠正(2026-06-04,先读这段)
经 2026-06-04 深度复盘加对 martin-FinClaw 的解剖,得到一个必须放在最前面的结论。
FinBayes 到目前为止不是真智能体,而是一个"一次性问答函数"——里面装了一个相当成熟的金融认知核(当大脑),但没有智能体的身体。 它没有"感知→规划→行动→观察→再迭代"的主回路,没有工具调用循环和工具注册表,没有接入真实数据源,没有持久记忆的实际接线,没有主动性和触发,没有多渠道交付。核心入口 synthesize_cognition 是单次合成,调用方 orchestrate_m0_question 也只是问一次答一次。
根因(不找借口):从最早的战略文档起,FinBayes 就被明确定义为智能体工程,但半年里每个里程碑(M0 骨架 / M1 状态 / M1.5 认知核真算 / M1.6 渲染 / M2 任务扩展)、每份工程包、每个派给 Codex 的任务,优化的都是"单次回答的内容质量",从来没有一条是"建主回路 + 工具系统 + 数据层"。认知核越复杂,越掩盖了智能体身体的缺席。主控(我)是这个错误框架的称职执行者,从没退一步问"这还算不算一个智能体",直到 owner 逼着做 martin 对比才把缺口翻出来。
纠正后的方向(方向从未变,只是从没真正建过):把 FinBayes 建成金融领域的真智能体。完整骨架 = 主回路 + 工具系统(注册表 / schema / 执行 / 反馈 / 重试)+ 上下文工程 + 短期与长期记忆 + 规划与任务拆解 + 子代理 + 真实数据接地 + 持久化 + 主动性与触发 + 多渠道交付 + 自检与纠错 + 可观测;外加金融域的认知核(已有,当大脑)和问责 / 校准层。借鉴 martin-FinClaw(一个在真实使用中验证过、能力远高于裸模型的开源金融 agent)来搭。
下一步(蓝图已产出并经 owner 议定,2026-06-04):骨架蓝图见 金融真智能体骨架蓝图(提案),其「议定结果」段是 owner 议定的最终口径——骨架(组件 1–14)与上位文档矫正清单已认同;建造顺序两处调整:① 阶段 0 文档矫正切 A(定调子文档全改)/ B(实现细节只纠框架断言)+ 换「agent 行为」验证口径;② 正式问责 / 校准系统退出早期、留作单独产品设计课题。
✅ 阶段 0 文档矫正已完成(2026-06-04,本会话):A 类 5 份定调子文档全改透 + B 类里程碑包加 frame 护栏 + C 验证口径换 agent 行为门,全部把 FinBayes 从「单次问答函数」口径矫正回「带自主循环的金融认知 agent」本体。详见 §3bis。接下来 = 阶段 1:最小可用真 agent(主回路 + 1 工具 + 1 真实数据源 + 把 synthesize_cognition 降为被回路调用的认知动作 + 落一条 Judgment Record;验证关 = 演示一次旧单次函数结构上做不到的多步回路)。可以开始碰代码了。
§1 当前状态快照
| 字段 | 值 |
|---|---|
| 代码现状 | FinBayes main 8a274f3(已装上 agent 身体):在成熟认知核(MCA / s1 / posterior 真算)、渲染层、provider 适配、两步写入状态表之上,merge 进了主回路 + 工具系统 + 真实数据源(Coinbase)+ 把认知核降为被回路调用的认知动作 + 落带失效条件判断。「有大脑、无身体」的差距首次被结构性补上,并对真 gpt-5.5 验证为真 agent 行为(I-15' L2 live 239s 闭门)。阶段 2 再 merge 进主动性心跳(组件 9,main 875518a):无人提问时扫 confirmed 判断、市场触及失效条件即主动发复盘信号,对真 gpt-5.5 验证 skip/run(INV-16 live 门 PASSED 76s)。阶段 3 第一切片再 merge 进真 runtime 入口(finbayes.runtime.run_runtime_turn 走回路,main 02bc15c):移除旧 orchestrate_m0_question 单次路径,synthesize_cognition 全仓只剩回路内(loop.py)一处调用,INV-15 L3 由 xfail 转普通回归门(凭证门 INV-11 / 会话连续性 / 候选暂存保住;offline 180 + 真 gpt-5.5 live 门 2 条 PASSED 57.93s)。阶段 3 第二切片再 merge 进信号投递 + 跨 tick 去重(组件 10,main cdd6d82):心跳 run-signal 投递到 durable notification_outbox(Web 可读)+ 按 (user/judgment/失效条件) 在 cooldown 窗内去重(闭 Phase 2 审计的「每 tick 重发」缺口)+ 可注入 PushSender(含真实 WebhookPushSender);全确定性、offline 189 测、不设 live 门。阶段 3 第三切片再 merge 进工具执行边界白名单(main 36e5c2b):把工具系统从「按名字黑名单拦执行工具」改成「工具必须显式声明只读、否则默认拒绝」,INV-01 执行边界(不下单、不碰交易执行)从尽力而为变成结构性保证(修掉黑名单两个方向的洞:误伤名字含执行词的合法只读工具如 buyback_analysis、又漏掉名字不在禁用词表里的危险工具);全确定性、offline 190 测、不设 live 门。阶段 3 第四切片再 merge 进市场感知的标的解析(main 34cbaae):心跳取价前先 resolve_instrument(fin_object_ref, market)——修掉 BTC-USD 被符号正则拒、心跳静默漏判断的 bug,且不再把 USDT 对当 USD 价(USD≠USDT 的坑);多市场用每市场适配器注册表(当前只接加密),未接市场(A股/港股/外汇等)显式降级、不静默不假装加密;JudgmentRecord 加 market(从 fin_objects 子查询取,判断创建时已记)。全确定性、offline 199 测、不设 live 门。明确边界:跨市场「哪个市场 / 哪个对象」的识别是认知核 M1(金融对象本体识别)、归认知层推迟到 M1.5,不在本刀;本刀只做「已知市场 → 该源符号」的取数层。阶段 3 第五切片再 merge 进认知核校准字段补全(main baa24a7):认知核 synthesize 时已算出的 confidence(取自 s1 叙事-数字一致性)/ mca_bucket(市场结构分轴桶)/ posterior(双峰重尾后验)原本被 build_judgment_candidate_payload 丢弃、判断记录也无列存,本刀贯通一条纵向链(算→候选→确认 carry-through→durable 列→读回)补存进 judgment_records(migration 0007 三可空列),给推迟的判断跟进+校准层(组件 14)铺基础;纯持久化、不引入校准逻辑;全确定性、offline 203 测、不设 live 门。阶段 3 第六切片再 merge 进持久化抗损(main b2ed2c4):connect() 加 WAL + busy_timeout(5s) + synchronous=NORMAL(此前只设 foreign_keys=ON,并发同写撞 database is locked)+ 加 transaction() 原子写原语(BEGIN [IMMEDIATE]→COMMIT/ROLLBACK)+ 心跳信号去重检查与写入合并为单连接原子(BEGIN IMMEDIATE 闭 check-then-write 双发 race,强化 Slice 2 去重);诚实划界:整轮问答不做成单一事务(回路中间有 LLM 调用、跨它持写锁是错的,每个离散状态写本就各自原子),状态写+审计仍两事务(审计是 trace 非事实源,良性残留);全确定性、offline 206 测、不设 live 门。阶段 3 第七切片再 merge 进护栏·输出端 INV-11 凭证脱敏(main 421fc0c):凭证过滤此前只做输入端,agent 生成的用户面回答若复述出私钥/助记词/API key 样式串在输出端没拦——新建 credential_filter 单一事实源模块(输入门 keyword pattern 从 evals 移来当源、反转 evals→finbayes 依赖)+ redact_credentials 上下文脱敏(sk- 值无条件脱敏;长 hex/base58 仅紧邻 secret 触发词时脱敏,避开加密 agent 合法打印的 tx hash/地址误伤,对齐 ADR-010)+ runtime 答案脱敏(脱敏值进返回与会话记忆 + 命中写 audit)+ 心跳 reason 脱敏;全确定性、offline 214 测、不设 live 门。阶段 3 P1 护栏三连再 merge 进(main f728bd7→15741e5):INV-05 用户面字段收敛(project_user_surface 把 FIELD_SURFACES 从声明变强制白名单、runtime 出口主动产出收敛面、渲染器加内部字段回归 guard)+ ADR-010 综合层语义级凭证脱敏(redact_result 在合成输出处脱敏、闭"秘密持久进 judgment_body"漏面)+ 全子字段脱敏;全确定性、offline 223 测、不设 live 门。阶段 3 护栏门类收尾再 merge 进循环自检(main 0474d58):grounding 回路加参数指纹防原地打转(同名同参的重复工具调用丢弃、整轮全重复→self_check_no_progress 提前停、不烧满 max_iterations);INV-02 条件化方向判断契约核实已由 _enforce_directional_judgment_contract 验证器在构造时强制 + test_i02 覆盖、无需重建(substance over theater:只核不重做);offline 225 测、不设 live 门。护栏门类基本闭合(输入端拒绝 + 工具白名单 INV-01 + 注入扫描 + 输出端 INV-11 脱敏 + INV-05 收敛 + 综合层/子字段脱敏 + INV-02 验证 + 自检)。阶段 3 余项(上下文记忆补强其余)见 §4。 |
| 当前阶段 | ✅ 阶段 1 完成:最小可用真 agent 已落地、对真模型验证、已 merge 并推 GitHub(2026-06-04 本会话)——主回路(perceive-act-observe + max_iterations 硬封顶)+ 工具系统(注册表/校验/信封)+ 1 真实数据源(Coinbase 现货)+ synthesize_cognition 降为被回路调用的认知动作 + 落带失效条件 JudgmentCandidate(confirm 守 I-03' 两步)全部建成。I-15' L2 agent 行为门已对真 gpt-5.5 闭合:live 烟测 239s PASSED——真模型在路由 prompt 下真决定调 fetch_quote → 拉真实数据 → 喂认知核 → 落判断,是对真模型的绿、不是对被操纵 stub 的绿。offline 全量 170 测试 + live 双过零回归。工程仓 feat/minimal-agent-loop 4 commit 已 --no-ff merge 进 FinBayes main(8a274f3)并推 Curvature-Lab/FinBayes。独立审计三点全闭见 §3ter。✅ 阶段 2 主动性完成:心跳(无人提问时唤醒 → 扫 confirmed 判断 → 拉当前行情 → 真 LLM 判 skip/run → 触及发 ProactiveReviewSignal 指名旧判断 / 条件)已建、对真 gpt-5.5 验证(live skip/run 门 PASSED 76s:BTC 跌破失效底 → RUN、ETH 安全 → SKIP,一条信号不轰炸)、已 --no-ff merge 进 main(875518a)。179 测零回归。✅ 阶段 3 第一切片完成(2026-06-05 本会话):真 runtime 入口走回路 + 移除旧 orchestrate_m0_question 单次路径 → INV-15 L3 闭合(由 xfail 转普通回归门),凭证门 / 会话连续性 / 候选暂存全保住;offline 180 测零回归 + 真 gpt-5.5 live 门 2 条 PASSED 57.93s,已 --no-ff merge 进 main(02bc15c)。详见 §3quinquies。✅ 阶段 3 第二切片完成(2026-06-05 本会话):信号投递(组件 10)+ 跨 tick 去重——心跳信号投递到 durable outbox(Web 可读)+ cooldown 去重(闭 Phase 2 审计「每 tick 重发」缺口)+ 可注入 push 端口(含 WebhookPushSender);全确定性、offline 189 测零回归、不设 live 门,已 merge 进 main(cdd6d82)。详见 §3sexies。✅ 阶段 3 第三切片完成(2026-06-05 本会话):工具执行边界白名单——工具系统从按名字黑名单拦执行工具,改成工具必须显式声明只读、否则默认拒绝,INV-01 执行边界由尽力而为变结构性保证;全确定性、offline 190 测零回归、不设 live 门,已 merge 进 main(36e5c2b)。详见 §3septies。✅ 阶段 3 第四切片完成(2026-06-05 本会话):市场感知的标的解析——心跳取价前先解析(修 BTC-USD 被符号正则拒 + 心跳静默漏判断 + USD 默认坑),多市场用每市场适配器注册表、未接市场显式降级,跨市场「哪个市场/哪个对象」识别划归认知核 M1(推迟 M1.5);全确定性、offline 199 测零回归、不设 live 门,已 merge 进 main(34cbaae)。详见 §3octies。✅ 阶段 3 第五切片完成(2026-06-05 本会话):认知核校准字段补全——confidence/mca_bucket/posterior 从「算完即丢」补成 judgment_records 持久列(migration 0007),贯通算→候选→确认→durable→读回纵向链,给推迟的判断跟进+校准(组件 14)铺基础;纯持久化、offline 203 测零回归、不设 live 门,已 merge 进 main(baa24a7)。详见 §3nonies。✅ 阶段 3 第六切片完成(2026-06-05 本会话):持久化抗损——connect() 加 WAL + busy_timeout + synchronous=NORMAL 解决并发同写撞 database is locked + transaction() 原子写原语 + 心跳去重检查写入原子化(闭 check-then-write race);诚实划界整轮问答不做单一事务(LLM 在回路中、每个离散写本就各自原子);offline 206 测零回归、不设 live 门,已 merge 进 main(b2ed2c4)。详见 §3decies。✅ 阶段 3 第七切片完成(2026-06-05 本会话):护栏·输出端 INV-11 凭证脱敏——建 credential_filter 单一事实源 + 反转 evals→finbayes 依赖 + redact_credentials 上下文脱敏(避开 tx hash 误伤,对齐 ADR-010)+ runtime 答案与心跳 reason 两出口面接入;offline 214 测零回归、不设 live 门,已 merge 进 main(421fc0c)。详见 §3undecies。✅ 阶段 3 P1 护栏三连完成(2026-06-05 本会话):INV-05 用户面字段收敛(FIELD_SURFACES 声明→强制白名单投影 + runtime 出口产出收敛面 + 渲染器回归 guard,main f728bd7)+ ADR-010 综合层语义级凭证脱敏 + 全子字段脱敏(redact_result 合成输出处脱敏、闭"秘密持久进 judgment_body"漏面,main 15741e5);offline 223 测零回归、不设 live 门。详见 §3duodecies。✅ 阶段 3 护栏门类收尾完成(2026-06-05 本会话):循环自检(参数指纹防原地打转,main 0474d58)+ INV-02 条件化判断契约核实已 enforced(验证器构造时强制 + test_i02 覆盖、未重建);offline 225 测零回归。护栏门类基本闭合,详见 §3terdecies。✅ 阶段 3「加固与可用化」核心实质完成(2026-06-05 本会话)——10 刀 merge + INV-02 核实,offline 从阶段 2 末 179 涨到 225、全程零回归,护栏门类闭合,runtime/L3/投递/白名单/市场解析/认知核字段/持久化抗损/凭证脱敏/字段收敛/自检全硬化;唯一余项语义检索经 owner 2026-06-05 议定 defer(待真实使用手感,ADR-017)。✅ 独立审计验收通过(§3fin-audit:自跑 offline 225 测、读码核 4 个高风险切片、三条历史发现全闭、runtime 真模型 live 门已读实)+ hold 解除执行完毕——FinBayes 全部 24 commit 已推 GitHub(8a274f3..0474d58,main 与 origin 同步)。剩 milestone 决策 = 是否进下一阶段(收尾盘点见 §3fin)。【2026-06-05 hold 解除留记】本文件各切片段落里的「未推(owner hold)」标记均为写入时点状态,现已随验收全部推送 GitHub、以此为准。 判断跟进+校准(原「问责」)仍移出编号阶段、保持推迟。 |
| 本轮已完成 | 阶段 0:上位 / 下位文档矫正全部完成——A 类 5 份定调子文档(product-definition / 战略白皮书 / architecture frame 段 / 里程碑路线图 / L0.5 不变量)改透 + B 类里程碑包(m0 / m1.5 / m1.6 / m1-state)加 frame 护栏 + C 验证口径换 agent 行为门,统一把 FinBayes 从「单次问答函数」回正为「带自主循环的金融认知 agent」本体。5 次 commit 硬化(1d9ae9f / 700956e / 3c77ce2 / 7c6e5ec + 本次状态 dump)。详见 §3bis。 |
| 上轮已完成 | kelly_cap 已彻底移除(owner 2026-06-04 定:无用、误导)——FinBayes 684d69d,schema / 合成 / 编排约束门 / 渲染胶囊四层拔净,credential gate 保留,ruff 干净 + pytest 157 绿 + kelly 全局 0 残留;连带 MP-3 / ADR-019 作废(§4)。 |
| 待 owner 定 | 蓝图产出方式 + 样本范围已定并完成,当前无悬置待定项;阶段 0 矫正中遇 ADR 级取舍再提请 owner。 |
| 阻塞 | 无技术阻塞;治理层几处连带过期项待 owner 定(§4)。 |
§2 已签决议现状
| 决议 | 状态 |
|---|---|
| ADR-011 · FB-RESUME | ✅ 有效,仍在用。 |
| ADR-012 · SVA-9 九层防御 | ✅ 原理在;里程碑 gate 机器与旧"磨答案"框架绑定,待蓝图后重排(§4)。 |
| I-14' 认知数据独立性 | ✅ 有效且无需改:允许接数据(外部数据 = 辅助证据,无治理闸门),只禁"硬性要求数据才能工作"与"假填数字"。 |
| MP-3 · kelly_cap 协议 / ADR-019 posterior 措辞 | ⛔ 已退役(ADR-021,2026-06-04);kelly_cap 已从代码移除(FinBayes 684d69d)。 |
| 方案 Z | ✅ 对 martin "不复用" 已纠正为"研究 / 借鉴 / 集成"(守不直接 rebase 其单体);轻量 ADR 已补(ADR-023,含 Phase 0→3 借鉴 audit trail)。 |
| Agent 分工 / MP-4 / MP-5 / ADR-007 / 013 / 015 / 016 / 018 | ✅ 已签。认知核契约(MP-4 / MP-5)随蓝图可能调整。 |
| ADR-020 可问责定位 | ✅ 已签;agent 转向后"可问责"从答案属性变为组件层,待蓝图重新摆位(§4)。 |
§3 已建成资产(历史;逐 PR 细节见 git log)
- M0(2026-05-29):cognition schema + SQLite 四表 + LLM provider + 评测 harness 骨架;边界(不下单 / 不替决策)守住。
- M1(2026-05-31):两步写入 + 会话连续性 + 多会话 + Watchlist + 拉式状态入口;这些状态结构从未与任何 agent 回路接线——正是"有状态表、没身体"的证据。
- M1.5(2026-06-01):MCA / s1 / posterior 占位换真算 + 真 provider 抖动鲁棒化。
- M1.6(2026-06-01):答案先行 + 动态栏目渲染。
- M2 起步(2026-06-03):clarify 欠定门控步 1;trade_preparation 因无真实数据 producer 被 verify 拦下。
- F-e(2026-06-04,
2a9224a):首屏落点先行的 plain 短模式 + 折叠详情。 - 评测:FinTecEval 是独立的 Claude Code 会话(评测引擎),主控写工单、owner 转发;双轴坐标 = 底线(vs 裸模型)/ 及格线(vs 竞品,如 martin)。
§3bis 阶段 0 文档矫正完成记录(2026-06-04 本会话)
把上位 / 下位文档从「越往工程下游越退化成单次问答函数」的框架漂移,统一矫正回「FinBayes 产品本体 = 带自主循环(主回路 + 工具 + 状态 + 主动性)的金融认知 agent,单次问答只是一个回合」。依据蓝图(E) 矫正清单 + 议定结果。
A 类(定调子文档全改透):
product-definition.md(1d9ae9f):§1 立产品本体 frame / §3 状态资产正名 agent 工作记忆 + 自主触发条件源 / §4 任务表加范围护栏 / §7.3 字段算深 ≠ agent 护栏 / §12 验收换 agent 行为门 / §13 维护检查补两条。strategic-whitepaper.md(1d9ae9f):§1 愿景图单向管道 → 显式闭环 + 短期形态「对话入口 ≠ 问答函数」/ §4「判断连续性」升为产品形态支柱 / §7 第一阶段 agent 自主循环立为核心交付 + 「agent 行为」首要验证 milestone / 文末 Audit trail。architecture.md(700956e):§2 新增 identity 级架构不变量「带自主循环的认知 agent」+ 快速核查第 5 条 / §5 认知流转图改 agent 默认闭环 / §6 补 S10–S12 自主场景(被动:主动 8:1→8:4)/ §9.2「单回合编排 + 主动信号触发器 = agent 两个半」/ §25 头号偏移矫正(最小自主循环切片前移 M2、M5 退铺面、M0–M4 标 pre-agent)。strategic-invariants-codified.md(3c77ce2):补 identity 级建造态不变量 I-15' AgentAutonomousLoop + I-16' JudgmentRecordIsLiveMemory(14→16 条)。- 里程碑路线图(A4):实质由 architecture §25 + whitepaper §7 共同承载。
B 类(实现细节只加 frame 护栏,非重写)+ C(验证口径)(7c6e5ec):
- m0 / m1.5 / m1.6 包加 frame 护栏;m1.6 评价坐标系 P/U/D 外新增 agent 行为维度 A;m1-state-confirmation 加 frame 指针(最小 Watchlist + 失效条件触发已前移 M2)。
- C agent 行为门已嵌入 product §12 / arch M2 验收 / whitepaper §7 milestone / m1.6 坐标系 / 不变量 I-15'/I-16' test。
刻意不动(按 (B) 类口径「非漂移源头、建造前写死 = 编小说」):architecture 深层实现段、各 engineering-pack 字段级契约、认知体系研究细节——留给阶段 1+ 建造反哺。未重编号 M0–M7(全量重编号 = owner 治理连带项,见 §4)。
§3ter 阶段 1 切片独立审计(2026-06-04 本会话)
主控对 feat/minimal-agent-loop(3 commit)做独立审计(读全 loop / tools / market_data / I-15' 测试 / 入口接线),区别于实施会话的自我报告。
确属实质、已证到的:主回路真 perceive-act-observe + max_iterations 硬封顶 + 终止态明确;工具系统注册表 / 校验 / {success,data/error} 信封 + 失败转状态不崩;market_data 打 Coinbase 实价、只返事实、失败优雅降级为信封;落 JudgmentCandidate 带失效条件、confirm → Judgment Record;170 测试零回归。承重墙三连确实合拢——不是贴标签。
三个发现:
- 【硬门】真 LLM routing 未证:I-15' L2 行为测试用写死的假 provider(必回一个
fetch_quote再收敛),证的是回路控制流、不是「真 gpt-5.5 在路由 prompt 下会真决定调工具」。一个只在被操纵 provider 下才 loop 的回路 = 旧「机器建好却没对真模型验过」陷阱的 agent 版。live 烟测tests/invariants/test_i15_agent_loop_live.py(c844f24,@live +FINBAYES_LIVE_AGENT门控)。✅ 已闭门(owner 2026-06-04 通网 shell 跑,239s PASSED):真 gpt-5.5 在AGENT_ROUTE_SYSTEM_PROMPT下真决定调fetch_quote(iterations≥2)→ 拉真实数据 → 喂认知核 → 落带失效条件判断。阶段 1 的 agent 行为门对现实成立。(踩坑记录:首跑 ConnectError 是 httpxtrust_env在 macOS 捡了系统代理、非127.0.0.1:7890;用 env 强制HTTPS_PROXY=http://127.0.0.1:7890+ 清ALL_PROXY后通——与模型行为无关。) - 【诚实度·非阻塞】I-15' L3 缺失 + 旧单次路径仍在:I-15' 测试未写 L3 反断言「无顶层单次直调 synthesize」;而
orchestrate_m0_question仍是直接单次调 synthesize 的公共函数(且 FinBayes 目前无 runtime 入口,回路与旧路径都只被测试调用)。故 I-15' 绿是「不完整的绿」,「synthesize 不再是顶层入口」只对了一半。follow-up(阶段 1 会话):补 L3 并诚实标 deferred(xfail),或把汇报措辞收准为「L1+L2 达成、L3 未达成」。✅ 已落实(c844f24):补 L3 反断言test_l3_no_top_level_single_shot_synthesize_pathxfail(strict)(旧单次路径移除/改接后将 XPASS 报警,提醒转常规断言)+ 行为测试加注「fake provider 只证 wiring」+ 汇报措辞统一收准为「L1+L2 达成、L3 未达成」。 - 【边界·非阻塞】I-01' 是黑名单、非「by construction」:执行拒绝是 8 个子串标记的黑名单,
buy/sell/rebalance/liquidate会漏网,但 docstring 写「read-only by construction」——措辞夸大保证强度。阶段 1 只有 fetch_quote、实际安全。follow-up:蓝图阶段 4「认知 / 执行隔离墙」硬化时翻成白名单(只放显式只读工具),措辞先收准。✅ 已落实(c844f24):tools.py 四处(module docstring / marker 注 / 异常 docstring / 报错文案)措辞收准为「best-effort 黑名单、非 by-construction」,并写明不能简单扩黑名单——buy/sell作子串会误拒buyback_analysis/sell_side_consensus等合法只读工具(恰证黑名单进路有缺陷);白名单(by-construction)留阶段 4。
合并门:✅ 全闭——① live 烟测 PASSED(239s,真 gpt-5.5 真调工具)+ ② ③ 已落实(c844f24)。feat/minimal-agent-loop 4 commit 已 --no-ff merge 进 FinBayes main(8a274f3)并推 GitHub(Curvature-Lab/FinBayes)。阶段 1 标 done。
§3quater 阶段 2 主动性切片落地(✅ 完成,2026-06-04 本会话)
把「判断写进去就是死档」这个主动性维度的「一次性问答」残留补上:让 agent 在无人提问时定时唤醒,扫用户 confirmed 判断、复用阶段 1 的 fetch_quote 拉当前真实行情、用真 LLM 结构化判 skip/run(当前事实是否触及某条失效条件)、触及才发 ProactiveReviewSignal(指名哪条判断 / 哪个条件 / 当前事实)。这就是蓝图 §27 说的「可问责精神不靠记分牌,而是 agent 在你旧判断的失效条件被市场触及时主动回来找你」——从主动性自然长出(蓝图阶段 2 / 组件 9 + 不变量 I-16' JudgmentRecordIsLiveMemory)。
已建(工程仓 feat/heartbeat-proactivity,2 commit c6ac8db + f7db951):
state/api.py补list_confirmed_judgments读取 API(此前只有list_watchlist,判断记录无读取路径——心跳本该扫的对象读不出来,是第一个必补缺口)。agent/heartbeat.py:run_heartbeat_tick(扫判断→拉行情→判 skip/run→发信号→落 audit)+ProactiveReviewSignal+ best-effort 注入扫描(判断文本是自动注入面,喂 LLM 前过黑名单,命中降级跳过,诚实标 best-effort 非 by-construction)+python -m finbayes.agent.heartbeat跑一次 tick 的可运行入口。- 边界守死:只读 + 通知,绝不写 Confirmed Store、绝不触发交易;fetch 失败优雅降级。skip/run 复用认知核同款
response_format=json_object,不造新机制。
验证现状(诚实——「不完整的绿」):
- ✅ offline wiring(
test_heartbeat.py5 条,明标只证接线不证真模型)+ I-16' 闭环不变量(test_i16_proactive_reconciliation.py4 条:市场触及→指名旧判断 / 不改 confirmed / pending 候选不被唤醒守 I-03' / 只调只读工具 + 信号 advisory 不触发交易)全绿。offline 全量 179 passed(阶段 1 的 170 +9)+ 3 skipped(live)+ 1 xfailed(I-15' L3)+ ruff 干净,零回归。 - ✅ 真模型 skip/run 门 PASSED(owner 2026-06-04 通网 shell 跑,76s):
test_i16_heartbeat_live.py(gated,@live +FINBAYES_LIVE_HEARTBEAT)造确定性事实——真 gpt-5.5 对 BTC 52000 跌破 60000 失效底判 RUN、对 ETH 2600 远在 1000 之上判 SKIP,只一条信号不轰炸。「skip/run 只在被操纵 stub 下成立」的洞闭掉,真模型在主动性维度被证为真 agent 行为(同阶段 1 纪律)。已--no-ffmerge 进 FinBayes main(875518a),merge 后全量 179 测零回归。
诚实划界(本阶段不做,留后续):三态结算 + Brier/校准账本 = 阶段 3(组件 14);目标价 / 时间窗结构化失效条件 = 阶段 3(本阶段用自由文本条件 + LLM 判定);真实推送投递 IM/Web = 阶段 4(组件 10,本阶段只产信号对象 + 落 audit);agent 自排未来任务 CronTool 暂缓(Heartbeat 是核心);OS 级定时器是部署的事,仓里不假造 cron。
主控独立审计(2026-06-04 本会话,区别于上面实施自报):读全 heartbeat.py + I-16' 闭环不变量测试,核实——只扫 confirmed(list_confirmed_judgments + pending 不被唤醒测试守 I-03')、不改 confirmed(表快照相等测试)、只调 fetch_quote(spy registry)、信号无 action/order/side/execute 字段(advisory),且 fetch 失败 / 注入命中 / 解析失败都优雅降级进 degraded(不静默丢、不崩)。wiring 测试诚实自标「rigged provider 只证接线」、真模型门走 live——阶段 1「不完整的绿」教训已被主动吸收,质量实打实、非表演。一条本阶段报告未点到的发现:
- 【非阻塞 · 须在阶段 4 真实投递前闭】信号无跨 tick 去重 / cooldown:
run_heartbeat_tick无「这条判断 + 条件是否已发过」的状态——同一条失效条件持续被触及时,每个 tick 都会重发同一条ProactiveReviewSignal。报告里「一条信号不轰炸」指的是 skip/run 跨判断的门(ETH SKIP),不覆盖跨 tick 重发。本阶段无实际危害(投递是阶段 4,tick 现在只产信号对象 + 落 audit、不真推给用户),但蓝图明确要求「信号节奏受关注密度控制、不高频骚扰」——阶段 4 接真实投递前必须补去重 / cooldown / 已发状态,否则一条失效条件会每 tick 轰炸一次。已加入 §4 阶段 4 清单。 - 两条次要(不阻塞):①
main()是 cron/launchd 调用的单次 tick、非常驻 daemon(docstring 诚实写了;「定时唤醒」措辞略超前于实现,实际无运行中定时器);②_touched_condition在模型判 run 但没回touched_condition时回退取第一条失效条件——多条件判断下可能指错具体条款(信号仍正确指向该判断、用户照样复盘,影响小)。
审计结论:阶段 2 实质达成、可 push;信号去重缺口记入阶段 3(加固与可用化)待处理即可,不阻塞本阶段。
§3quinquies 阶段 3 第一切片:真 runtime 入口走回路 + INV-15 L3 闭合(✅ 完成,2026-06-05 本会话)
补上最老、最伤「这是不是真 agent」叙事的诚实缺口:阶段 1 建了回路但没有走回路的 runtime 入口,旧 orchestrate_m0_question(直调 synthesize_cognition 的单次问答函数)仍是公共路径,故 INV-15 L3「无顶层单次直调」只能标 xfail。本切片把它真闭上。
已建(工程仓 feat/runtime-entry-l3,merge 02bc15c):
src/finbayes/runtime.py:run_runtime_turn作唯一真入口——凭证门(INV-11,复用run_credential_rejection_gate)→ 会话解析 + 状态行 → 跨会话记忆装配(assemble_cognition_context在进事件循环之前调,避开其嵌套asyncio.run)→run_agent_turn走回路 → 落 pending 候选 → 持久化 session turn。+python -m finbayes.runtimeCLI(可用化)。agent/loop.py:run_agent_turn加history+session_context_summary入参,把跨会话历史 + 滚动摘要和本回合接地事实合并喂进 synthesize。- 移除旧
orchestrate_m0_question:orchestration/__init__.py收成最小模块。独立审计核实synthesize_cognition(全仓只剩 loop.py 一处调用。 - INV-15 L3 由 xfail(strict) 转普通回归门,并加强为完整声明(orchestration 包无直调 + runtime 经
run_agent_turn而非绕过)。
验证(诚实——整机对真模型验过,非只证零件):
- ✅ offline 180 passed(179→180,L3 从 xfailed 转 passed)+ ruff 干净 + 零回归。5 个测试文件从 orchestrate 迁到 runtime 入口(FakeProvider 识别回路 routing 调用、断言保住会话历史 message 结构)。
- ✅ 真 gpt-5.5 live 门 2 条 PASSED(owner shell,57.93s):
tests/integration/test_runtime_live.py(gatedFINBAYES_LIVE_RUNTIME)——真入口端到端走回路落判断 + confirm 才入判断记录(INV-03);凭证材料在认知前被拒。
边界 / 划界:凭证拒绝(INV-11)保留并测;会话连续性(历史喂进认知)保留并测;per-turn 里程碑 eval 移出 runtime(是 harness 的事、不该每回合跑)。行为变化(非偷改):runtime 每回合自主 stage 一个 pending JudgmentCandidate(agent 提议,confirm 仍是用户步、INV-03 不破;TTL 到期自清),旧 M0 不建候选——chatty 用户会攒 pending 候选,将来或只对判断型回合 stage,留设计点。
本切片不做、留阶段 3 余项:信号投递 IM/Web、持久化抗损、护栏、认知/执行隔离墙白名单、fin_object_ref ↔ 拉价符号归一化、主动信号跨 tick 去重/cooldown、认知核丢字段(confidence/MCABucket/BimodalPosterior 落判断时全丢)补全。
未推:FinBayes main 02bc15c(owner 议定 hold、不推 GitHub)。
§3sexies 阶段 3 第二切片:信号投递 + 跨 tick 去重(组件 10,✅ 完成,2026-06-05 本会话)
闭 Phase 2 独立审计点(§3quater 末):心跳「信号无跨 tick 去重 / cooldown——同一条失效条件持续被触及时每 tick 重发同一条信号」。阶段 2 心跳只产 ProactiveReviewSignal 对象 + 落 audit、不真投递;本切片把投递(组件 10 多渠道交付)和去重一起做实,因为「不轰炸」是真实投递的前置。
已建(工程仓 feat/signal-delivery-dedup,merge cdd6d82):
migrations/0006_proactive_signal_delivery.sql:notification_outbox表——durable 投递落点(Web UI / poll 可读)兼跨 tick 去重状态。src/finbayes/agent/signal_delivery.py:deliver_signals(按 (user_id, judgment_id, touched_condition) 在cooldown_seconds窗内去重 → 写 outbox → 可注入 push;now可注入便于测 cooldown 过期)+list_notifications读侧 +PushSender端口 + 真实WebhookPushSender(POST JSON 到用户配置的 webhook,HTTP 可注入可测,仿 Phase 1 Coinbase fetcher 的真实/可测 seam)。默认 cooldown 24h。agent/heartbeat.py:run_heartbeat_tick加push_sender+cooldown_seconds,run-signal 投递到 outbox(跨 tick 去重);HeartbeatTickResult加delivered+suppressed_duplicates;audit 记 delivered/suppressed/push_failed。main()加--webhook。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 189 passed(180→189,+8 投递测试 + 1 心跳跨 tick 去重集成)+ ruff 干净 + 零回归。覆盖:cooldown 窗内去重抑制、过期后重投(注入 now)、不同失效条件不去重、push 仅对新信号调、push 失败仍保 durable outbox、WebhookPushSender 经可注入 poster 发 JSON、心跳 tick 投递一次→立即 re-tick 抑制(outbox 不变、不轰炸)。
- 不设 live 门是诚实的:投递 / 去重 / push seam 是纯确定性管道、无模型行为;心跳 skip/run 决策(唯一模型行为)本切片未改、已在阶段 2 对真 gpt-5.5 live 闭。webhook 真实 HTTP POST 不对真端点跑(无真 webhook、urllib 标准),与 Coinbase fetcher「真 HTTP 仅 live、seam 单测」同纪律。
边界:notification 是 advisory(无 action/order/side/quantity 字段)、心跳仍只读 + 通知、绝不写 Confirmed Store / 触发交易。顺带还术语债(先词后码):heartbeat docstring I-16'→INV-16、I-01'→INV-01、投递不再标「阶段 4 · 不投递」、settlement 措辞对齐 ADR-022(两层验证枚举 + 组件 14 移出编号阶段)。
未推:FinBayes main cdd6d82(owner 议定 hold、不推 GitHub)。
§3septies 阶段 3 第三切片:工具执行边界白名单(INV-01 由尽力而为变结构性保证,✅ 完成,2026-06-05 本会话)
闭 Phase 1 审计点(§3ter 发现 ③):工具系统的执行边界是「按名字子串黑名单」拦危险工具,代码自己的 docstring 都承认这是「best-effort、非 by-construction」。黑名单两个方向都漏:① 误伤——名字含执行动词的合法只读工具(如 buyback_analysis 被 buy 子串、sell_side_consensus 被 sell 子串)会被错拒,所以黑名单根本不能扩;② 漏网——名字不在禁用词表里的危险工具会被放行。
已建(工程仓 feat/tool-allowlist,merge 36e5c2b):
tools.py:Tool加必填access字段(Literal["read_only","execution"],无默认值);ToolRegistry.register只放access == "read_only"的工具,其余一律拒。删掉按名字子串匹配执行动词的黑名单(_EXECUTION_TOOL_MARKERS/_is_execution_tool)。名字不再决定准入,只有显式只读声明才准入——这就是 by-construction(结构性)的白名单。market_data.build_quote_tool声明access="read_only";测试同步:拒绝测试改成「拒access="execution"(不看名字)」+ 新增「名字含执行词的只读工具(buyback_analysis)现在能注册+执行」证明误伤已修。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 190 passed(189→190)+ ruff 干净 + 零回归。
- 不设 live 门是诚实的:执行边界是代码里的注册闸门、不涉 LLM 行为,确定性、离线测足够。
- 诚实划界(不夸大保证强度):保证是「只有 in-repo 作者显式声明
read_only的工具能跑」,信任这条经 code review 的声明,不是声称 handler 可证明无副作用——但比「按名字猜」是真升级,且消掉了黑名单的误伤与漏网两个洞。
顺带还术语债(先把人话写对,代码标识符已是普通英文):tools.py docstring 与注释里 I-01'→INV-01、删已作废的「阶段 4」引用、把白名单的真实保证强度写清。代码命名本身(ToolAccess / access / read_only)即普通英文。
未推:FinBayes main 36e5c2b(owner 议定 hold、不推 GitHub)。
§3octies 阶段 3 第四切片:市场感知的标的解析(✅ 完成,2026-06-05 本会话)
闭一个真 bug + 一个 owner 当场点出的多市场设计缺口。原 bug:心跳把判断的 fin_object_ref 直接当符号喂给 fetch_quote——BTC-USD 被符号正则(拒连字符)拒掉、心跳静默跳过这条判断;且 Coinbase 取价硬编码 -USD,把 USDT 计价对当成 USD 价(USD≠USDT)。owner 进一步指出:FinBayes 是多市场的(加密/美股/A股/港股/大宗/期货/外汇),用户提问不报市场,"裸符号/加密别名表"方案根本不够。
调查先行(owner 要求"深挖+广挖",三子代理并行):① 深挖 martin-Finclaw——确认它没有中央解析层,可借的是"两步式 search→fetch(候选 {id,name,symbol,exchange,type} + ID 取数)"和"薄的每源格式器 _stooq_symbol",加密路径靠模型直接给 BTC/USDT、零解析;② 广挖本地——挖到 CurvatureLabs/finclaw/asset_resolver.py 有别名表(含"大饼"),并把 M1 权威定义挖清(ADR-007 supplement + ADR-016:M1 是本体建模、不是符号解析;实体识别 M1.1 是认知层、推迟 M1.5);③ 广挖行业——FIGI/ISIN/CUSIP 是机构级杀鸡用牛刀;加密合适的是 CoinGecko /search+/coins/list、Coinbase /products、CCXT load_markets;主流 agent(OpenBB/CCXT/yfinance 系)一致"原生符号 + 数据源搜索 + 薄适配器,不建中央表";并警告资产/现货对/永续三者价格不同、不能塌。结论让我否掉了自己最初"三层 + 中央注册表"的过度设计。
已建(工程仓 feat/instrument-resolver,merge 34cbaae):
agent/instrument.py:resolve_instrument(reference, market)经每市场适配器注册表路由(当前只接加密)。加密适配器:拆 base/quote、小别名表(含中文俚语"大饼→BTC",借 CurvatureLabs 形状)、裸 ticker 透传(信任源原生符号,martin/OpenBB 路子);非 USD 计价显式不解析、不塌成 USD 价;未接市场显式不解析(no_adapter_for_market,A股/港股/外汇等都走这条)。返回ResolvedInstrument{market,canonical_symbol,quote_currency,instrument_type,fetch_symbol}或UnresolvedInstrument{reference,market,reason}。- 市场穿到心跳:
JudgmentRecord加market(list_confirmed_judgments相关子查询从fin_objects取,判断创建时已记,不用迁移/不改 payload);state/api加record_fin_object注册助手。 heartbeat:取价前先resolve_instrument,Unresolved显式降级(unresolved:<reason>可见)、不静默漏、不喂会被拒的原始引用。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 199 passed(190→199,+8 解析器测试 + 1 心跳「不支持市场显式降级」集成测试)+ ruff 干净 + 零回归。覆盖:
BTC-USD/BTC/BTC/USD/大饼/Bitcoin→BTC USD 现货;BTC-USDT→显式不解析(不塌 USD);裸 ticker(DOGE)透传;未知中文→不解析;A股/港股等未接市场→no_adapter_for_market显式降级;market 缺失/空引用→显式不解析。 - 不设 live 门是诚实的:解析是确定性查表/拆串、无模型行为;心跳唯一模型行为(skip/run)本切片未改、已对真 gpt-5.5 live 闭(live 测的
_confirm_judgment已补record_fin_object让路由可用)。
明确边界(写清、不冒充):跨市场「自由文本 → 哪个市场 / 哪个规范对象」的识别是认知核 M1(金融对象本体识别与关联),架构里归认知层、按 ADR-016 推迟到 M1.5——不在本刀。本刀只做「已知市场 → 该源符号」的数据取数层;市场本身在判断创建时由上游(调用方/认知核)记在 fin_objects.market。
未推:FinBayes main 34cbaae(owner 议定 hold、不推 GitHub)。
§3nonies 阶段 3 第五切片:认知核校准字段补全(✅ 完成,2026-06-05 本会话)
补 §4 余项里最清楚、确定性的一项:认知核 synthesize 时已为每条判断算出 confidence / mca_bucket / posterior,但 build_judgment_candidate_payload 落判断时把它们丢了,确认后的 judgment_records 也没有列存它们——推迟的判断跟进+校准层(组件 14)将来读 durable 已确认判断时无从拿到「当时的认知信号」。本刀只补存、不引入任何校准逻辑(校准仍按 owner 议定推迟)。
为什么必须落到 durable 判断记录、不能只放候选 payload:校准是长周期的(目标价 / 时间窗可达数周月),读的是 durable 已确认判断;而候选缓冲(candidate_buffer)有 TTL 会过期。只补候选 payload 等于把校准信号放进会被回收的临时区,铺不成基础。故贯通一条纵向链:算→候选 payload→确认时 carry-through→judgment_records 持久列→读回。
已建(工程仓 feat/cognition-calibration-fields,merge baa24a7):
migrations/0007_judgment_calibration_fields.sql:judgment_records加confidence REAL/mca_bucket TEXT/posterior TEXT三可空列(旧记录与非 posterior 任务无值)。state/api.py:build_judgment_candidate_payload序列化result.s1.confidence(结果上唯一的一等置信度——无独立 headline confidence 字段,注释写清来源)+result.mca_bucket(市场结构分轴桶全量,校准按它分组)+result.posterior(present 时)。_payload_to_judgment填三字段使confirm()返回与库一致;INSERT 加三列(confirm与confirm_edited共用此唯一 INSERT 路径);_row_to_judgment_record防御式读回(market同款if-in-keys);list_confirmed_judgments的SELECT j.*自动带新列(心跳侧读路径也拿得到)。加_model_to_jsonable(pydanticmodel_dump,否则透传)+_load_optional_json助手。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 203 passed(199→203,+4:候选序列化 present/absent + confirm→读回 carry-through present/absent)+ ruff 干净 + 零回归。迁移列表测试加 0007。
- 不设 live 门是诚实的:序列化 / 持久化 / 读回是确定性管道、无模型行为;认知核的模型行为(skip/run 等)本切片未改。
- 诚实划界:「confidence」取自 s1 叙事-数字一致性 confidence——这是结果上唯一的一等置信度,认知核没有一个独立的 headline 置信度标量,代码注释已写清来源,不冒充。本刀只持久化,校准(命中率 / Brier / 按分轴分组)仍是推迟的组件 14。
未推:FinBayes main baa24a7(owner 议定 hold、不推 GitHub)。
§3decies 阶段 3 第六切片:持久化抗损(✅ 完成,2026-06-05 本会话)
补 §4 余项里成型的一项。已查实 db.py 的 connect() 此前只设 foreign_keys=ON:State Store 的真实并发形态是「主动性心跳进程 + 用户问答回合同写一个库文件」,无 WAL / busy_timeout 会撞 database is locked;崩溃留半截属「上并发 / 真部署才暴露」的稳健性。
已建(工程仓 feat/persistence-durability,merge b2ed2c4):
state/db.pyconnect():加PRAGMA journal_mode=WAL(事务外设,持久于库头)+busy_timeout=5000ms+synchronous=NORMAL。WAL 让读与单写并行(非整库锁)、busy_timeout 让写等锁而非立即报错、NORMAL 是 WAL 的抗损搭配(OS 崩溃最多丢最后一次提交、不损库)。state/db.py加transaction(conn, *, immediate=False)原子写原语:BEGIN [IMMEDIATE]→COMMIT、出错ROLLBACK。immediate=True在 BEGIN 取写锁,堵住 check-then-write race。agent/signal_delivery.py:合并_recently_delivered+_write_outbox为单连接原子_try_deliver_one(在一个BEGIN IMMEDIATE内「去重检查 + 写 outbox」),闭跨 tick 双发 race、强化 Slice 2(§3sexies)的去重保证;推送刻意留在事务外——慢 / 失败的网络推送不占 DB 写锁。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 206 passed(203→206,+3:WAL/busy_timeout/synchronous 生效 +
transaction()成功整体提交 + 出错整体回滚)+ ruff 干净 + 零回归。deliver 去重行为由既有 8 投递测 + retick 抑制测继续覆盖(重构保行为)。 - 不设 live 门是诚实的:pragmas / 事务 / 去重写入是确定性管道、无模型行为。
诚实划界(不夸大「原子化」范围):
- 整轮问答不做成单一事务——回路中间有 LLM 调用,跨它持写锁是错的设计(会把所有写者堵在一次网络往返上、废掉 WAL);正确粒度是「每个离散状态写各自原子」,而它本就如此(
_confirm_candidate的 UPDATE candidate + INSERT judgment 已在一个with connect()块内 = 一个事务)。 - 状态写 + 审计事件仍是两个独立事务(审计走单独连接):审计是 trace、非事实源,崩溃丢一条审计不损状态——留作已知良性残留,不为它把
conn穿进整个审计系统(过度重构)。 - 迁移 runner 的 DDL + history 记录有极窄 partial-apply 窗(
executescript隐式提交所致;仅非幂等迁移如 0007 的ALTER ADD COLUMN重跑会撞)——窗口微秒级、无 I/O 等待,记为已知残留,本刀不动迁移 runner(改它风险高于收益)。
未推:FinBayes main b2ed2c4(owner 议定 hold、不推 GitHub)。
§3undecies 阶段 3 第七切片:护栏·输出端 INV-11 凭证脱敏(✅ 完成,2026-06-05 本会话)
选定 §4「护栏」门类里最像真缺口的一块下手。已查实:凭证过滤此前只做输入端(runtime 拒输入里的凭证材料,检测逻辑还寄居在评测包 evals/runner/gates.py);agent 生成的用户面回答若复述出私钥/助记词/API key 样式串,输出端没有任何拦截——对金融 agent 是真实漏面(ADR-010 早已定输出端要「综合层语义级 + Output Pipeline 格式级」双处过滤,本刀做格式级最终扫描这一处)。
关键设计抉择(owner 选「上下文脱敏」):不做裸高熵扫描。加密 / 金融 agent 合法会打印长 hex(交易哈希、地址、区块哈希),全量脱敏会毁掉正确答案。故 sk- 值样式无条件脱敏,长 hex/base58/base64 仅当紧邻 secret 触发词(私钥/助记词/private key/seed/secret/api key/password)时才脱敏——对齐 ADR-010「看到'私钥/助记词'等词附近的高熵字符串就警觉」。
已建(工程仓 feat/output-credential-guard,merge 421fc0c):
finbayes/agent/credential_filter.py(新,单一事实源):CREDENTIAL_KEYWORD_RE(=原 evals 里的输入门 pattern,移来此处当源、输入门行为不变)+redact_credentials(text)→RedactionResult(上下文脱敏,命中替换为[REDACTED:credential]、保留触发词只脱值)。- 反转 evals→finbayes 依赖:
evals/runner/gates.py改从finbayes.agent.credential_filter导入 keyword pattern——安全边界归产品包、非评测包(evals→finbayes 本就是正向依赖)。 - 两出口面接入:runtime
run_runtime_turn脱敏main_answer(model_copy返回脱敏 result + 持久化用脱敏值使秘密不进会话记忆 + 命中写boundary_rejected/credential_outputaudit);heartbeat 构造ProactiveReviewSignal前脱敏 LLM 生成的reason。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 214 passed(206→214,+8:sk- 无条件脱敏 / 高熵仅触发词后脱敏 / 裸 tx-hash 不误脱敏 / 触发词保留只脱值 / 干净答案不动 / keyword 仍 flag 输入 + runtime 脱敏并 audit / 干净不动不 audit)+ ruff 干净 + 零回归。既有 eval gate 凭证测继续过(依赖反转无回归)。
- 不设 live 门是诚实的:脱敏是确定性模式匹配、无模型行为。
诚实划界(不夸大保证强度):
- 是 best-effort 模式匹配(keyword/触发词 + sk- 值样式),不是「证明捕获所有秘密编码」;新颖编码 / 远离触发词的裸高熵秘密仍可能漏。
- 只脱
main_answer+ 心跳reason两个主出口面;结构化结果的其余子字段(supporting_evidence 等)与 ADR-010 的「综合层语义级」过滤留作后续。 - 「护栏」是门类(蓝图组件 11),本刀只闭了输出端 INV-11 凭证这一块;其余候选(INV-05 用户面字段收敛 / INV-02 输出契约复核 / 自检)仍开放,见 §4。
未推:FinBayes main 421fc0c(owner 议定 hold、不推 GitHub)。
§3duodecies 阶段 3 P1 护栏三连:INV-05 字段收敛 + 综合层语义级凭证脱敏 + 全子字段脱敏(✅ 完成,2026-06-05 本会话)
按盘点选定的 P1(真缺口 + 确定性可做)三块护栏,按 owner 议定顺序完成。
P1-1 · INV-05 用户面字段收敛(main f728bd7):FIELD_SURFACES(每字段 user_widget/internal_audit/both)此前只在契约测试里被断言、无产品代码强制——任何把整个 StructuredCognitionResult 序列化给用户的消费者都会漏 mca_bucket/posterior/s1 等 internal_audit 字段。
finbayes/rendering/surface.py:project_user_surface(result)按 FIELD_SURFACES 白名单(user_widget+both 入;internal_audit、未映射字段、None 全出)。白名单 by construction——新增内部字段默认排除直到显式给用户面(同刀 3 工具白名单哲学)。internal_audit 是丢弃、不翻译。- runtime:
RuntimeTurnResult加user_surface字段,accepted 时 =project_user_surface(脱敏后 result),收敛在出口主动产出。markdown 渲染器加回归 guard(源不读任何 internal_audit 字段)。
P1-2/P1-3 · ADR-010 综合层语义级凭证脱敏 + 全子字段脱敏(main 15741e5):发现刀 7 的真漏面——JudgmentCandidate 在回路内 stage(record_judgment_candidate(result)),用未脱敏 main_answer 作 judgment_body,秘密会持久进判断记录,runtime 出口脱敏(刀 7)看不到这条。
credential_filter.redact_result(result)→(result, hits):在合成输出处脱敏(ADR-010 综合层语义级点),覆盖main_answer+ 全部自由文本子字段(supporting_evidence/multi_perspectives/counter_evidence/prerequisites/invalidation_conditions/uncertainty_and_gaps/follow_up_questions);结构化/ID 字段与 internal_audit 字段不碰。上下文脱敏逻辑不变——合法的"妥善保管私钥"不误伤。- loop:
synthesize后、stage candidate 前调redact_result,命中写 audit;judgment_body落库即脱敏(闭持久化漏面)。ADR-010「两处都做」得到尊重:综合层(loop,主动脱敏+审计)+ 格式级最终扫描(runtime 出口,刀 7,对已净化结果再扫的兜底,常态 no-op);无双重审计。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 223 passed(214→223,+9:P1-1 投影/渲染 guard/runtime 收敛面 6 + P1-2/P1-3 子字段脱敏/干净原样/秘密 stage 前即脱 3)+ ruff 干净 + 零回归。
- 不设 live 门是诚实的:字段投影与凭证脱敏都是确定性过滤、无模型行为。
诚实划界:INV-05 当前在 runtime 出口与 markdown 两个用户面产出点强制 + 渲染器加 guard,其余未来 JSON 边界须调 project_user_surface(已是单一原语);internal_audit→产品语言翻译(user_widget_translation)是另一回事、未做。凭证脱敏是 best-effort 模式匹配、非穷尽。护栏门类仍剩 INV-02 输出契约复核 / 自检(见 §4)。
未推:FinBayes main 15741e5(owner 议定 hold、不推 GitHub)。
§3terdecies 阶段 3 护栏门类收尾:循环自检 + INV-02 核实(✅ 完成,2026-06-05 本会话)
把护栏门类剩下两块收掉。
自检 · 循环自检(参数指纹防原地打转,main 0474d58):grounding 回路 _ground_via_tools 此前无重复检测——模型若每轮都发同一个 (tool, arguments) 调用,会烧满 max_iterations 反复跑同一个 fetch、毫无进展。
_call_fingerprint(call):(name, 规范化 arguments)指纹(同名同参无论 JSON key 序/空白都映射到同一指纹)。_ground_via_tools:维护 seen 指纹集;重复调用丢弃;整轮全是重复 →terminated_reason="self_check_no_progress"提前停。distinct 调用不误伤。经现有agent_turn_completedaudit 自动 surface。
INV-02 · 条件化方向判断契约——核实已 enforced、不重建(substance over theater):盘点把 INV-02 列为护栏候选,但核查发现它早已强制 + 已测:types._enforce_directional_judgment_contract 验证器在 result 构造时强制(方向性 main_answer 必须带 成立条件/失效条件/反方证据/不确定性,否则 ValidationError),tests/invariants/test_i02_conditional_judgment.py 已覆盖(含缺任一条件字段即拒)。再建一个"输出契约复核"guardrail 是冗余表演(result 经 pydantic 构造时已契约有效、出口再查必过)。故只核实、不重做,如实记录。
验证(诚实——全确定性、不设 live 门):
- ✅ offline 225 passed(223→225,+2:重复调用→
self_check_no_progress工具只跑一次不烧满预算 / distinct 调用不误伤跑满预算)+ ruff 干净 + 零回归(既有回路测均即时收敛、不触工具路径)。 - 不设 live 门是诚实的:指纹去重是确定性逻辑、无模型行为。
护栏门类盘点(蓝图组件 11):输入端凭证拒绝 ✓ + 工具执行白名单 INV-01 ✓(第三切片)+ 注入扫描 ✓ + 输出端 INV-11 凭证脱敏 ✓(第七切片)+ INV-05 用户面字段收敛 ✓(P1-1)+ ADR-010 综合层语义级 + 全子字段脱敏 ✓(P1-2/P1-3)+ INV-02 条件化判断契约 ✓(构造时强制,本次核实)+ 循环自检 ✓(本刀)。门类基本闭合。 蓝图列的更深护栏(deny>ask>allow 多源权限聚合、控制面 write-deny)属多用户/部署期,单机本地形态暂不需要。
未推:FinBayes main 0474d58(owner 议定 hold、不推 GitHub)。
§3fin 阶段 3「加固与可用化」收尾盘点(待 owner review)
阶段目标回顾:阶段 1/2 已把"有大脑、无身体"补成带主回路 + 工具 + 数据 + 主动性的真 agent;阶段 3 的事是让它真正能被用起来、经得起用——补硬化与可用化,不加新认知能力。
交付清单(10 刀 merge + 1 核实,全部进 FinBayes main,按 owner 议定 hold、未推 GitHub):
| # | 切片 | 实质 | merge | offline |
|---|---|---|---|---|
| 1 | 真 runtime 入口 + INV-15 L3 闭合 | 移除旧 orchestrate_m0_question 单次路径,synthesize 全仓只剩回路内一处;L3 由 xfail 转回归门 | 02bc15c | 180 |
| 2 | 信号投递 + 跨 tick 去重(组件 10) | 心跳信号投 durable outbox + cooldown 去重,闭 Phase 2「每 tick 重发」缺口 | cdd6d82 | 189 |
| 3 | 工具执行白名单(INV-01) | 黑名单→白名单:工具须显式声明只读否则默认拒,执行边界由尽力而为变结构性保证 | 36e5c2b | 190 |
| 4 | 市场感知标的解析 | 修 BTC-USD 被拒 + 心跳静默漏判断 + USD≠USDT 坑;多市场显式降级 | 34cbaae | 199 |
| 5 | 认知核校准字段补全 | confidence/mca_bucket/posterior 补成 judgment_records 持久列(迁移 0007) | baa24a7 | 203 |
| 6 | 持久化抗损 | WAL + busy_timeout + synchronous=NORMAL + transaction() 原子原语 + 去重写入原子化 | b2ed2c4 | 206 |
| 7 | 输出端 INV-11 凭证脱敏 | credential_filter 单一事实源 + 上下文脱敏(避 tx hash 误伤)+ 反转 evals→finbayes 依赖 | 421fc0c | 214 |
| P1-1 | INV-05 用户面字段收敛 | FIELD_SURFACES 声明→强制白名单投影 + runtime 出口产出收敛面 + 渲染器 guard | f728bd7 | 220 |
| P1-2/3 | 综合层语义级 + 全子字段脱敏 | redact_result 合成输出处脱敏全文本字段,闭"秘密持久进 judgment_body"漏面 | 15741e5 | 223 |
| 收尾 | 护栏·循环自检 | 参数指纹防原地打转:重复 (tool,args) 调用丢弃、整轮全重复提前停 | 0474d58 | 225 |
| — | INV-02 条件化方向判断契约 | 核实已由 _enforce_directional_judgment_contract 验证器构造时强制 + test_i02 覆盖,只核实不重建(substance over theater) | — | — |
验证口径(诚实,非漏测):阶段 3 全部切片确定性、无模型行为(字段持久化 / 并发 pragma / 凭证模式匹配 / 字段投影 / 指纹去重),故都不设 live 门、离线测足够——这是诚实口径不是省测。模型行为的 live 门已在阶段 1(I-15' L2 真 gpt-5.5 真调工具 239s)与阶段 2(INV-16 真 gpt-5.5 skip/run 76s)闭。offline 从阶段 2 末 179 → 225,全程零回归、ruff 干净;每刀均经独立审计(实施自报之外的复核)。
护栏门类盘点(蓝图组件 11)——基本闭合:输入端凭证拒绝 + 工具白名单 INV-01 + 注入扫描 + 输出端 INV-11 脱敏 + INV-05 字段收敛 + 综合层语义级/全子字段脱敏 + INV-02 条件化契约 + 循环自检,8 块全过。更深的 deny>ask>allow 多源权限聚合 / 控制面 write-deny 属多用户/部署期,单机本地形态暂不需要。
刻意 deferred / 不在阶段 3(写清触发条件,非遗漏):
- 语义检索 / 上下文记忆补强其余:现有"近期历史 + 滚动摘要"够用;核心的判断召回已由心跳全量扫 confirmed 判断覆盖、不依赖语义检索。触发条件 = 有真实使用手感后再定检索口(ADR-017 明确"RAG 不预设为最优")。代码仓 hold、无使用数据,现在设计必然是猜。
- 判断跟进+校准(组件 14):owner 2026-06-04 已议定移出编号阶段,作单独产品设计课题。
- 规划与拆解 / 子代理 / 多渠道其余前门 / 可观测性深化(P3):偏能力扩展,更像下一阶段而非"加固"。
已知残留(低紧迫、记录在案、非阻塞):
- 状态写 + 审计跨事务原子性(审计是 trace、非事实源,崩溃丢一条不损状态)。
- 迁移 runner DDL + history 记录有极窄 partial-apply 窗(仅非幂等迁移重跑才撞)。
- INV-05 当前在 runtime 出口 + markdown 两个产出点强制 + 渲染器 guard;未来新增 JSON 用户面边界须调
project_user_surface。 - 凭证脱敏是 best-effort 模式匹配(keyword/触发词 + sk- 值),非"证明捕获所有秘密编码"。
待 owner 的 milestone 决策(review 后定):
- 阶段 3「加固与可用化」是否正式收尾签字。
- FinBayes 代码仓 hold(main
0474d58、ahead 24、未推 GitHub)是否解——所有 deferred 项(语义检索 / 校准)都要真实使用手感才能设计好,而真实使用要先让 agent 跑起来;当前真正的瓶颈是这个,不是再堆代码。 - 是否进入下一阶段(能力扩展 / 判断跟进+校准产品设计 / 部署)。
§3fin-audit 阶段 3 主控独立审计验收(2026-06-05 本会话)
区别于工程会话的逐切片自报(§3quinquies–§3fin),主控做了不信报告的独立核实:自己跑离线测试 + 读高风险切片源码 + 读 live 门测试文件。
独立核实到的(证据,非报告字面):
- 离线测试主控自跑:
uv run pytest→ 225 passed, 5 skipped(5 个真模型 live 门、正常跳过), 0 失败, 1.33s。报告「179→225 零回归」属实。 - 三条历史发现全闭(查码核实,非信 docstring):① INV-15 L3——旧
orchestrate_m0_question在 src 已删,synthesize_cognition(全仓只剩回路内一处,L3 测试已由 xfail 转常规回归断言(断言 orchestration 无顶层直调 + runtime 经run_agent_turn到达);② INV-01 执行边界——tools.py的Tool.access必填、register()对非read_only注册期抛错,工具名永不决定准入,是结构性白名单,且 docstring 诚实「信任经评审的声明、非证明 handler 无副作用」;③ 信号跨 tick 去重——signal_delivery.py用单个BEGIN IMMEDIATE事务做「查重+写入」原子化(并发正确,防两 tick 双发)。 - INV-11 凭证脱敏(安全攸关)读实:
credential_filter.py单一事实源、输出脱敏是上下文式(sk-无条件脱、长高熵串仅紧跟触发词才脱——避开 tx hash/地址误伤)、redact_result覆盖全自由文本子字段、综合层 + runtime 两道(ADR-010 两处都做);诚实标 best-effort。 - 双层验证纪律核实——「不完整的绿」教训真吸收:唯一有端到端集成行为的切片(runtime 入口)有真模型 live 门——主控读了
tests/integration/test_runtime_live.py,确认是真 gpt-5.5 跑run_runtime_turn端到端落判断 + 凭证拒收两条,gatedFINBAYES_LIVE_RUNTIME、owner shell 57.93s 跑过;其余纯确定性切片(白名单/去重/持久化/脱敏/标的解析)才用离线 + 诚实论证,不是一刀切「确定性所以免测」。 - 主控自纠:审计途中主控一度误判「runtime 无端到端 live 门」,读
test_runtime_live.py后纠正——它存在且为真 live 门(这正是「查文件、别信自己的假设」)。
留账(均已被工程会话诚实披露、不阻塞验收):① 信号去重按失效条件原文精确匹配,改写措辞会漏;② 凭证输出脱敏的上下文正则要求触发词与值相邻,远距离泄漏靠输入端拒收 + agent 只读兜底。两条都是 best-effort 的诚实边界,非藏坑。
审计结论:阶段 3 实质达成、双层验证纪律完整、护栏门类闭合、无藏坑、仍在建 agent(runtime 入口让它第一次能端到端被用起来,不是退回磨单次回答)。主控验收:通过、可 push。(正式 milestone 签字是 owner 的;push 动作是工程会话的;主控建议二者皆可。)赞同 §3fin 的正轨判断:真瓶颈是让 agent 真实跑起来攒手感,不是再堆代码——这与 owner 议定「判断跟进+校准等真实手感再设计」一致。
§4 下一步 + 治理连带过期项(待 owner 定,主控不擅自改 ADR)
下一步:① 阶段 0 文档矫正(硬前置) ✅ 已完成(2026-06-04 本会话,见 §3bis);② 阶段 1 最小可用真 agent ✅ 已完成并 merge 推送(2026-06-04,FinBayes main 8a274f3;I-15' L2 真 gpt-5.5 live 烟测 239s 闭门;独立审计三点全闭见 §3ter);③ 阶段 2 主动性 ✅ 已完成并 merge(2026-06-04,FinBayes main 875518a;心跳无人提问扫 confirmed 判断、市场触及失效条件主动发复盘信号;I-16' 真 gpt-5.5 skip/run live 门 PASSED 76s;详见 §3quater);④ 阶段 3 · 加固与可用化(让 agent 真正能被用起来、经得起用):建真 runtime 入口走回路、移除旧 ✅ 第一切片已完成并 merge(2026-06-05,main orchestrate_m0_question 单次路径使 INV-15 L3 由预期失败转通过02bc15c,offline 180 + 真 gpt-5.5 live 2 条 PASSED 57.93s;详见 §3quinquies);上下文记忆补强已做一半(跨会话历史已穿进 runtime 认知);信号投递(IM/Web)、主动信号跨 tick 去重/cooldown ✅ 第二切片已完成并 merge(2026-06-05,main cdd6d82,组件 10 投递到 durable outbox + cooldown 去重,闭 Phase 2 审计缺口;offline 189,全确定性、不设 live 门;详见 §3sexies)。认知/执行隔离墙白名单(INV-01 黑名单→白名单) ✅ 第三切片已完成并 merge(2026-06-05,main 36e5c2b,工具执行边界改白名单:工具须显式声明只读否则默认拒,INV-01 执行边界由尽力而为变结构性保证;offline 190,全确定性、不设 live 门;详见 §3septies); ✅ 第四切片已完成并 merge(2026-06-05,main fin_object_ref ↔ 拉价符号归一化34cbaae,市场感知标的解析:修 BTC-USD 被拒 + 心跳静默漏判断 + USD 默认坑,多市场显式降级、跨市场识别划归认知核 M1;offline 199,全确定性、不设 live 门;详见 §3octies)。【当前下一步 = 阶段 3 余项】上下文记忆补强(其余)【建议下一刀,半开放需定向】、认知核丢字段补全(§3nonies)、持久化抗损(§3decies)、护栏输出端 INV-11 凭证脱敏(§3undecies)、P1 护栏三连 INV-05 字段收敛 / 综合层语义级脱敏 / 全子字段脱敏(§3duodecies)、护栏门类收尾 循环自检 + INV-02 核实(§3terdecies)已完成——护栏门类基本闭合。✅ 阶段 3「加固与可用化」核心实质完成、待 owner review 收尾(收尾盘点见 §3fin);唯一余项语义检索经 owner 议定 defer。(2026-06-05 余项清晰度澄清,压缩前留底——这些项成熟度不一,别再并列当现成任务):(a) ✅ 认知核丢字段补全已完成(2026-06-05 第五切片,main baa24a7,详见 §3nonies):confidence/mca_bucket/posterior 从「算完即丢」补成 judgment_records 持久列(migration 0007),贯通算→候选→确认 carry-through→durable 列→读回,给推迟的判断跟进+校准(组件 14)铺基础;纯持久化、offline 203 测零回归、确定性无 live 门。(b) ✅ 持久化抗损已完成(2026-06-05 第六切片,main b2ed2c4,详见 §3decies):connect() 加 WAL + busy_timeout + synchronous=NORMAL 解决并发同写撞 database is locked + transaction() 原子写原语 + 心跳去重检查写入原子化(闭 check-then-write race);诚实划界整轮问答不做单一事务(LLM 在回路中、每个离散写本就各自原子)、状态写+审计两事务为良性残留、迁移 runner partial-apply 窄窗记为已知残留;offline 206、确定性无 live 门。(c) 护栏(门类,大部完成)——蓝图组件 11 自检与护栏:输入端凭证拒绝 + 工具白名单 + 注入扫描已建;✅ 输出端 INV-11 凭证脱敏(第七切片,§3undecies)+ ✅ INV-05 用户面字段收敛 + ADR-010 综合层语义级凭证脱敏 + 全子字段脱敏(P1 三连,main f728bd7→15741e5,§3duodecies)均已完成。✅ 循环自检(参数指纹防原地打转,第 §3terdecies,main 0474d58)+ INV-02 条件化判断契约核实已 enforced(验证器构造时强制 + test_i02,未重建)均已完成——护栏门类基本闭合(单机本地形态不需要 deny>ask>allow 多源权限 / 控制面 write-deny 那类多用户护栏)。(d) 上下文记忆补强其余 / 语义检索——经 owner 2026-06-05 议定 defer:现有"近期历史 + 滚动摘要"够用,核心判断召回已由心跳全量扫 confirmed 判断覆盖、不阻塞;触发条件 = 有真实使用手感后再定检索口(ADR-017)。不在阶段 3 收尾范围,待真实使用后再启。⑤ 判断跟进+校准(=原「问责」,曾被误标为「阶段 3 核心 P0」):按 owner 2026-06-04 议定移出编号阶段,作单独产品设计课题,待真 agent 用起来、有真实手感后再设计(组件 14:判断登记可证伪断言 + 两层验证枚举 verification_status/verdict + 按市场结构分组的校准记录)。术语整顿已落地(ADR-022 + 代号与编号索引 + glossary 回写 + 活文档传播,commit 484e95f→838c350):问责→判断跟进+校准、硬化铺面→加固与可用化、三态结算→两层验证枚举、交易行动前检查→交易决策参考材料、五件套→金融认知体系、市场结构横切维度→市场结构分轴、横切→跨机制、I-NN'→INV-NN(撇号去)。剩余:代码标识符改名(INV-NN/s1,交工程会话,先词后码)+ FinTecEval 叙事对齐(归该 workstream)+ 历史 review/案例/蓝图原样留作 audit trail。 蓝图已矫正完,阶段 1–2 已交付。
治理连带过期项(这些与现状产生张力,主控不单方面改 ADR,列此等 owner 定):
- ✅ 已落地:kelly_cap 移除 → ADR-021 记录退役,传播到 MP-3 / ADR-019 / 不变量 I-06' / MP-4 / MP-5 / glossary。
- ✅ 已落地(2026-06-05 本会话):方案 Z 对 martin "不复用" → 改"研究 / 借鉴 / 集成",轻量 ADR 已补(ADR-023,含 Phase 0→3 实际借鉴的 audit trail)。
- ADR-020 可问责定位 → 蓝图里重新摆位为"组件层"。
- SVA-9 里程碑 gate 机器(L4 Archon / L8 vibe check)+ L5/L7/L8 评测维度 → 阶段 0 已把 agent 行为门嵌入 per-milestone 验收(product §12 / arch M2 / whitepaper §7);正式 D/V 维度 + L8 vibe 评测口径按 agent 行为重排仍待 owner 定(不擅自重写 SVA-9 评测契约)。
- I-14' → 无需改(我之前误读,已纠正)。
- 【阶段 0 新增】战略白皮书 frame 矫正(§1 愿景图闭环 + agent 本体定性)建议在
finbayes-whitepaper-rewriteworkstream 补一条回溯 ADR(已在白皮书文末 Audit trail 标注)。 - 【阶段 0 新增】L0.5 不变量 I-15'/I-16'(建造态 identity 不变量)建议补一条轻量 ADR 增补走不变量文件 §2 SOP 正式收录(与第 6 条一并)。
- ✅ 已落地(2026-06-04 本会话扫净):kelly_cap 退役传播此前漏扫 architecture §29 + 5 个 engineering-pack(cognition-1.1-contract / m0 / m1_5 / m1_6 / eval-harness)+ pending-decisions-owner-map,现全部清理(现行字段 / 契约引用删除、退役决策记录标注、posterior 双峰 mode_a/mode_b/tail_width 保留)。遗留待 owner / FinTecEval:eval-harness D6/D11 移除
C_kelly项后的权重重新归一属评测契约决定,本次只标退役、未改权重。
重排到 agent 框架下(蓝图定建造顺序后再排):kill-or-confirm 实验、校准账本。(方案 Z 借鉴 / 集成 ADR 已补,见上 §4 连带项第 2 条 → ADR-023。)
§5 协议与锚点
- Update 协议:PR merge / milestone 切换 / P0 签字 /
/compact前 / context 恢复前 → 主控自动 dump 并 git commit;新 blocker → 任一 Agent / owner。任何 update 必须 git commit(FB-RESUME §6)。 - hydration 读取顺序:① 本文件(§0 + §1 + §4);② 金融真智能体骨架蓝图(提案)· 议定结果段——当前阶段的行动依据;③ 个人域 memory(自动加载:先建智能体 / 实质而非表演 / 本仓路径与借鉴标的 / 术语纪律);④ ADR-011 · FB-RESUME;⑤ 最近 5 个 commit;⑥ 需要时 martin CodeWiki / 五维解剖 / 本轮复盘。
- 术语与编号(2026-06-05 整顿后,所有会话必读):一律以 ADR-022 术语整顿 + 代号与编号索引 + glossary 为准。新代码 / 新文档不得再用旧词:问责→判断跟进+校准、三态结算→验证状态+验证结论两层枚举、校准账本→校准记录、交易行动前检查→交易决策参考材料、五件套→金融认知体系、市场结构横切维度→市场结构分轴、S1 横切子流程→跨机制子流程、
I-NN'(撇号)→INV-NN。工程会话专项:代码标识符I-NN'→INV-NN、s1等改名是工程会话的活(先词后码,映射见代号索引),写阶段 3 代码时一并做、且新代码直接用新词。 - 早期富历史(M0→M2 逐 PR、SVA-9 P0 清单、各轮 review 整改)见本文件 git 历史与
decisions/目录。