# Standalone grader contract

## Scope and inputs

`src/grade_fixture.py` evaluates typed `back_to_back_funding_book.v1r2` reports against the public five-case BOOK bundle and the connected S3 allocation problem. It returns a fatal-qualification verdict separately from a 100-point dense score with twelve owners. The nine required sections are `rates`, `credit_xva`, `capital`, `liquidity`, `accounting`, `legal`, `compliance`, `structure` and `recommendation`. The report label is unchanged. This is the standalone BOOK grader, not the separate S1/S2 rubric or an installed Amplio verifier. The publication is The funding book; the author remains `<NAME>`.

The five alternative `episode_id` values are `W1_issued`, `W1_contingent`, `W2`, `W3` and `W4`. Each includes all twelve owners. The original 17 financial `reporting_panels` retain their pointers, owner, observation time, scenario, inputs, required locators and selection rule. Four metadata panels, `LEGAL`, `COMPLIANCE`, `STRUCTURE` and `RECOMMENDATION`, describe O9-O12 through whole-section typed premises, with no `evidence_array` or numerical-gold comparison. Controlled financial panels are not replaced by the selected branch event or combined into one balance sheet.

The authoritative inputs are `fixtures/numerical-inputs.json`, its closed `schemas/numerical-inputs.schema.json`, `fixtures/case-exhibits.json`, `schemas/exhibits.schema.json`, `schemas/report.schema.json`, and the named source documents. These paths are relative to R, the organized bundle root. `validate_bundle(root)` validates the cases and their legal, market, institutional and source references before a candidate is loaded. Financial expectations come from `compute_core(parameters)` and `compute_reserves(parameters, core)`. The case's `counterparty_constraints` and scoped `mandate.rules` supply institutional facts; evaluator-side `accepted_positions` supply authored contested positions. No supplied exposure path, missing quote, issuer fact or correlation is invented.

All entities, transactions, prices and legal opinions in the fictional packet are synthetic assumptions. Official rule packets are identified separately in the source register. Locator hashes establish document integrity, not authenticity of the fictional opinion, applicability to a real bank, or economic truth of a candidate's prose.

## Commands and exit codes

Use Python with the pinned `jsonschema` dependency from [requirements.txt](../requirements.txt). There is no permissive fallback when that dependency is absent. Set R to the absolute organized bundle path, then run setup and the commands from R. The output paths below are fresh run artifacts outside `evidence/baseline/`.

```sh
R=/Users/eddy/dev/amplio/evals/structured-credit-trader/back-to-back-funding-book
cd "$R"
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -r requirements.txt
mkdir -p evidence/reruns
python3 src/grade_fixture.py --root "$R" --output evidence/reruns/grader-verification-evidence.json
python3 src/grade_fixture.py --root "$R" --emit-gold W3 --output evidence/reruns/external-gold-W3.json
python3 src/grade_fixture.py --root "$R" --grade evidence/reruns/external-gold-W3.json --episode W3
python3 src/grade_fixture.py --root "$R" --emit-mutation M5_feasible49 --episode W3 --output evidence/reruns/external-mutant-W3.json
python3 src/grade_fixture.py --root "$R" --grade evidence/reruns/external-mutant-W3.json --episode W3
```

`--root DIRECTORY` selects R, the organized reference bundle root, not `src/` or `docs/`. The default is the parent of the script's `src/` directory. Case document paths such as `docs/exhibit-fields.md` and numerical references such as `fixtures/numerical-inputs.json` resolve from R. `--grade FILE` and `--output FILE` use the process working directory for relative paths. `--output FILE` retains exactly the JSON also printed to stdout. An emission command produces a plain candidate report conforming to `schemas/report.schema.json`, not a result wrapper. It does not grade that report. The separate `--grade` command reads the actual named file; it never regenerates a replacement candidate from a fixture recipe.

From another working directory, after setup, use the bundle interpreter and absolute script and candidate paths:

```sh
"$R/.venv/bin/python3" "$R/src/grade_fixture.py" --root "$R" --grade "$R/evidence/reruns/external-gold-W3.json" --episode W3
```

The mutation example is expected to exit 1 with dense points below 100, even when its truthful nonminimum assignment remains qualified. That exit is not a reference or setup failure.

| Mode or result | JSON `status` | Exit |
|---|---|---:|
| All default gates pass | `fixture_gate`, `passed=true` | 0 |
| Any default gate fails | `fixture_gate`, `passed=false` | 1 |
| Qualified external report with `dense_score.earned=100` | `graded` | 0 |
| Well-formed external report with a blocker or fewer than 100 dense points | `graded` | 1 |
| Malformed candidate | `candidate_error` | 1 |
| Missing or invalid reference, including a malformed generated expectation | `UNSCORABLE`, `cause=reference_error` | 2 |
| Unanticipated judge failure after reference construction | `UNSCORABLE`, `cause=verifier_error` | 2 |
| Cannot retain requested output | `output_error` | 2 |

No `dense_score`, `qualification` or `obligations` are created in error results. Candidate errors include malformed JSON, duplicate keys, nonfinite JSON constants, unsupported version, unknown properties, missing required fields, wrong types, exponent decimal strings, negative zero and invalid evidence claim routing. `Bundle` completes reference construction before any external candidate is read, so failures there cannot be attributed to the candidate. A genuine adverse input, such as an explicit zero bid or failed issuance condition, is an economic outcome. The present five cases are complete; an unsupported future branch with missing indispensable evidence is `UNSCORABLE`, never zero exposure.

Current twelve-owner graded results keep this outer shape. There are no top-level scalar `score`, `max_score` or `passed` aliases. Historical eight-owner records remain unchanged:

```text
{
  status: "graded",
  schema_version: "back_to_back_funding_book.v1r2",
  episode_id: selected case,
  qualification: {
    verdict: "qualified" | "disqualified",
    blockers: [{id, owner, path, reason, actual, expected}]
  },
  dense_score: {earned: integer, possible: 100},
  obligations: [{id, name, weight, passed, score, discrepancies}],
  diagnostics: {panels, allocation, branch, evidence_scope,
                qualification_scope, qualification_coverage,
                no_cross_obligation_candidate_dependencies, institutional}
}
```

`--grade` adds `candidate_source`, the actual supplied file path. Per-obligation `score` and `passed` remain local diagnostics. The default `fixture_gate` has its own engineering `passed` flag, which is not a candidate qualification verdict. `candidate_error` contains `status`, `error_type` and `error`. `UNSCORABLE` also identifies `cause`; neither error contract contains candidate points.

## Exact numbers

Money is USD, not millions, encoded as finite ordinary decimal strings. JSON numeric values are not accepted for decimal fields. `NaN`, infinity, exponents and negative zero are rejected. An unscaled value is not inferred from context.

Comparison uses an absolute USD tolerance of `0.000001`. The following dimensionless/year fields use `0.000000000001`: funding remaining at year five, bond–CDS basis spread, SA-CCR MF and supervisory duration, reference SF and provider RW, client capital charge spread, and unprotected tail years. No percentage-relative tolerance widens as an exposure grows. Booleans, enums and nonnumeric lists require exact agreement. Assignment order is immaterial; lot identity and actual financing constraints are not.

## Evidence routing

Each financial evidence row retains `exhibit_id`, `locator`, `claim`. `claim` must be exactly one selected case's original O1-O8 financial `reporting_panels.*.panel_id`, with no suffix. The institutional metadata IDs `LEGAL`, `COMPLIANCE`, `STRUCTURE` and `RECOMMENDATION` are rejected in financial evidence arrays; their sections use typed premises instead.

```json
{"exhibit_id":"SYNTHETIC_PACKET","locator":"fictional-quote-board","claim":"RATES_INCEPTION"}
```

The exact financial token routes a citation to one owner. Its document/locator pair must be in the case register. `resolve_report_evidence` checks source text and hashes without following candidate links or executing content. Every `required_evidence` pair must appear in that financial panel's `evidence_array`. Additional resolving citations are permitted; duplicates cannot replace a missing different locator. A resolving but unrelated locator cannot replace a required one.

An unknown or malformed panel token rejects candidate format globally, without points. A known panel's absent, unknown or incorrectly placed citation fails only its own obligation. A bad `PROTECTION_CONTROLLED` locator in the shared capital array cannot penalise O3 or O5, and a bad `RECOGNITION_INCEPTION` locator cannot penalise O8. A known registered locator whose backing source is missing or corrupted is a reference failure, so grading is `UNSCORABLE` rather than a candidate evidence penalty.

Financial panel tokens route evidence; they are not a prose-grading mechanism. The four institutional sections carry typed conclusions and source-linked premises, with explanations in `rationale`. The grader checks premise truth, relevance and conclusion consistency. It does not award points for text length, keywords, a citation's mere presence or exact agreement with reference wording. Unconstrained narrative understanding and human calibration are not inferred from those bounded checks.

## Disjoint obligations

| ID | Machine name | Weight | Owned result |
|---|---|---:|---|
| O1 | `contractual_cash_title_marks` | 7 | Rates: funding cash source, roles, legal full mark, reference adjustment, DV01, residual tenor and reinvestment |
| O2 | `independent_credit_and_cash_funding` | 7 | Credit XVA: accounting CVA, actual cash-deficit UFVA, mark-only zero debt cost, separate conditional prefunding |
| O3 | `regulatory_exposure_and_collateral` | 10 | SA-CCR and controlled deployment collateral eligibility, E*, RWA and cost |
| O4 | `protection_recognition_and_tail` | 7 | Maturity recognition, CCR/CVA protection and actual unprotected tail |
| O5 | `executable_capacity_and_allocation` | 8 | Controlled leverage/capital/action decision and actual minimum-cost allocation |
| O6 | `branch_liquidity_and_existence` | 7 | Selected branch existence, mark versus cash, deadline call, facility draw and shortfall |
| O7 | `accounting_unit_and_observability` | 6 | Valid recognition unit, observable inputs, day-one opportunity profit and deferral |
| O8 | `reserves_journal_and_prudence` | 8 | Instant reserve/P&L panel, independent stock/journal reconciliation, separate AVA and terminal observation |
| O9 | `legal_rights_and_conditions` | 10 | Source-supported legal findings, scope and effective conditions |
| O10 | `mandate_and_compliance` | 10 | Scoped permission, escalation, refusal and effective approval |
| O11 | `executable_client_structure` | 10 | Client constraints, delivery/deadline, legal form, classification, terms and bank viability |
| O12 | `source_supported_recommendation` | 10 | Supported choice, binding constraint and defensible alternatives |

An obligation passes only if its owned assertions and required evidence pass. Each owner loses its weight once, however many local discrepancies it has. Financial expectations are recomputed from authoritative inputs, never from the candidate's upstream numbers. Institutional conclusions must be consistent with their supporting facts and any report assertions they cite. A separate incorrect conclusion fails its own owner; diagnostic arithmetic does not automatically propagate a financial root fault through every score.

The denominator is always 100 and all twelve owners remain present. Omitting any of the nine required sections is `candidate_error` without points. An empty financial evidence array gives zero to its affected financial owners. Empty capital evidence loses O3, O4 and O5; empty accounting evidence loses O7 and O8. Institutional premises remain separately required and graded. Omitting financial citations does not remove the four institutional owners or shrink the denominator.

## Institutional conclusions and client outcomes

`src/institutional.py` owns the shared semantics. `report_properties()` supplies the four closed schema definitions. `expected_sections(case, parameters, *, family=None, state=None, book=None)` constructs one defensible reference answer. `grade_sections()` takes the same authoritative context plus the submitted report and independently returns O9-O12 owner outcomes, blockers and diagnostics. It does not compare the candidate with `expected_sections()`. `validate_case_institutions(case, parameters)` checks institutional cross-references and contradictions.

`legal.findings` states `permitted`, `conditional` or `blocked` for each subject. `compliance.decisions` states `execute`, `escalate`, `decline` or `await_approval` for a rule. `structure` records the party, legal form, classification, required and delivered cash, deadline, client executability and bank viability. `recommendation` names the action, subject, binding constraint, optional authored position and alternatives. Each conclusion has premises and a rationale.

A premise contains `source`, `pointer`, `relation` and `value`. Sources are `case`, `state`, `book` or `report`; pointers use RFC6901; relations are `eq`, `ne`, `gte`, `lte` or `contains`. Financial values are Decimal strings. Case, state and book facts come from independently authenticated inputs. A report pointer cannot make a candidate assertion authoritative. Support must address the selected conclusion: a true but unrelated fact is insufficient. Supported alternative positions and different explanations may pass without copying a gold sentence or an entire premise list.

The static report is a proposal. Its KEEP alternative independently values the existing controlled substituted book only when the client, legal and approval conditions permit it. It does not inject capital into the adverse actual base, whose initial qualifying capital remains insufficient. Client success requires an executable proposal under that panel's own facts; accurately describing an impossible structure does not earn O11. Daily grading instead uses `value_book(...).client_outcome` from actual settled state, including deadline, legal form, approvals, borrowing ceiling, contractual spread and bank viability. Successful inherited opening delivery may earn current O11 credit when accurately supported, but is tagged as inherited, not a new worker financing achievement.

Mandate permission and intrinsic legality are separate. Requesting approval does not grant it. Even an effective scoped approval cannot cure unavailable title, failed enforcement, excess size, missing cash or inadequate capital. Accepted daily `escalate` and `decline` actions produce dated receipts and legal records; neither fabricates a financing receipt. See the [settled desk contract](desk-runtime-contract.md).

## Fatal qualification

`qualification_verdict(bundle, report, episode, allocation_detail)` compares typed financial assertions with their selected panels and the recomputed S3 assignment; shared institutional grading contributes its checked blockers. It does not compare the controlled substitution snapshot with the adverse actual base. `qualified` means no checked fatal assertion or illegal proposed title use was found. A truthful adverse report may qualify while losing client-outcome or other dense points. Qualification is not an approval to execute the live book.

| Stable blocker ID | Report condition |
|---|---|
| `illegal_reuse` | Pledging an unavailable or inaccessible lot, or trying to reuse the already sold funding reference. |
| `unfunded_settlement` | Claiming feasible funding below the recomputed requirement; reducing the stated requirement, contractual call or actual shortfall; claiming age alone settled an unresolved claim. |
| `double_pledge` | The submitted assignment pledges the same lot more than once, even if it also declares itself infeasible. |
| `double_sale` | Reserved fatal policy. No sale action exists in this report schema, so coverage is `not_expressible` until the settled desk action gate. |
| `phantom_cash` | An unfunded swap is treated as principal cash, a noncash charge as a draw, unexecuted VM or capital relief as cash, or reported sale/draw/assignment cash exceeds the supported receipt. |
| `ineligible_mitigation` | Selected collateral or protection is recognised beyond its legal eligibility, maturity-adjusted amount or executed designation. |
| `fabricated_capacity` | Qualifying capital is overstated, leverage requirements are understated, an action is prematurely effective, a lender/facility capacity is invented, or an executable assignment masks a pool/capital constraint. |
| `cash_conservation_breach` | The branch's stated cash, collateral realisation, draw and unpaid balance do not reconcile to its stated call. |
| `title_conservation_breach` | A report treats the sold reference as owned collateral, invents an issued branch security, or proposes a pledge absent from the owned lot inventory. |
| `erased_economic_tail` | A report understates the contractual uncovered years or asserts protection after expiry without a new executed hedge. |

Institutional blockers (`institutional_legal`, `institutional_compliance`, `institutional_structure`, `institutional_recommendation`) follow one premise fatality rule. A premise whose pointer cannot resolve to an authenticated fact (unknown pointer, disallowed root, blocked token, a report pointer with no independently computed value) is a non-fatal failure of its owner: it asserts nothing about the world, so it costs the owner's points and never disqualifies. A premise that resolves to an authenticated fact and asserts a false relation about it, or a report premise whose value contradicts the independently computed value, is a false claim and remains fatal. Action kinds are normalised once at section entry (`execute_CSA`, `buy_CDS` and `release_substitution` are aliases of `execute_csa`, `buy_protection` and `reverse_substitution`); rule selection, gates, position labels and alternative comparison all compare normalised kinds, so either spelling grades identically.

No number of dense points overrides a blocker. An honestly infeasible funding assignment without illegal proposed title use can remain qualified while O5 fails. A feasible nonminimum 49-Div assignment also remains qualified and loses O5. Role reversal, unsupported statutory profit and a P&L plug still fail their owners; they are not automatically renamed cash, title or capacity violations. Distinct fatal assertions in those reports are checked independently.

`diagnostics.qualification_coverage` makes this report boundary explicit. Accepted-action enforcement is a separate settled-desk gate. A report-only pass cannot close the complete Claim 4 runtime coverage or its human usability criterion. There is no unconstrained scalar RL adapter or score threshold that promotes a report past qualification.

## Allocation and accounting safeguards

O5 evaluates the submitted assignment using every actual `lot_id` and `lender_id`. It checks exact-once allocation, issued/available collateral, eligible lender, names, issuer concentration, pool limits, cash requirement and capital budget. It recomputes market haircut advances, supervisory borrower-direction exposure, spread cost, haircut funding cost and capital carrying cost.

Before a count-frontier shortcut is accepted, the grader separately checks the complete 52-ID inventory, distinct issuers, equal small-lot economics and availability, only Tol/Div, and both large lots forced to Tol by actual access/capacity/concentration. It then enumerates all 51 small-lot counts with the real evaluator. A changed domain raises `ReferenceError`, not a false optimality certificate. A feasible 49-Div assignment with truthful `optimal=false` still fails the requested best-cost decision. A candidate cannot pass by claiming `optimal=true` or copying the optimal objective onto another assignment.

O8 uses the selected instant year-one funding/provider shock, not the one-year carry result. D follows the frozen inception time-annuity policy; X is remeasured independently. Expected reported P&L and equity change are recomputed by replaying actual debit/credit lines and summing stock/P&L accounts, not by subtracting candidate aggregates or accepting an engine's echoed reported total. Changing both candidate P&L and its alleged independent equity change cannot defeat that check.

The default journal gate also reconstructs three complete 80-quarter cash ledgers from actual contract/price/interest/principal formulas; replays the management cash-plus-overlay journal at 81 observations; checks instant, charge-only, executed hedge and conditional-prefunding journals; and replays alternative later-payment and final-write-off terminal journals. It keeps the USD500000 unresolved claim reserved at contractual maturity. A terminal clock is not a cash receipt or discharge.

## Branch semantics and panel selection

- W1 issued retains an existing security and uses the public selected zero bid. W1 contingent has no predefault traded security and no completed post-trigger issuance. Its required decimal market value zero is an absence-of-security representation, not a quoted price.
- W2 retains the USD12m trapped local collections but supplies no accessible cash by the deadline. A transfer ban without default is not renamed a credit default or a freely traded financial security.
- W3's first draw comes from actual reference-return settlement under its explicit joint curve state. The EM security is repriced independently, but its mark loss is not a separate contractual cash payment. Caldera/Celadon are not relabelled as the controlled Lydora comparator.
- W4 preserves the issued asset and indicative mark, but closure, capacity and settlement timing make it unavailable as deadline cash. The USD10m executed facility is separate from the market mark.

The controlled CDS starts at book year0.008, expires at5.008 and leaves14.992 unprotected years. The 15-year figure is explicitly the immediate-execution comparator. Full initial regulatory maturity recognition does not remove the tail. The controlled reversal NPV, mark-stress funding-component KVA and eligible-substitution leverage snapshot remain separate selected panels. Capital relief is never a cash receipt, and the actual base book cannot execute a new booking while its required qualifying capital exceeds available capital.

## Fixtures and historical runtime evidence

`fixtures/expected-reports.json` contains five deterministic input-derived report recipes. `fixtures/mutation-fixtures.json` retains M1-M8 for the eight financial owners, scored at their current weights. O9-O12 have separate institutional probes, not M9-M12 recipes. Recipes are not observed verdicts. Emission commands expand recipes into candidate files; the runner grades those reports. Main separately exercises saved external files. Current readers use the twelve-owner contract, while archived records retain their original shape, weights and outcomes.

Separate D1 controls in `audit_environment.institutional_candidates` cover `institutional_wrong_legal_premise`, `institutional_client_cash_not_delivered` and `institutional_execute_without_approval`. Positive controls are `institutional_supported_report_premise` and `institutional_supported_decline_alternative`. `institutional_stale_report_premise` deliberately fails O1 and O12 when an incorrect financial claim is also used to support the recommendation. That explicit dependency is not an unexplained spillover from the eight financial mutation owners. Alias and fatality probes are `institutional_alias_alternative_upper` and `institutional_alias_alternative_lower` (an alternative spelled `execute_CSA` against a canonical rule, and `execute_csa` against the alias-spelled proposal rule, both pass twelve of twelve), `institutional_alias_recommendation_reverse_substitution` and `institutional_alias_recommendation_release_substitution` (both spellings reach the reverse-substitution capital gate and must produce identical O12 discrepancies), `institutional_typo_pointer_premise` (one mistyped pointer in an otherwise supported legal finding fails O9 with no blocker) and `institutional_false_relation_premise` (a false relation on a real fact fails O12 with `institutional_recommendation`). These are probe definitions, not recorded passes.

Default JSON locations:

- `gold_reports`: five separate qualification verdicts and dense scores, plus engineering acceptance.
- `fault_matrix`: primary W1-issued matrix with `rows`, `columns`, `failure_bits`, `observed_dense_scores`, `qualifications` and `discrepancies`. A failure bit is1; a pass is0. The preserved baseline matrix is 8×8; it is not evidence of twelve-owner execution.
- `fault_matrices_by_episode`: the selected faults against every case, without treating repeated shared-panel exercises as independent economic worlds.
- `candidate_rejections`, `reference_errors`: named format/reference rejection probes, each with observed error type and no score creation.
- `supplemental_mutations`: full assignment, shared evidence and alleged independent-equity counterexamples.
- `causal`: separate quote/funding/provider/own/reference/rating, actual cash, frozen D/revalued X, AVA width, conditional cash transaction, action-delay/tail/capital and terminal probes.
- `journals`: actual entries, observations, replayed P&L/equity and independently reconstructed cash costs.
- `fixture_manifests`: public recipe agreement with the executable gate.

The default exits0 only if all of those gates pass. A caught probe exception remains a named failure, not a skipped check. The original flat-bundle run is preserved in [grader-verification-evidence.json](../evidence/baseline/grader-verification-evidence.json), with actual-file checks in [external-grading-evidence.json](../evidence/baseline/external-grading-evidence.json) and independent causal evidence in [causal-verification-evidence.json](../evidence/baseline/causal-verification-evidence.json). These byte-identical historical records and the original archive in `archives/capstone-design.zip` retain flat-bundle paths and hashes; those hashes do not attest the path-adjusted organized files. Do not overwrite baseline records when rerunning the CLI. Main records organization checks separately in `evidence/organization-verification-evidence.json`; this contract does not claim those checks have passed.

A clean identity matrix proves isolation for its stated mutations and source version. The historical eight weights were 12, 12, 16, 12, 14, 12, 10 and 12; neither those weights nor their observed scores are rewritten as current twelve-owner evidence. Independent finance/verifier reviews and source-specific S1/S2 proofs remain separate.

## Historical early build-and-prove audit

From R with dependencies installed:

```sh
python3 src/audit_environment.py --root "$R" --stage early --output evidence/build-and-prove/early-audits.json
```

The preserved early audit used the eight-owner contract. Its 255-subset concentration curve and five-case matrices retain that scope. Re-executing the command against changed source creates new evidence, not a replacement historical receipt. Choose a fresh output path. The audit refuses overwrites and retains actual candidate hashes, full grades, timing, source hashes and runtime provenance. Fixture executions have `model=null` and no human approval.

- `qualification.results` grades each truthful reference and each one-owner fatal candidate, both with and without evidence. High dense points and omission must not remove a blocker.
- `concentration.results` contains all 255 nonempty subsets of M1 through M8 for W1-issued. Each row has `k`, mutation IDs and its complete actual grade. `concentration.groups` groups k=1 through 8, with count, exact arithmetic minimum/mean/maximum and qualification outcomes. A rational numerator/denominator accompanies each mean. Missing or unscorable rows fail the gate rather than leave its denominator.
- `d1.results` executes empty JSON, constants, copied numbers, verbose nonanswers, correct numbers with contradictory typed economics, blanket approvals, false and unrelated locators, section/evidence omission, suffix rejection and zero-tolerance boundary cases on all five original cases. Positive controls include explicit zero, the declared tolerance boundary and a truthful rejected funding assignment. A control passing is not an exploit passing.
- `d2` invokes the mandatory `reference_probes.audit_d2(root)` implementation. A missing implementation is `UNSCORABLE`, not a pending success. Its declared unsupported reference dimensions remain visible.
- `d3.matrices` holds gold controls and all eight isolated full-grade mutations for every original case. A missing binding owner or changed identity matrix fails its case.

Reusable Python entry points are `grade_candidate`, `observed_grade`, `d1_candidates`, `audit_d1`, `fatal_only_candidates`, `audit_qualification`, `audit_concentration`, `audit_d3` and `run_early`. The per-case functions accept a validated `Bundle`; `audit_d1`, `audit_qualification` and `audit_d3` accept an explicit episode iterable. `audit_concentration` takes one explicit episode and enumerates mutation subsets. Family and desk integrations use their own authoritative instances and preserve panel scope; controlled static panels are never settled dynamic books.

The preserved `environment_audit.passed` combines qualification, exhaustive eight-owner concentration, D1, D2 and five-case D3 engineering checks for that source version. The active implementation uses this contract and the [settled desk contract](desk-runtime-contract.md); `build-and-prove-protocol.md` remains unchanged as historical methodology. Human concentration labels, practitioner completion, calibration and model evidence require their own records. Missing human evidence does not block engineering or model execution and is not supplied by a fixture pass.
