13 条契约型不变量 · deep design spec(draft 待用户审定)
本文是 spec / draft,不是 final。基于 A1 战略原意打捞 + A2 范式扫描 + A3 字段集审计三份诊断报告综合产出,待用户审定后才会重写
strategic-invariants-codified.md。codify 哲学换轨:从禁令型(Prevent-X)→ 契约型(Require-X-when-Y),借鉴 ADR-009 三级硬度:
- identity(永不变 / 改即非 FinBayes)
- 当前版本立场(v3 版本约定,未来 ADR 可重审)
- 工程约束(按 PR / ADR 可灵活调整)
§0 13 条速览
| ID | 名称 | 硬度 | 主类型 |
|---|---|---|---|
| I-01' | ExecutionBoundary(执行边界) | identity | Build-Y + 边界 |
| I-02' | ConditionalJudgmentContract(条件化判断契约) | identity | Build-Y |
| I-03' | UserSovereignty(用户主权三维) | identity | Build-Y |
| I-04' | RuntimeReasoningCompleteness(runtime reasoning 完整性) | identity | Build-Y |
| I-05' | UserFacingFieldRedaction(用户面字段名收敛) | 工程约束 | 边界 |
| I-06' | KellyCapTaskConditional(kelly_cap 任务条件化) | 工程约束 | Require-X-when-Y |
| I-07' | TaskMinimumFieldSet(任务最小必含字段集) | 当前版本立场 | Require-X-when-Y |
| I-08' | TaskTypeRequired(schema 顶层 task_type 显式) | 工程约束 | Build-Y |
| I-09' | MCA-7Axes-Naming(MCA 7 轴名稳定) | 当前版本立场 | 命名稳定 |
| I-10' | MechanismsSingleSource(8 机制单一事实源) | 工程约束 | Build-Y |
| I-11' | CredentialFiltering(输出端凭证过滤双处) | identity | 边界 |
| I-12' | ProfileDoesNotShrinkFactSpace(画像不裁剪事实空间) | 当前版本立场(v2→v3 降级 audit) | Build-Y + 边界 |
| I-13' | S1AlwaysActive(S1 每次综合输出必跑) | identity | Build-Y |
候选但本 spec 未列入的额外约束(待你看完 13 条后决定是否补):
- I-14(候选)TwoStepWriteContract 候选→用户确认两步写入 —— 在战略 §9 line 1106 列为 UserSovereignty 的工程承接点;可以选择并入 I-03',也可独立成条
- I-15(候选)OutputQualityConstantAcrossTiers 输出质量跨付费层级一致 —— ADR-009 列明,但 M0 阶段可能尚无付费层级,可推到 M1+
§1 每条不变量详 spec
§I-01' · ExecutionBoundary(执行边界)
硬度:identity 级(永不变 / 改即非 FinBayes)
精确陈述:FinBayes 是金融认知层,输出认知材料(结构化分析、条件化结论、判断检验材料),不直接调用交易执行 API、不持有用户账户凭证、不替用户做最终下单。任何"FinBayes → 下游执行端"的链路必须有用户拍板这一步。
战略原文锚点:
strategic-whitepaper.md§9 line 1080-1088("identity 级别 不可变"段)strategic-whitepaper.md§6 line 745("不直接下单、不持有账户凭证")ADR-009§1 line 24("唯一保留为 identity 级别的是:认知与执行分工")
正向 Build-Y 必含产出:
- 输出包含
main_answer(结论 / 倾向 / 方向)、supporting_evidence(支撑证据)、sources(来源 + 时间戳)三个核心字段(详见 I-07') - 当 task_type 在 {交易准备 / 决策辅助 / 风险识别} 时,输出可包含方向性建议("应该 / 建议 + 买入 / 卖出 / 持有 / 加仓 / 减仓"),但必须同时携带 I-02' 要求的条件化要素
负向边界:
- code-base 不允许 import 任何交易执行 SDK(如 ccxt / interactive-brokers-api / etc)
- StructuredCognitionResult 不允许出现
order_id/place_order/execute_trade/account_credential等字段
反例:
# 错(直接调交易 API)
broker.place_order(symbol="NVDA", qty=100)
# 错(字段含执行语义)
result.order_id = "ord_xxx"
Test 规格:
- L1(grep):
grep -rE "(ccxt|interactive_brokers|alpaca_trade_api)" src/必须空 - L2(Pydantic):StructuredCognitionResult 模型禁止注册
order_*/place_*/execute_trade类字段 - L3(codebase audit):第三方依赖白名单(dependency check),交易执行类 package 不在白名单
test 文件路径:tests/invariants/test_i01_execution_boundary.py
§I-02' · ConditionalJudgmentContract(条件化判断契约)
硬度:identity 级
精确陈述:FinBayes 输出任何带方向的判断或建议("应该 / 建议 / 倾向 + 买入 / 卖出 / 持有 / 加仓 / 减仓"),必须同时携带:
- 成立条件(prerequisites)≥ 1 条
- 失效条件(invalidation_conditions)≥ 1 条
- 反方证据(counter_evidence)≥ 1 条(task_type ∈ {分析 / 复盘 / 风险识别 / 交易准备 / 交易辅助} 时)
- 不确定性 / 缺口(uncertainty_and_gaps)≥ 1 条
战略禁止的是"封闭式答案"(无条件喊单),不是"语言中性"。FinBayes 允许说"应该买入 NVDA"——只要 4 个条件化字段齐备。
战略原文锚点:
strategic-whitepaper.md§5 line 525("FinBayes 不给'BTC 现在该买'这种封闭答案,而是给'在以下条件下加仓的逻辑成立……'")strategic-whitepaper.md§5 line 560(典型场景 3:有条件的结论)product-definition.md§4.4 line 234-240("交易准备/决策辅助类问题可以回答"三条规则)
正向 Build-Y 必含产出:
- 当
main_answer含方向词时,并联字段prerequisites/invalidation_conditions/uncertainty_and_gaps非空(min_length: 1 each) - 当 task_type ∈ 5 类(见上)时,
counter_evidence非空 - reasoning 链路必须显式连接"证据 → 条件 → 结论方向",不允许"证据 → 结论"短路
负向边界:
- 禁止"封闭式答案"(仅 main_answer 含方向词但 4 个条件化字段全空 / 全为占位符)
反例:
错(封闭答案):
{
"main_answer": "应该买入 NVDA 100 股",
"prerequisites": [],
"invalidation_conditions": [],
"counter_evidence": []
}
对(条件化判断):
{
"main_answer": "在以下条件下加仓 NVDA 逻辑成立(建议方向:增持)",
"prerequisites": ["AI 资本支出指引未下修", "硬件供给约束未缓解"],
"invalidation_conditions": ["数据中心订单同比转负", "竞争性 ASIC 显著替代"],
"counter_evidence": ["估值已隐含高速增长,PE 分位 95%"],
"uncertainty_and_gaps": ["DGX Spark 早期占比未披露"],
"posterior": {"kelly_cap": 0.25, "reasoning": "..."}
}
Test 规格:
- L1(Pydantic inter_field_constraint):当
main_answer正则匹配方向词(应该/建议/倾向 + 买入/卖出/持有/加仓/减仓),断言 4 个条件字段 length ≥ 1 - L2(semantic check, M1+):方向词附近 N tokens 内必须存在条件标记("如果" / "在……前提下" / "假设" / "前提是")
- L3(V 维度 V1 judge):Claude judge 对 10 个 mock 输出打分 V1 ≥ 2.5(V1 = 条件化判断符合度)
注意:删除粗暴的 (应该|建议)(买入|卖出) grep(会一刀切误伤合规输出)
test 文件路径:tests/invariants/test_i02_conditional_judgment.py
§I-03' · UserSovereignty(用户主权三维)
硬度:identity 级
精确陈述:用户对 FinBayes 拥有三维主权:
- 数据主权:可查看 / 修改 / 清空 / 导出全部数据(含历史判断、偏好、个性化参数)
- 执行自主权:FinBayes 不替用户决策最终交易;判断到执行之间必须有用户拍板这一步
- 候选→确认两步写入契约:任何写入用户档案 / 偏好 / 持仓配置的动作,必须先生成 candidate,再由用户 confirm,FinBayes 不静默写入
战略原文锚点:
strategic-whitepaper.md§9 line 1080-1144(identity 级不可变)strategic-whitepaper.md§9 line 1106("两步写入契约(候选→用户确认)")product-definition.md§3 用户产品形态ADR-009(保留 identity 级 = 认知与执行分工)
正向 Build-Y 必含产出:
- API
GET /api/v1/me/export→ zip 含全部数据 - API
DELETE /api/v1/me→ 注销 + 软删除 30 天后硬删 - API
PATCH /api/v1/me/profile→ 必须先返回 candidate, 用户 confirm 后才真正应用 - 用户面 UI 不强制用户按 FinBayes 给的框架重述自己问题
负向边界:
- 任何写入用户档案的代码路径不允许跳过 candidate→confirm 两步
反例:
# 错(静默写入)
user.profile.risk_appetite = 0.8
db.commit()
# 对(两步写入)
candidate = build_candidate(user, change={"risk_appetite": 0.8})
return {"candidate_id": "...", "preview": ..., "confirm_required": True}
# 用户 confirm 后才:apply_candidate(candidate_id)
Test 规格:
- L1(unit test 数据主权):API export / delete 单元测试
- L2(unit test 候选→确认):写入路径必经 candidate→confirm,断言短路写入会 raise
- L3(prompt audit, M1+):用户面 prompt 模板 review 必含"不强制框架"检查
test 文件路径:tests/invariants/test_i03_user_sovereignty.py
待定:I-12(候选→确认)当前并入 I-03'。如果你认为应独立成条(用于 M0 第一个 PR 单独抓出),可拆分。
§I-04' · RuntimeReasoningCompleteness(runtime reasoning 完整性)
硬度:identity 级
精确陈述:runtime 层任何含 confidence / score / posterior / kelly_cap 等数值字段的输出,必须同时含对应 reasoning(推理链路文字)。这是工程层可观测 / 复盘 / 优化的基础,不是用户面 UI 要求(用户面要求见 I-05')。
战略原文锚点:
strategic-whitepaper.md§2(制胜逻辑 - 结构化输出)strategic-whitepaper.md§4 line 402("判断的可学习性")strategic-whitepaper.md§5 line 570("用户产品不暴露体系本身"——明确分层)product-definition.md§6.4 line 303("产品文案不暴露体系细节")
正向 Build-Y 必含产出:
- Pydantic validator:含
*_score/*_confidence/kelly_cap字段时同级必有*_reasoning字段 - reasoning 内容非占位符(不是
.../TODO/placeholder) - reasoning 必须包含至少 1 个证据引用(指向
supporting_evidence或sources字段)
负向边界:
- 禁止"裸 score"(只有数字无推理)
反例:
# 错
{"confidence_score": 0.73}
# 错(reasoning 占位)
{"confidence_score": 0.73, "confidence_reasoning": "..."}
# 错(reasoning 不引用证据)
{"confidence_score": 0.73, "confidence_reasoning": "感觉挺有信心的"}
# 对
{
"confidence_score": 0.73,
"confidence_reasoning": "基于 supporting_evidence[0](Q3 财报订单同比 +25%)+ [1](DGX 出货节奏),与典型周期顶部相比,当前供需仍偏紧(参见 phase_evidence.cycle_position)"
}
Test 规格:
- L1(Pydantic validator):score / reasoning 字段配对约束
- L2(contract test):10 mock query 跑后断言每个输出的 reasoning 段 ≥ N 字(N 不再硬编 30,改为按 product-definition.md §7.1 表达密度策略决定,分用户层级 L0/L1/L2/L3 各自有最小长度策略)
- L3(grep):reasoning 内容 grep
\.\.\.|TODO|placeholder|感觉必须空
注意:删除原 codify 中的"用户面必须暴露 reasoning"——那是 I-05' 的反向,runtime 完整不等于用户面暴露
test 文件路径:tests/invariants/test_i04_runtime_reasoning.py
§I-05' · UserFacingFieldRedaction(用户面字段名收敛)
硬度:工程约束(可随 product / UI 迭代调整)
精确陈述:用户面 UI / API 响应 / 产品文案中不暴露体系字段名——包括但不限于 M1-M8 机制名、phase_matrix / correlation_regime / mca_bucket / kelly_cap / posterior 等内部字段名。用户面看到的是按产品意图组织的 widget 内容,体系字段名仅在 internal_audit 暴露面出现。
战略原文锚点:
strategic-whitepaper.md§5 line 570("用户产品不暴露体系本身")product-definition.md§6.4 line 303("M1-M8 / MCA 等术语不进入用户界面")product-definition.md§7.3 line 370("用户可见层不直接展示上述字段名")
正向 Build-Y 必含产出:
- 每个字段在
contracts/structured-cognition-result.yaml必须有surface: {user_widget | internal_audit | both}元数据 - 用户面 renderer 只渲染
surface ∈ {user_widget, both}的字段 - 产品文案 / UI 文案 grep 禁词列表必含体系字段名
负向边界:
- 用户面字符串不允许出现
M[1-8]_/phase_matrix/correlation_regime/mca_bucket/kelly_cap/posterior等 token
反例:
错(用户面文案):
"根据 phase_matrix 分析,M5 传导图显示..."
对(用户面文案):
"根据当前市场周期位置和资金传导路径..."(同样信息,用户语言)
Test 规格:
- L1(grep on UI bundle):产品 UI 编译输出 + 文案 i18n 文件 grep 体系字段名必须空
- L2(contract test renderer):mock 一个含
surface: internal_audit字段的 result,喂给用户面 renderer,断言该字段不渲染 - L3(API response 校验):用户面 API 响应 schema 不允许 surface 为 internal_audit 的字段
依赖:依赖 MP-5(字段暴露面分层契约)落地。
test 文件路径:tests/invariants/test_i05_user_facing_redaction.py
§I-06' · KellyCapTaskConditional(kelly_cap 任务条件化)
硬度:工程约束
精确陈述:kelly_cap 字段(含其载体 posterior)仅在 task_type ∈ {交易决策辅助, 交易准备, 风险识别} 时存在;其他 4 类任务(解释 / 分析 / 比较 / 复盘)字段缺省 / schema 中不出现。当存在时,值域 ∈ [0, 1);M0 推荐 0.25。
战略原文锚点:
ADR-008-supplement§2.5 line 102-113("M7.uq 启用时必选(决策辅助 / 交易准备 / 风险识别);解释 / 比较 / 复盘类任务可选")MP-3· kelly_cap 字段语义与下游消费协议(签字推荐组合 = M0 上限 0.25)
正向 Build-Y 必含产出:
- StructuredCognitionResult schema 按 task_type 拆出 6 个变体(解释 / 分析 / 比较 / 复盘 / 风险识别 / 交易准备 / 决策辅助),3 类包含
posterior块,4 类不包含 - 在产品层,问"什么是 ETF 折溢价"返回不含 kelly_cap 的 schema
负向边界:
- 解释类任务输出不允许出现
posterior.kelly_cap - kelly_cap 值若存在必须 ∈ [0, 1),M0 ≤ 0.25
反例:
# 错(解释类任务输出 kelly_cap)
{"task_type": "explanation", "posterior": {"kelly_cap": 0.25}}
# 错(值越界)
{"task_type": "trade_decision_aid", "posterior": {"kelly_cap": 1.0}}
Test 规格:
- L1(schema-by-task):task_type → schema 变体映射;解释类 schema 不包含 posterior 块
- L2(Pydantic Field validator):
Field(ge=0.0, lt=1.0) - L3(contract test):跑 7 类任务各 1 个 mock,断言解释/分析/比较/复盘 4 类不含 posterior
依赖:依赖 MP-4(任务→必含字段动态组合)落地。
test 文件路径:tests/invariants/test_i06_kelly_cap_task_conditional.py
§I-07' · TaskMinimumFieldSet(任务最小必含字段集)
硬度:当前版本立场(v3 当前,未来 ADR 可调)
精确陈述:每个 task_type 必须有最小必含字段集(基于 product-definition.md §7 表 2 锁定)。Schema 顶层不允许"全字段都必填"或"全字段都 Optional"两种极端;必须按任务分层。
| task_type | 最小必含字段集 |
|---|---|
| 解释类 | main_answer, supporting_evidence, sources, follow_up_questions |
| 分析类 | + multi_perspectives, counter_evidence, prerequisites, uncertainty_and_gaps, applicability_flags |
| 比较类 | + counter_evidence, uncertainty_and_gaps, applicability_flags |
| 复盘类 | + historical_judgment_links, prerequisites, invalidation_conditions, counter_evidence, uncertainty_and_gaps |
| 风险识别 | + multi_perspectives, prerequisites, invalidation_conditions, uncertainty_and_gaps, applicability_flags, regulation_status |
| 交易准备 | + counter_evidence, prerequisites, invalidation_conditions, uncertainty_and_gaps, applicability_flags, regulation_status, causal_graph |
| 交易决策辅助 | + counter_evidence, prerequisites, invalidation_conditions, uncertainty_and_gaps, applicability_flags, regulation_status, posterior |
全任务硬约束:每个任务都必须含 s1(叙事-数字一致性 - 见 I-13')+ mca_bucket(任务元数据,不入 result body)
战略原文锚点:
strategic-whitepaper.md§5 line 509-521("10 要素不是固化字段表,动态组合")product-definition.md§7 line 324-372(任务→必含要素映射表)ADR-008-supplement§3 line 166("动态可选,不强制全量出现")
正向 Build-Y 必含产出:
- MP-4 文件(machine-readable yaml)登记 7 任务 × 17 字段 的覆盖矩阵
- contracts/structured-cognition-result.yaml 按 task_type 输出 7 个 schema 变体
负向边界:
- 不允许"扁平 schema 全部 Optional[X]=None 占位"——会破坏 schema 表达力
反例:
# 错(10 字段全 stub)
class StructuredCognitionResult(BaseModel):
main_answer: str
multi_perspectives: list[str] = Field(default_factory=list) # 解释类也强制留 stub
...
# 对(按 task 变体)
class ExplanationResult(BaseModel):
main_answer: str
supporting_evidence: list[...]
sources: list[...]
follow_up_questions: list[...]
# 不含 multi_perspectives / kelly_cap 等
class TradeDecisionAidResult(BaseModel):
main_answer: str
... # 含 posterior, applicability_flags, regulation_status, ...
Test 规格:
- L1(schema-by-task):每个 task_type 单独 Pydantic model
- L2(contract test):跑 7 类任务各 N 个 mock,断言对应 schema 通过、错配 schema 失败
- L3(cross-section grep):contracts/structured-cognition-result.yaml 与 MP-4 yaml 一致
依赖:MP-4 落地。
test 文件路径:tests/invariants/test_i07_task_min_field_set.py
§I-08' · TaskTypeRequired(schema 顶层 task_type 显式)
硬度:工程约束
精确陈述:StructuredCognitionResult schema 顶层必须含显式字段 task_type: Literal["explanation", "analysis", "comparison", "review", "risk_identification", "trade_preparation", "trade_decision_aid"]。下游 consumer 凭 task_type dispatch,不依赖"机制激活 flag 间接推断"。
战略原文锚点:
product-definition.md§4.2 line 201-209(7 类任务清单)- A3 诊断报告 §5.3:当前 schema 无 task_type 字段是设计漏洞
正向 Build-Y 必含产出:
- Pydantic field
task_type: Literal[...]必填 - API 响应 schema 顶层必含 task_type
- task_type 在产品入口由"任务识别策略"(ADR-004 LLM Function Calling 主导)决定
负向边界:
- 不允许 task_type 缺失或 None
反例:
# 错(无 task_type,下游靠机制激活反推)
{"main_answer": "...", "applicability_flags": {...}, "posterior": {...}}
Test 规格:
- L1(Pydantic required):task_type 必填,缺失 raise
- L2(cross-validate):task_type 与字段组合一致性校验(如 task_type=explanation 不应携带 posterior)
依赖:MP-4 + I-07' 落地。
test 文件路径:tests/invariants/test_i08_task_type_required.py
§I-09' · MCA-7Axes-Naming(MCA 7 轴名稳定)
硬度:当前版本立场(v3)
精确陈述:MCA 7 轴名称稳定为 investor_structure / derivatives_maturity / institutional_friction / non_market_actor / credit_environment / information_availability / currency_cross_border。所有代码 / contract / engineering-pack / fixture 用此 7 名。
(与原 I-08 相同,保留)
Test 规格:见原版 strategic-invariants-codified.md I-08。
§I-10' · MechanismsSingleSource(8 机制单一事实源)
硬度:工程约束
精确陈述:8 机制(M1-M8)的语义定义在单一事实源(contracts/structured-cognition-result.yaml + ADR-007 supplement §8 机制升级定义;M1+ 视情况派生独立 mechanisms contract 文件)。代码 / engineering-pack / 测试不能本地重定义机制语义。
(与原 I-09 相同,保留)
Test 规格:见原版 I-09。
§I-11' · CredentialFiltering(输出端凭证过滤双处)
硬度:identity(凭证泄漏是安全 identity 级问题)
精确陈述:输出端凭证(API key / OAuth token / 数据库密码 / 内部 trace_id)过滤必须在两个位置同时存在:
- 综合层语义级:构造 StructuredCognitionResult 时不收录凭证字段
- Output Pipeline 格式级:出口处 regex 过滤 + 字段黑名单
(与原 I-10 相同,保留)
Test 规格:见原版 I-10。
§I-12' · ProfileDoesNotShrinkFactSpace(画像不裁剪事实空间)
硬度:当前版本立场(v2→v3 audit 降级,但仍是 v3 立场)
精确陈述:用户画像(risk_appetite / sector_preference / time_horizon 等)仅用于呈现层组织 / 排序 / 表达密度,不裁剪 FinBayes 的事实空间或证据集。同一查询对不同画像用户,底层 reasoning + evidence 应一致,只在 widget 表达密度 / 顺序 / 术语深度上差异。
战略原文锚点:
strategic-whitepaper.md§9(v2 不可妥协边界 → v3 降级 audit)ADR-009(立场降级 audit trail)
正向 Build-Y 必含产出:
- runtime 层证据收集 / reasoning 生成不依赖 user_profile
- 呈现层(widget renderer)允许按 profile 调整表达密度 / 字段顺序 / 术语深度
- 测试:同一 query 对 3 个画像用户跑,runtime layer 输出的 evidence set 完全一致
负向边界:
- runtime 层 evidence 收集器不允许
if user_profile.risk_appetite < 0.3: skip_evidence(...)这种条件分支
反例:
# 错(画像裁剪事实空间)
if user.risk_appetite < 0.3:
evidence = filter_out_aggressive_evidence(evidence)
# 对(画像仅影响呈现)
runtime_result = analyze(query) # 不依赖 profile
ui_view = render(runtime_result, density=profile.get_density()) # 呈现层用 profile
Test 规格:
- L1(unit test):3 个画像用户跑同 query,断言 runtime evidence set 完全一致
- L2(code path audit):evidence 收集模块不允许 import user_profile
注意:这是 A1 漏发现的关键正向不变量,必须独立成条。
test 文件路径:tests/invariants/test_i12_profile_no_shrink.py
§I-13' · S1AlwaysActive(S1 每次综合输出必跑)
硬度:identity(唯一全任务硬约束 - ADR-008-supplement §2.6 明示)
精确陈述:S1(叙事-数字一致性检查)字段在每次综合输出中必须 active,无 task_type 例外。这是 ADR-008-supplement §2.6 唯一明确的"全任务硬约束"。
战略原文锚点:
ADR-008-supplement§2.6(S1 每次综合输出必跑)
正向 Build-Y 必含产出:
- StructuredCognitionResult 7 个 task 变体 schema 全部含
s1字段必填 - S1 字段 8 子字段全填(按 ADR-008-supplement §2.6 规定)
负向边界:
- 任何 task 类型缺 s1 字段 → schema validation fail
Test 规格:
- L1(Pydantic required):所有 task 变体 schema 均 require s1
- L2(contract test):S1 8 子字段非空 / 非占位符
注意:这是 A1 漏发现的最重要正向不变量。
test 文件路径:tests/invariants/test_i13_s1_always_active.py
§2 与原版 10 条的差分总结
| 原 ID | 处理 | 说明 |
|---|---|---|
| I-01 NoOrderPlacement | → I-01' ExecutionBoundary(重写) | 从"禁字段"扩展到"禁字段 + 禁依赖 + 禁路径" |
| I-02 NotDeciding | → I-02' ConditionalJudgmentContract(重写) | 从禁"应该买入" → 允许带条件方向性建议;删除粗暴 grep |
| I-03 UserSovereignty | → I-03' UserSovereignty(扩展) | 加候选→确认两步写入契约 |
| I-04 CognitiveTransparency | → I-04' RuntimeReasoningCompleteness + I-05' UserFacingFieldRedaction(拆分) | runtime 完整 vs 用户面收敛分层 |
| I-05 ForbiddenLexicon | 删除(独立成 I-05'?) | 禁用词扫描属 product 层 lint,不是 L0.5 不变量;可放进 verify:kb hook 不进 L0.5 |
| I-06 KellyCapBound | → I-06' KellyCapTaskConditional(重写) | 从值域约束扩展到"任务条件化存在性" |
| I-07 SCR-1.1-Required | → I-07' TaskMinimumFieldSet(重写) | 从"10 字段必填" → "按任务最小必含子集" |
| I-08 MCA-7Axes-Naming | → I-09' (重编号) | 保留 |
| I-09 8-Mechanisms-Source | → I-10' (重编号) | 保留 |
| I-10 CredentialFiltering | → I-11' (重编号) | 保留 |
| - | + I-08' TaskTypeRequired(新增) | schema 顶层 task_type 必填 |
| - | + I-12' ProfileDoesNotShrinkFactSpace(新增) | A1 漏发现 |
| - | + I-13' S1AlwaysActive(新增) | A1 漏发现 + ADR-008-sup §2.6 唯一硬约束 |
净变化:原 10 条 → 新 13 条。其中:
- 重写(语义大改):4 条(I-01 / I-02 / I-06 / I-07)
- 拆分:1 条 → 2 条(I-04 拆为 I-04' + I-05')
- 删除 / 降级:1 条(I-05 ForbiddenLexicon 降为 verify:kb hook)
- 保留 / 重编号:3 条(I-08/09/10 → I-09'/10'/11')
- 新增:3 条(I-08' TaskTypeRequired / I-12' Profile / I-13' S1)
- I-03 扩展:1 条
§3 待你审定的开放问题
- I-12'(候选→确认两步写入)独立成条 vs 并入 I-03':当前 spec 把它放在 I-03' 里。如果你认为 M0 第一个 PR 要单独抓出做 test,可以拆分为独立 I-14'。
- I-05 ForbiddenLexicon 处理:当前 spec 提议降级为 verify:kb hook(不进 L0.5)。如果你认为禁用词扫描仍是战略级硬约束,可保留为 I-XX'。
- I-15(输出质量跨付费层级一致):ADR-009 列明但 M0 阶段可能尚无付费层级。当前 spec 不列入,推到 M1+。是否同意?
- task_type 命名:当前 spec 用英文(explanation/analysis/comparison/review/risk_identification/trade_preparation/trade_decision_aid)。是否同意?还是用中文(如 explanation_zh / fenxi_zh)?
- I-07' schema 拆分:当前 spec 提议拆 7 个 task 变体 schema。这是大改动,C-1 PR 工作量从 1 schema → 7 schema。是否同意,还是先做"统一 schema + task_type 触发的字段必填校验"中间态?
§4 关联资产
- 诊断报告 A1(战略原意 baseline):本 commit 同时落地的
2026-05-29-diagnostic-A1-strategic-intent.md(待补) - 诊断报告 A2(范式倾向扫描):本 commit 同时落地的
2026-05-29-diagnostic-A2-paradigm-scan.md(待补) - 诊断报告 A3(字段集合理性审计):本 commit 同时落地的
2026-05-29-diagnostic-A3-field-set-audit.md(待补) - 待重写:战略不变量 codify · L0.5 层(10 条核心)
- 主 ADR:ADR-012 · SVA-9 战略愿景对齐九层防御
- 战略白皮书:FinBayes 战略白皮书 v3
- 产品定义:FinBayes 产品定义
- ADR-008 supplement:机制层输出契约扩展
- ADR-009:战略立场降级 audit trail
- MP-3:kelly_cap 字段语义与下游消费协议