# Verify business correctness with source-bound evidence

## When to use

Use this task when a business owner has supplied an expected answer and the team must show which graph version, controlled inputs, path, effects, and observations support it. This task does not create the business oracle and does not turn a passing Suite into production certification.

## Inspect first

- Confirm the business owner, rule identifier, approved expected result, and effective date.
- Pin the graph source and BLOGE version.
- Identify external effects and decide which ports are REAL, DOUBLE, or DENY.
- Read [Chapter 23](/en/v/0.9.8-RC1/23-business-correctness) and [Chapter 24](/en/v/0.9.8-RC1/24-first-loan-verification).

## Required inputs

Require Scenario inputs, action, expected outcome, observations, Policy requirements, Fixture bindings, source revision, and evidence depth. If the expected business answer is absent, record the gap and stop the release decision.

## Implementation path

1. Encode one owner-approved rule as a Scenario Case.
2. Point the Case at the real graph source; do not replace graph semantics with mocked orchestration.
3. Use Fixture boundaries for controlled node calls and effects.
4. Declare Policy requirements for mandatory cases and evidence depth.
5. Run the focused verification tests and inspect the new report, not a stale directory.
6. Read Verdict, EvidenceTrust, and ClaimCapability as separate dimensions.
7. Bind the result to source revision before using it in a release decision.

Focused command from the pinned starter:

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

## MUST / SHOULD / MAY

- **MUST** obtain the expected business answer from an accountable owner.
- **MUST** execute the real parser, compiler, graph, and observation path for the claimed depth.
- **MUST** fail closed when the test classpath, source binding, mandatory Case, or Fixture is unavailable.
- **MUST** keep Verdict, EvidenceTrust, and ClaimCapability separate.
- **SHOULD** include one deliberately wrong or changed rule that the Suite must reject.
- **MAY** use doubles at declared effect boundaries; do not describe them as real provider evidence.

## Failure patterns

- Current code is used as the expected answer: obtain an independent oracle.
- Old report remains after execution failed: delete or isolate stale output and rerun; never reuse it as fresh evidence.
- Suite passes with missing mandatory Cases: fix Policy or aggregation before making a release claim.

## Validation

Record the exact Maven command, test count, generated report path, source commit, Fixture modes, Verdict, EvidenceTrust, and ClaimCapability. `TEST_CLASSPATH_UNAVAILABLE` is an environment failure, not a passing or failing business Case.

## Evidence

- [Business correctness boundary](/en/v/0.9.8-RC1/23-business-correctness)
- [First loan verification](/en/v/0.9.8-RC1/24-first-loan-verification)
- [Scenario asset](/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 asset](/assets/v/0.9.8-RC1/chapters/24-first-loan-verification/assets/bloge/bloge-starter-loan-approval/src/test/bloge/verification-policy.yaml)
- [Pinned verification source](https://github.com/xbdotl/bloge/tree/cc38fbe5bb79ccc603888e4307cfe566d4674ffc/bloge-verification)
