跳到主要内容

ADR-012 — SVA-9:战略愿景对齐九层防御方案

§0 决策简述

决议:FinBayes 工程化落地的对齐目标,从"对架构文档/产品定义文档保真度 100%"升级为"战略愿景对齐(Strategy-to-Vision Alignment, SVA)"——交付的产品必须 100% 兑现战略白皮书 / 产品定义 / 架构文档联合阐述与预期的 FinBayes,且不会因为落地走偏,导致交付后还要数轮大迭代才能回归战略愿景。

实现手段:九层愿景保障栈(L0.5 → L8)。每一层正向保障愿景的一个侧面被兑现,并各自划清一条兜底边界(这一层负责接住什么、不接住什么)。九层覆盖:隐式不变量 codify、契约源、契约测试、三阶段实施 SOP、Archon 编排 gate、功能正确性评测、人最终签字、战略姿态评测、真人使用体验校验。

叙述口径(承接 2026-05-29 fresh review W3):本 ADR 的框架不是"九层防什么",而是"为兑现战略愿景,每层正向保障什么 + 兜底边界划在哪"。原因:目标是 100% 兑现愿景(Build-Y),把每层叙述成"防 X"会把正向保障压扁成禁令——与 ADR-013 codify 哲学换轨 的 Build-Y 优先口径一致。九层的实质不变,只是叙述从 Prevent 口径转为 Build-Y 口径 + 标注兜底边界。

§1 上下文:为什么"保真度 100%"不够

Step 10-13 review 闭环暴露的核心问题:所谓"保真度 100%"是工程化产物对一份冻结文档的语义对齐度,但战略愿景包含文档之外的隐性约束:

  1. 隐式不变量:白皮书写了"FinBayes 不下单",但什么代码路径能违反它?需要 codify 成不变量测试,否则只是文字承诺。
  2. 价值姿态:白皮书定义"用户主权 / 认知透明 / 不替决策"是战略价值,但代码层很容易绕过——比如返回一个 confidence_score 当 single number 就破坏了"认知透明"。
  3. 演进对齐:架构 / 产品文档会迭代,工程化落地若只盯当前快照,新版本一出就过时。

仅靠"保真度评测(D 维度)+ 人签"两层不够,因为:

  • D 维度只测"功能对不对",不测"姿态对不对"
  • 人签依赖签字人当下的注意力,无系统性兜底

升级路径:在既有 6 层之上插入 3 层新保障(L0.5 / L7 / L8),并把既有 6 层中"模糊"的 3 层(L3 / L4 / L8 旧定义)做明确 SOP 化。

§2 SVA-9 九层愿景保障栈

下表每层给三件事:正向保障什么(这一层让愿景的哪个侧面被兑现)、兜底边界(这一层接住什么、把什么交给别层)、M0 阶段(M0 必跑 / M1+ 再上)。判定的去重原则见 §2bis(L5/L6/L7/L8 不互相承担)。

名称正向保障什么兜底边界M0 阶段落地物
L0.5隐式不变量 codify把白皮书"用文字承诺"的隐性约束(不下单 / 不替决策 / 用户主权 / 8 机制定义不被代码层重定义)变成代码可断言的正向契约只接"可 codify 成 test 的隐性约束";禁用词类风格约束交 verify:kb hook(见 ADR-013 §3.3)M0 必跑(10 条核心)strategic-invariants-codified.md + tests/invariants/*.py
L1契约源字段级 / API 级 / 行为级显式契约就位,下游有单一事实源可读只定义契约,不执行校验(校验在 L2)M0 必跑contracts/ + engineering-packs/ + ADR
L2Contract test代码自动断言 L1 契约成立(结构、类型、必填、跨文档一致)只判"代码与契约是否一致",不判功能好不好用(L5)、姿态对不对(L7)M0 必跑Pydantic models + tests/contract_v1_1.py + 跨文档一致性 grep
L3三阶段实施 SOP每个 PR 显式 plan → execute → verify,正向产出与验证段对称只管实施过程合规,不判产物质量M0 必跑ADR-003-supplement-3-phase-implementation-SOP.md
L4Archon workflow gate把各层节点串成可重跑的 milestone 工作流,跑得起来才算过只编排与门控,不替任何被串接的层做判断M0 必跑(M0 工作流到位即可,节点可逐步接入).archon/workflows/milestone-MN.yaml(真 Archon schema)
L5D 维度功能评测功能正确性:产物内容对不对(D1-D11,如证据是否成立、字段值是否合理)只判"内容功能层对错";不判流程(L6)、不判战略姿态(L7)、不判真人体感(L8)M0 必跑(核心 D 维度子集;全量 D1-D11 M1+)contracts/evaluation-dimensions.yaml + engineering-packs/eval-harness-formulas.md
L6人最终签字决策问责:一个不可推卸的 owner 看过 L0.5/L5/L7 报告后对 milestone 拍板放行只判"流程是否合规 + 谁负责";不重做评测(评测是 L5/L7 的事,L6 是看报告签字)M0 必跑PR review + milestone gate(owner = 项目 owner)
L7V 维度战略姿态评测战略姿态:产物的姿态对不对(V1 不替决策 / V2 认知透明 / V3 用户主权)——AI judge 但不 self-judge只判"姿态是否守住战略价值";不判功能对错(L5)、不替真人下体验结论(L8)M0 必跑(V1/V2/V3 各 1 组 prompt 即可起步;全量 prompt 集 M1+)v-dimension-evaluation.md + Claude judge prompt
L8真人使用体验校验真实体感:真人用过之后"这是不是 FinBayes 该有的样子"——所有 AI 评 AI 之外的最终人类锚只判"真人主观体感";不替代功能/姿态的客观评测(L5/L7 先过,L8 才有意义)M1+ 再上(M0 可选轻量化:1 case × 10 分钟试跑,不作 hard gate)l1-user-vibe-check-cases.md

§2bis · L5/L6/L7/L8 去职责重叠

四层最容易被理解成"都在评测",导致重叠。明确分工——各判一件事,不互相承担

判的是谁来判不负责
L5 D 维度功能对不对(内容客观正确性)EvalHarness 自动 + 公式姿态、流程、体感
L7 V 维度姿态对不对(战略价值守没守住)AI judge(不 self-judge)功能对错、体感
L8 真人体验体感顺不顺(真人主观"是不是 FinBayes")真人(项目 owner)客观评测(前置依赖 L5/L7)
L6 人签谁拍板放行(看完上述报告问责签字)项目 owner重做任何评测

一句话:L5 评功能、L7 评姿态、L8 校体感、L6 担问责。L6 不重做 L5/L7/L8 的评测,只在它们报告齐备后签字;L8 在 L5/L7 客观评测过关后才上,避免真人替机器做客观判断。

L0.5 · 隐式不变量 codify(新增)

目的:把白皮书 / 产品定义里"用文字承诺"的约束变成"代码可断言"的不变量。

实现:起一份 strategic-invariants-codified.md,列出 N 条不变量(M0 阶段 10 条核心,后续滚动补)。每条给:

  • 来源(白皮书 §X / 产品定义 §Y)
  • 不变量陈述(一句话)
  • 反例(违反的代码 / 输出长什么样)
  • test 规格(Pydantic validator / unit test 思路 / grep pattern)

M0 必备:10 条不变量见 strategic-invariants-codified.md(与本 ADR 同 commit 落地)。

何时升级:架构 / 产品 / 白皮书每次迭代后,30 分钟扫一遍——新引入的不变量是否需要补 codify。

L1 · 契约源(既有)

承接 Step 11 整改包 I 的 contracts/ 单一事实源层,承接现有 engineering-packs/ + ADR 体系。本 ADR 不修改 L1 定义,只把它纳入 SVA-9 框架。

L2 · Contract test(既有,M0 第一个 PR 落地)

承接 Step 11 既有规划。M0 第一个 PR 必须包含:

  • tests/contract_v1_1.py:StructuredCognitionResult 1.1 字段 / 类型 / 必填校验
  • tests/invariants/*.py:L0.5 不变量映射代码(每条不变量 ≥ 1 个 test)

L3 · 三阶段实施 SOP(新增 supplement)

目的:防范"直接动手 coding 而不先 plan / 后 verify"。借鉴 GSD(Get-Stuff-Done)范式但不引入其工具。

SOP:每个 PR(不论 Codex 还是 Claude 实施)必须显式三阶段:

  1. plan:在 PR 描述里写"做什么 / 为什么这样做 / 风险点 / 不做什么"——50-200 字
  2. execute:写代码 + commit
  3. verify:跑 npm run verify:kb + 跑 contract test + 跑 invariant test + 自我 review checklist

落地:见 ADR-003-supplement-3-phase-implementation-SOP.md(本 commit 同步落地)。

L4 · Archon workflow gate(既有,P0-6 重写已落地)

承接 ADR-003 既定的 Archon 编排引擎。每个 milestone 的 .archon/workflows/milestone-MN.yaml真 Archon schema(name / description / nodes,nodes 含 bash / prompt / approval + depends_on),不脑补字段。M0 的 milestone-M0.yaml 已由 P0-6 重写到位并经 archon validate workflows milestone-M0 通过。富 gate 语义(pass_criteria / 阈值 / required_checks / 约束门 / 验收 trigger)落在契约规约 .archon/specs/milestone-M0.spec.yaml(P0-7:旧富 yaml 改后缀并迁出 workflows/ 扫描目录——实测 *.yaml glob 会扫描 .spec.yaml 并因缺 name 报错,故仅改后缀不足,须迁至 .archon/specs/);可执行 DAG 的 prompt 一律指向规约同名节点,不抄契约正文,规避契约分裂。

L5 · D 维度功能评测(既有)

承接 ADR-007 supplement · 金融认知体系第一版正式构成 已规划的 D1-D11 评测体系。本 ADR 不修改 L5 定义。

职责边界:L5 只判功能内容对不对(证据是否成立、字段值是否合理)。姿态对不对交 L7,真人体感交 L8,流程问责交 L6。

M0 阶段:M0 跑核心 D 维度子集即可起步(覆盖 main_answer / supporting_evidence / sources 正确性),全量 D1-D11 M1+ 补齐——避免 M0 第一个 PR 就被 11 个维度全量评测压住。

L6 · 人最终签字(既有)

承接 Step 11 整改包 III 决策权分级与 owner map。本 ADR 不修改 L6 流程。

职责边界:L6 不重做评测——L5(功能)、L7(姿态)、L8(体感)的报告齐备后,owner 看完拍板放行并对结果问责。L6 保障的是"有一个不可推卸的人负责",不是"再评一遍"。

M0 阶段:M0 必跑。

L7 · V 维度战略价值评测(新增)

目的:D 维度只测"功能对不对",V 维度测"姿态对不对"。

3 个 V 维度

  • V1 不替决策(NotDeciding):FinBayes 输出有没有越界帮用户拍板?反例如"建议买入 NVDA"。
  • V2 认知透明(CognitiveTransparency):用户能否看到推理过程?反例如只给一个 confidence score 没有 reasoning。
  • V3 用户主权(UserSovereignty):用户能否随时退出 / 拿走数据 / 不被锁定?反例如某 prompt 让用户必须遵循 FinBayes 给的判断框架。

职责边界:L7 只判姿态对不对(守没守住战略价值);功能对错交 L5,真人体感交 L8。L7 与 L5 都用 AI,但判的东西正交——L5 判"算得对不对",L7 判"姿态越没越界"。

评测方法:用 Claude 当 judge(不是 self-judge,要求 judge 输出 V1/V2/V3 分数 + 反例引用)。

M0 阶段:M0 起步只需 V1/V2/V3 各 1 组 prompt(保证三个姿态维度都被触碰),全量 10 组 prompt 集 M1+ 补——M0 不必一次铺满全量 prompt。

落地:见 v-dimension-evaluation.md(P0-4 落地)。

L8 · 真人使用体验校验(新增)

目的:L5(功能)/ L7(姿态)都是 AI 评 AI(包括 Claude judge AI),最终人类锚必须有真人体感。

职责边界:L8 只判真人主观体感("这是不是 FinBayes 该有的样子");它不替机器做客观判断——功能客观对错是 L5、姿态客观越界是 L7。因此 L8 在 L5/L7 客观评测过关后才上才有意义。

M0 阶段(减负):M0 第一个 PR 阶段的产物多为 stub / 中间态,真人 30 分钟全量体验性价比低,因此 M0 改为可选轻量化:1 case × 10 分钟试跑,不作 hard gate(结论入 milestone log 即可)。M1+ 起恢复完整 SOP

M1+ 完整 SOP:每个 milestone 跑 1 次:

  • 用户用 FinBayes 完成 3 个 case(每个 ≤ 10 分钟)
  • 用户填一张 5 题问卷(用得顺不顺 / 信不信 / 是不是 FinBayes / 哪里别扭 / 是否会再用)
  • gate:3 个 case 中 ≥ 2 个用户 confirm "是 FinBayes 该有的样子" → milestone pass

落地:见 l1-user-vibe-check-cases.md(P0-5 落地)。

§3 与既有体系的关系

既有SVA-9 怎么承接
ADR-001 工程范式(M0/M1/.../ 三检 review gate)M1+ 每个 milestone 必跑 L0.5 → L8 全 9 层;M0 减负:L8 真人体验降为可选轻量化、L5 跑核心子集、L7 跑各维度 1 组 prompt(详见 §2 表 M0 阶段列);三检 review gate 是 L5/L6/L7 的具体落地形式
ADR-003 工程实施栈(OpenSpec + Archon + Claude + Codex)L4 = Archon gate;L3 = supplement 落地的实施 SOP;Claude/Codex 分工不变
ADR-011 FB-RESUMESVA-9 是"实施质量层";FB-RESUME 是"推进连续性层"。两者并存,FB-RESUME 让 SVA-9 能跨 session 长跑数月
Step 11 整改包 I/II/III/IVI = L1;II = L4;III = L6;IV = 跨 section 校验属于 L2/L3
Step 12 角色互换 review属于 L6 之上的兜底机制,不在 9 层内但承接 9 层
Step 13 元根因深度分析SVA-9 的 L7/L8 是对 Step 13 "AI 自审 AI 必然不收敛"的工程化答案——L7 引入"AI judge 但不 self-judge",L8 引入"真人 vibe"

§4 九层落地物锚点(M0 启动时刻状态)

落地物路径状态
L0.5governance/workstreams/finbayes-arch-rewrite/strategic-invariants-codified.md本 commit 落地(P0-3)
L0.5tests/invariants/*.py(在工程仓 FinBayes)M0 第一个 PR 落地(C-1)
L1contracts/ + engineering-packs/ + ADR已有
L2tests/contract_v1_1.py(在工程仓 FinBayes)M0 第一个 PR 落地(C-1)
L3ADR-003-supplement-3-phase-implementation-SOP.md本 commit 落地(P0-2)
L4.archon/workflows/milestone-M0.yaml(真 schema 可执行)+ .archon/specs/milestone-M0.spec.yaml(契约规约)P0-6 重写已落地(archon validate 绿)
L5contracts/evaluation-dimensions.yaml + engineering-packs/eval-harness-formulas.md已有 D 维度,V 维度由 P1-1/P1-2 补
L6PR review + milestone gate(owner = 项目 owner)已有
L7v-dimension-evaluation.mdP0-4 落地
L8l1-user-vibe-check-cases.mdP0-5 落地

§5 触发:何时升级到哪一层

场景触发层
新 PR openedL1 contract 读 → L2 contract test 跑 → L3 SOP 三段都得 explicit
M0 milestone gate(减负)L0.5 invariant test + L2 contract test + L4 archon workflow + L5 核心 D 子集 + L6 人签 + L7 V1/V2/V3 各 1 组 prompt;L8 降为可选轻量化(1 case × 10 分钟,不作 hard gate)
M1+ milestone gate(完整)全 9 层都必跑一次(L0.5 invariant test + L2 contract test + L4 archon workflow + L5 全量 D 维度 + L6 人签 + L7 全量 V 维度 + L8 完整 3 case vibe check)
战略白皮书 / 架构文档迭代L0.5 + L1 + L7 重审 30 分钟
紧急 hotfix至少 L2 + L3 verify 段 + L6 人签;可豁免 L7/L8(hotfix log 注明)
持续推进无 milestone gate滚动跑 L2 + L3 即可,不必每 PR 全 9 层

§6 反模式(禁止)

  • 跳过 L0.5 直接写代码 —— 白皮书的不变量没 codify,等于没承诺
  • L2 contract test 用 mock 数据绕过真接口 —— 必须真跑 1.1 契约
  • L3 plan 写 < 50 字 / 不写 verify 段 —— 等于没过 SOP
  • L7 用 self-judge(Claude 评 Claude 的输出) —— 必须 Claude judge Codex 的输出 / 反之
  • L8 vibe check 用 mock 用户 —— 必须真人(项目 owner 本人)
  • L6 人签前没看 L0.5 / L7 报告 —— 等于空签
  • 任何一层 fail 但 milestone gate 强过 —— 系统性破坏,必须回退

§7 后果

收益

  • 战略愿景对齐有系统性兜底,不依赖单点注意力
  • 9 层并行运转,单层 fail 不会拖垮整体(其他层仍能 catch)
  • 实施成本相对低:L0.5 / L7 / L8 三个新增层都是文件 + 简单流程,不引入新工具
  • 与既有体系兼容(L1/L5/L6 不动),只是把"模糊承诺"显式化

成本

  • M1+ 每个 milestone 多了 ~3 小时(V 维度 1.5h + 真人 vibe check 1h + L0.5 不变量 review 0.5h)
  • M0 减负后 约 ~1.5 小时(V 维度各维度 1 组 prompt ~0.5h + L5 核心子集 + L0.5 review 0.5h + L8 轻量 1 case 10 分钟可选)——避免 M0 第一个 PR 被全量评测压住
  • 项目 owner 在 M1+ 每个 milestone 投入 30-60 分钟做 L8 vibe check(不可代劳);M0 可选轻量化
  • L7 judge prompt 需要随白皮书 / 产品定义迭代而维护

风险与缓解

  • 风险 1:L0.5 不变量列得过多导致 PR 老 fail
    • 缓解:M0 仅 10 条核心,后续滚动加;不变量必须配反例验证可 fail,否则不收录
  • 风险 2:L7 V 维度 judge prompt 漂移
    • 缓解:judge prompt 进 git,跟着白皮书版本走;每季度 sanity check
  • 风险 3:L8 vibe check 用户疲劳(每个 milestone 都跑 30 分钟)
    • 缓解:M0/M1 高频,M2+ 改为每 2 个 milestone 跑 1 次

§8 SOP 速查(M0 启动前必备)

C-1(M0 第一个 PR)开 PR 之前必须就位:

#状态
1L0.5 strategic-invariants-codified.md(10 条 + test 规格)P0-3
2L3 ADR-003-supplement-3-phase-implementation-SOP.mdP0-2
3L4 .archon/workflows/milestone-M0.yaml 真 Archon schema(archon validate 绿)P0-6 ✅
4L7 v-dimension-evaluation.mdP0-4
5L8 l1-user-vibe-check-cases.md(3 case 草案,M0 仅试跑 1 case 轻量化、不作 hard gate)P0-5
6milestone-M0.yaml 改后缀 .spec.yaml 并迁至 .archon/specs/(避免被 workflows/ 扫描报错)P0-7 ✅
7V1-V4 协作环境验证(archon doctor / validate / serve / hello-world)全绿C-1 启动 hard gate

§8bis Audit trail / Changelog

日期调整理由原结论是否保留
2026-05-29承接 fresh review W3 · 九层减负 + 叙述正向化:① §0 / §2 叙述口径从"九层防御 / 每层防什么"改为"为兑现愿景每层正向保障什么 + 兜底边界";② 新增 §2bis 明确 L5/L6/L7/L8 去职责重叠(L5 评功能 / L7 评姿态 / L8 校体感 / L6 担问责,不互相承担);③ §2 表新增"M0 阶段"列,标注 M0 必跑 vs M1+ 再上——L8 真人体验 M0 降为可选轻量化(1 case × 10 分钟、不作 hard gate)、L5 跑核心 D 子集、L7 跑各维度 1 组 prompt;④ §3 / §5 / §7 / §8 同步标注 M0 减负原方法论文档自身仍部分防御过重:L5/L6/L7/L8 评测层职责重叠、每 milestone +3h 对 M0 过载、命名偏 Prevent(目标其实是 100% 兑现愿景 = Build-Y)。本次去冗余 + 减 M0 负担 + 叙述正向化,与 ADR-013 Build-Y 优先口径对齐保留。九层实质不变、不删任何一层;只去职责重叠、标注 M0/M1+ 分期、把叙述口径从 Prevent 转 Build-Y

§9 关联资产