# 使用 Source-bound Evidence 验证业务正确性

## When to use

业务 Owner 已经给出 expected，需要证明哪个 graph 版本、受控输入、路径、effect 和观察支持该答案时使用。本任务不负责创造业务 oracle，也不会把 Suite 通过升级成生产认证。

## Inspect first

- 确认业务 Owner、规则标识、批准的 expected 和生效日期。
- 固定 graph source 与 BLOGE 版本。
- 找到外部 effect，并决定哪些 port 使用 REAL、DOUBLE 或 DENY。
- 阅读[第 23 章](/zh-CN/v/0.9.8-RC1/23-business-correctness)和[第 24 章](/zh-CN/v/0.9.8-RC1/24-first-loan-verification)。

## Required inputs

必须具备 Scenario inputs、action、expected outcome、observations、Policy 要求、Fixture binding、source revision 和 evidence depth。如果缺少 expected 业务答案，记录缺口并停止发布决策。

## Implementation path

1. 把一条 Owner 批准的规则编码为 Scenario Case。
2. Case 指向真实 graph source，不用 mock 编排替代 graph 语义。
3. 在 Fixture 边界控制 node call 与 effect。
4. 用 Policy 声明 mandatory Case 和 evidence depth。
5. 运行聚焦验证并检查本次新报告，不读取旧目录冒充结果。
6. 分别读取 Verdict、EvidenceTrust 和 ClaimCapability。
7. 将结果绑定到 source revision 后，才允许进入发布决策。

固定 starter 中的聚焦命令：

```bash
mvn -pl bloge-starter-loan-approval -am \
  -Dtest='LoanApprovalApplicationTest,LoanApprovalBusinessScenarioTest,LoanApprovalOperatorFlowTest' \
  test
```

## MUST / SHOULD / MAY

- **MUST**：Expected 必须来自可问责的业务 Owner。
- **MUST**：按声称的 depth 执行真实 parser、compiler、graph 与 observation 路径。
- **MUST**：Test classpath、source binding、mandatory Case 或 Fixture 缺失时 fail closed。
- **MUST**：Verdict、EvidenceTrust 和 ClaimCapability 保持独立。
- **SHOULD**：加入一条故意错误或变化的规则，证明 Suite 能拒绝错误答案。
- **MAY**：在声明的 effect 边界使用 double，但不能描述成真实提供方证据。

## Failure patterns

- 把当前代码输出当 expected：获取独立业务 oracle。
- 执行失败后旧报告仍存在：删除或隔离旧输出并重跑，不能复用为新证据。
- Mandatory Case 缺失但 Suite 仍通过：修正 Policy 或聚合逻辑后再做发布 Claim。

## Validation

记录精确 Maven 命令、test count、生成报告路径、source commit、Fixture mode、Verdict、EvidenceTrust 与 ClaimCapability。`TEST_CLASSPATH_UNAVAILABLE` 是环境失败，不是业务 Case 的通过或失败。

## Evidence

- [业务正确性边界](/zh-CN/v/0.9.8-RC1/23-business-correctness)
- [第一个贷款验证](/zh-CN/v/0.9.8-RC1/24-first-loan-verification)
- [Scenario 资产](/assets/v/0.9.8-RC1/chapters/24-first-loan-verification/assets/bloge/bloge-starter-loan-approval/src/test/bloge/scenarios/loan-approval.scenario.yaml)
- [Policy 资产](/assets/v/0.9.8-RC1/chapters/24-first-loan-verification/assets/bloge/bloge-starter-loan-approval/src/test/bloge/verification-policy.yaml)
- [固定版本 Verification 源码](https://github.com/xbdotl/bloge/tree/cc38fbe5bb79ccc603888e4307cfe566d4674ffc/bloge-verification)
