# Exact requirement-to-evidence map

Odexa v1.2 consolidated review edition 1. This is reference evidence, not candidate approval. The statements are rendered into [the consolidated specification](../SPECIFICATION.md). Schema passes, test-source existence and recorded passes are checked separately from substantive review judgments.

| Requirement | Applicable capability classes | Exact evidence |
| --- | --- | --- |
| CORE-01 | all | [FreeContractsTests.test_closed_keys_and_strict_wire_numbers](../tests/test_free_contracts.py#L115); [FreeContractsTests.test_no_legacy_envelope_or_global_version_mutation](../tests/test_free_contracts.py#L110); [JSONContractTests.test_lexical_invalid_json](../tests/test_contracts.py#L34); [CurrentRuntimeTests.test_raw_request_target_aliases_rejected_before_dispatch](../tests/test_current_runtime.py#L66) |
| CORE-02 | all | [FreeContractsTests.test_context_exact_bytes_and_semantics](../tests/test_free_contracts.py#L126); [FreeContractsTests.test_resigned_same_acceptance_payload_has_same_receipt_binding](../tests/test_free_contracts.py#L144); [AuthorityHistoryTests.test_same_revision_whitespace_conflict_is_not_canonicalized_away](../tests/test_authority_history.py#L99) |
| POL-01 | policy | [EvaluatorTests.test_all_examples_validate](../tests/test_policy.py#L39); [EvaluatorTests.test_no_implicit_storage](../tests/test_policy.py#L45); [EvaluatorTests.test_no_implicit_training](../tests/test_policy.py#L48); [EvaluatorTests.test_action_purpose_cartesian_product](../tests/test_policy.py#L58) |
| POL-02 | policy | [EvaluatorTests.test_global_prohibit_dominates_narrow_permission](../tests/test_policy.py#L62); [EvaluatorTests.test_no_grant_dominates_agreement_for_combined_request](../tests/test_policy.py#L81); [EvaluatorTests.test_known_unsupported_duty_never_permits](../tests/test_policy.py#L91); [EvaluatorTests.test_supported_duty_remains_unverified](../tests/test_policy.py#L96) |
| POL-03 | policy | [EvaluatorTests.test_duties_accumulate_deduplicate_and_tighten](../tests/test_policy.py#L113); [EvaluatorTests.test_rule_order_does_not_change_output](../tests/test_policy.py#L123) |
| AUTH-01 | authority | [DelegationProfileTests.test_external_requires_named_grant_and_remote_observation](../tests/test_delegation_profile.py#L107); [DelegationProfileTests.test_no_union_of_partial_delegations](../tests/test_delegation_profile.py#L112); [DelegationProfileTests.test_provider_tenant_endpoint_issuer_key_substitution](../tests/test_delegation_profile.py#L120); [DelegationProfileTests.test_unknown_capability_subdelegation_and_scope_rejected](../tests/test_delegation_profile.py#L128); [ClientAuthorityTests.test_every_authenticated_operation_denies_withdrawn_delegation_before_setup](../tests/test_runtime_client_authority.py#L70); [ClientAuthorityTests.test_narrowed_scope_denies_all_operations_before_setup](../tests/test_runtime_client_authority.py#L76); [ClientAuthorityTests.test_delegation_capability_removed_for_every_operation](../tests/test_runtime_client_authority.py#L85) |
| AUTH-02 | authority | [TransportTests.test_real_two_origin_fetch_exact_bytes_and_authority_evaluation](../tests/test_authority_transport.py#L104); [TransportTests.test_untrusted_ca_and_wrong_hostname_fail](../tests/test_authority_transport.py#L124); [TransportTests.test_redirect_never_contacts_other_origin](../tests/test_authority_transport.py#L145); [TransportTests.test_no_stale_fallback_after_prior_success_and_second_document_failure](../tests/test_authority_transport.py#L150) |
| AUTH-03 | authority | [TransportTests.test_combined_fetch_budget_and_start_time](../tests/test_authority_transport.py#L198); [TransportTests.test_no_store_and_age_requirements](../tests/test_authority_transport.py#L157); [NetworkPaymentTests.test_pretransmission_wait_cannot_send_context_using_expired_authority](../tests/test_network_payments.py#L220); [IndependentAssetNodeTests.test_slow_or_cached_origin_observation_cannot_be_minted_as_fresh](../tests/test_asset_node.py#L166); [ClientAuthorityTests.test_expired_observation_during_setup_prevents_emission_for_all_routes](../tests/test_runtime_client_authority.py#L101); [ClientAuthorityTests.test_response_after_withdrawal_is_not_returned](../tests/test_runtime_client_authority.py#L122) |
| AUTH-04 | authority | [TransportTests.test_scoped_post_jose_no_ambient_credentials_or_proxy](../tests/test_authority_transport.py#L221); [TransportTests.test_before_send_denial_after_tls_emits_no_http_or_credential](../tests/test_authority_transport.py#L251); [PaymentAdapterTests.test_write_lock_wait_rechecks_stale_authority](../tests/test_payment_adapter.py#L113); [NetworkPaymentTests.test_withdrawal_during_provider_reply_blocks_commit](../tests/test_network_payments.py#L153); [ClientAuthorityTLS.test_actual_tls_setup_guard_denies_without_provider_http](../tests/test_runtime_client_authority.py#L202) |
| AUTH-05 | authority | [AuthorityHistoryTests.test_both_revision_rollbacks_rejected_after_restart](../tests/test_authority_history.py#L88); [AuthorityHistoryTests.test_policy_lineage_switch_is_not_a_revision_reset](../tests/test_authority_history.py#L119); [AuthorityHistoryTests.test_key_material_validity_uses_and_issuer_redefinitions_rejected](../tests/test_authority_history.py#L174); [AuthorityHistoryTests.test_history_does_not_reactivate_expired_snapshot](../tests/test_authority_history.py#L297) |
| AUTH-06 | authority | [AuthorityHistoryTests.test_key_rotation_retirement_then_revocation_keeps_original_receipts](../tests/test_authority_history.py#L163); [AuthorityHistoryTests.test_revoked_material_cannot_return_under_new_kid_after_removal_and_restart](../tests/test_authority_history.py#L218); [AuthorityHistoryTests.test_removed_key_is_withdrawn_even_if_original_metadata_calls_it_active](../tests/test_authority_history.py#L211); [ClientAuthorityTests.test_current_key_retirement_prevents_offer_and_current_signature_use](../tests/test_runtime_client_authority.py#L138) |
| FREE-01 | free | [FreeServiceTests.test_provider_absent_same_origin_same_contract](../tests/test_free_service.py#L192); [FreeGatewayTests.test_independent_node_direct_exchange_without_provider](../tests/test_free_gateway.py#L149); [FreeGatewayTests.test_independent_node_two_origin_exchange_with_real_delivery_and_report](../tests/test_free_gateway.py#L146); [CurrentRuntimeTests.test_free_initialisation_imports_no_paid_runtime](../tests/test_current_runtime.py#L86) |
| FREE-02 | free | [FreeContractsTests.test_context_exact_bytes_and_semantics](../tests/test_free_contracts.py#L126); [FreeContractsTests.test_assent_binds_exact_offer_principal_nonce_and_window](../tests/test_free_contracts.py#L134); [FreeServiceTests.test_wrong_tenant_issuer_key_principal_and_scope](../tests/test_free_service.py#L216) |
| FREE-03 | free | [FreeStoreTests.test_duplicate_offer_nonce_and_one_agreement_per_offer](../tests/test_free_store.py#L109); [FreeStoreTests.test_concurrent_exact_acceptance_retries_have_single_receipt](../tests/test_free_store.py#L301); [FreeStoreTests.test_idempotency_key_conflict_compares_exact_request_bytes](../tests/test_free_store.py#L134); [FreeServiceTests.test_exact_acceptance_restart_after_commit_and_conflict](../tests/test_free_service.py#L246) |
| FREE-04 | free | [FreeContractsTests.test_receipt_binds_decoded_acceptance_bytes_and_exact_windows](../tests/test_free_contracts.py#L139); [FreeServiceTests.test_withdrawal_blocks_new_access_but_original_receipt_survives](../tests/test_free_service.py#L206); [PaidServiceTests.test_original_paid_receipt_available_after_origin_outage](../tests/test_paid_service.py#L223) |
| FREE-05 | free, gateway | [FreeContractsTests.test_token_expiry_bound_to_clock_and_agreement](../tests/test_free_contracts.py#L156); [FreeContractsTests.test_introspection_allows_no_token_echo_and_requires_both_booleans](../tests/test_free_contracts.py#L160); [FreeContractsTests.test_introspection_request_principal_scope_and_expiry_correlation](../tests/test_free_contracts.py#L167); [FreeServiceTests.test_scope_expansion_wrong_role_and_duplicate_admission_denied](../tests/test_free_service.py#L226) |
| FREE-06 | free | [DelegationProfileTests.test_status_and_revoke_are_exact_agreement_bound_zero_duration_operations](../tests/test_delegation_profile.py#L58); [FreeContractsTests.test_status_is_bound_current_observation_without_access_extension](../tests/test_free_contracts.py#L150); [FreeStoreTests.test_status_update_needs_new_version_and_terminal_state_never_reactivates](../tests/test_free_store.py#L185); [FreeStoreTests.test_exact_command_retry_returns_original_response_and_is_route_scoped](../tests/test_free_store.py#L121) |
| GW-01 | gateway | [FreeGatewayTests.test_admission_delivery_and_unresolved_restart_are_distinct](../tests/test_free_gateway.py#L54); [FreeGatewayTests.test_withdrawal_outage_expiry_and_cached_body_cannot_reuse_admission](../tests/test_free_gateway.py#L71); [FreeGatewayTests.test_completion_cannot_claim_invalid_time_or_byte_count](../tests/test_free_gateway.py#L93) |
| GW-02 | gateway | [GatewayReportJournalTests.test_signer_or_sql_failure_rolls_back_terminal_and_outbox_together](../tests/test_gateway_reports.py#L94); [GatewayReportJournalTests.test_process_exit_after_outbox_insert_before_terminal_commit_recovers_unresolved](../tests/test_gateway_reports.py#L104); [GatewayReportTLSTests.test_lost_ack_exact_retry_after_restart_retains_original_receipt](../tests/test_gateway_reports.py#L175) |
| REPORT-01 | collector, gateway | [FreeContractsTests.test_report_roles_and_intake_cannot_promote_claims](../tests/test_free_contracts.py#L171); [FreeContractsTests.test_delivery_report_matches_admission_and_preserves_http_semantics](../tests/test_free_contracts.py#L178); [FreeServiceTests.test_gateway_report_is_bound_to_admission_and_retained_on_exact_retry](../tests/test_free_service.py#L273) |
| REPORT-02 | collector | [FreeStoreTests.test_records_are_idempotent_by_reporter_and_exact_event_bytes](../tests/test_free_store.py#L150); [FreeContractsTests.test_report_roles_and_intake_cannot_promote_claims](../tests/test_free_contracts.py#L171); [GatewayReportTLSTests.test_signed_wrong_report_or_bad_signature_never_acknowledges](../tests/test_gateway_reports.py#L226) |
| PAY-01 | paid | [PaymentProfileTests.test_valid_quote_fee_and_sum](../tests/test_payment_profile.py#L31); [PaymentProfileTests.test_amounts_reject_negative_float_exponent_bool_overflow](../tests/test_payment_profile.py#L32); [PaymentProfileTests.test_resource_line_required_but_may_be_free](../tests/test_payment_profile.py#L40); [PaymentProfileTests.test_exact_free_bypass](../tests/test_payment_profile.py#L90) |
| PAY-02 | paid | [PaidContractsTests.test_full_paid_context_validates_without_changing_free_or_crypto](../tests/test_paid_contracts.py#L59); [PaidContractsTests.test_receipt_must_preserve_exact_access_and_use_durations](../tests/test_paid_contracts.py#L85); [PaidContractsTests.test_paid_and_free_receipts_cannot_be_interchanged](../tests/test_paid_contracts.py#L141); [IndependentPaidNodeTests.test_authorised_signature_cannot_turn_paid_receipt_into_access_grant](../tests/test_paid_node.py#L166) |
| PAY-03 | paid | [PaymentProfileTests.test_acceptance_is_not_mandate](../tests/test_payment_profile.py#L53); [PaymentProfileTests.test_wrong_payer_and_exact_mandate_bindings](../tests/test_payment_profile.py#L55); [PaidServiceTests.test_assent_alone_and_agent_credential_cannot_authorize_payment](../tests/test_paid_service.py#L158); [IndependentPaidNodeTests.test_valid_but_unapproved_price_and_payee_are_rejected_before_assent](../tests/test_paid_node.py#L152) |
| PAY-04 | paid | [PaymentAdapterTests.test_wrong_signer_key_role_and_exact_bytes_fail_without_commit](../tests/test_payment_adapter.py#L55); [PaymentAdapterTests.test_signed_wrong_amount_or_check_is_not_authorized_settlement](../tests/test_payment_adapter.py#L67); [NetworkPaymentTests.test_wrong_tenant_is_denied_before_provider_contact](../tests/test_network_payments.py#L168); [NetworkPaymentTests.test_withdrawal_during_provider_reply_blocks_commit](../tests/test_network_payments.py#L153) |
| PAY-05 | paid | [PaymentProfileTests.test_response_time_and_sequence](../tests/test_payment_profile.py#L74); [PaymentProfileTests.test_confirmation_and_duplicate_no_charge_action](../tests/test_payment_profile.py#L62); [PaymentProfileTests.test_failed_then_confirmed_reference_fixed](../tests/test_payment_profile.py#L88); [PaidServiceTests.test_exact_verification_retry_never_reactivates_after_reversal](../tests/test_paid_service.py#L196) |
| PAY-06 | paid | [PaidServiceTests.test_actual_paid_pending_confirmed_delivery_reversed_denial](../tests/test_paid_service.py#L167); [PaidServiceTests.test_late_financial_confirmation_cannot_extend_expired_access](../tests/test_paid_service.py#L217); [PaymentProfileTests.test_reversal_terminal_old_retry_no_resurrection](../tests/test_payment_profile.py#L85) |
| PAY-07 | paid | [PaidServiceTests.test_paid_acceptance_and_payment_state_share_atomic_commit](../tests/test_paid_service.py#L204); [PaymentAdapterTests.test_write_lock_wait_rechecks_key_expiry_within_freshness_window](../tests/test_payment_adapter.py#L117); [PaymentAdapterTests.test_write_lock_wait_applies_access_expiry_before_confirmation](../tests/test_payment_adapter.py#L122) |
| ASSET-01 | asset | [AssetEvidenceTests.test_closed_version_signature_and_byte_substitution](../tests/test_asset_evidence.py#L83); [AssetEvidenceTests.test_origin_scope_issuer_key_use_and_endpoint_substitution](../tests/test_asset_evidence.py#L108); [AssetRuntimeTests.test_direct_versions_coding_relocation_and_closed_archive](../tests/test_asset_runtime.py#L178) |
| ASSET-02 | asset | [AssetEvidenceTests.test_untrusted_bundle_cannot_bootstrap_origin_history](../tests/test_asset_evidence.py#L92); [AssetEvidenceTests.test_removed_compromised_key_remains_rejected_by_pinned_history](../tests/test_asset_evidence.py#L133); [AssetEvidenceTests.test_same_key_identity_cannot_be_rebound](../tests/test_asset_evidence.py#L142); [IndependentAssetNodeTests.test_cross_origin_parent_requires_both_independent_current_origins](../tests/test_asset_node.py#L135) |
| ASSET-03 | asset | [AssetEvidenceTests.test_missing_extra_duplicate_context_and_unreachable_manifest_rejected](../tests/test_asset_evidence.py#L99); [AssetEvidenceTests.test_exact_copy_derivation_closes_and_changed_copy_is_rejected](../tests/test_asset_evidence.py#L157); [AssetEvidenceTests.test_depth_bound_and_same_version_conflicts_are_closed](../tests/test_asset_evidence.py#L168); [AssetEvidenceTests.test_duplicate_root_or_edge_cannot_hide_behind_object_member_order](../tests/test_asset_evidence.py#L176) |
| ASSET-04 | asset, measurement | [AssetEvidenceTests.test_signed_digest_claim_is_not_proof_of_client_receipt_or_model_use](../tests/test_asset_evidence.py#L185); [AssetEvidenceTests.test_coded_variant_and_decoded_representation_are_separate_checks](../tests/test_asset_evidence.py#L200); [AssetEvidenceTests.test_ranges_head_missing_metadata_and_upstream_hops_never_become_full_delivery](../tests/test_asset_evidence.py#L209) |
| ASSET-05 | asset | [AssetCatalogTests.test_same_version_cannot_change_after_restart](../tests/test_asset_catalog.py#L32); [AssetCatalogTests.test_late_current_authority_failure_rolls_back_all_material](../tests/test_asset_catalog.py#L47); [IndependentAssetNodeTests.test_redefined_immutable_version_is_rejected_after_process_restart](../tests/test_asset_node.py#L109) |
| STORE-01 | storage | [SelectedStorageContractsTests.test_exact_free_and_paid_selection_chain](../tests/test_storage_contracts.py#L31); [SelectedStorageContractsTests.test_selection_is_closed_and_never_inferred](../tests/test_storage_contracts.py#L42); [SelectedStorageContractsTests.test_exact_wire_digest_not_projected_base_digest](../tests/test_storage_contracts.py#L51) |
| STORE-02 | storage | [StorageSessionTests.test_complete_write_many_reports_one_action](../tests/test_storage_sessions.py#L53); [StorageSessionTests.test_copy_inherits_time_and_resolves_parent_exactly](../tests/test_storage_sessions.py#L182); [StorageSessionTests.test_wrong_claimed_retention_deadline_invalid_and_original_use_expiry_caps](../tests/test_storage_sessions.py#L189); [StorageEvidenceTests.test_copy_parent_outside_snapshot_cannot_be_silently_dropped](../tests/test_storage_evidence.py#L79) |
| STORE-03 | storage, measurement | [StorageSessionTests.test_exact_retry_not_new_action_session_or_checkpoint](../tests/test_storage_sessions.py#L81); [StorageSessionTests.test_late_wake_does_not_backfill_previous_indices](../tests/test_storage_sessions.py#L164); [StorageSessionTests.test_failed_cleanup_does_not_fabricate_cessation_or_drop_expected_checks](../tests/test_storage_sessions.py#L177); [StorageSessionTests.test_all_conflict_variants_and_exact_retries_are_order_independent](../tests/test_storage_sessions.py#L98) |
| AGENT-01 | agent | [StorageRuntimeTests.test_provider_independent_agent_storage_and_signed_reporting](../tests/test_storage_runtime.py#L79); [StorageRuntimeTests.test_two_origin_agent_storage_and_signed_reporting](../tests/test_storage_runtime.py#L81); [unsupported duties and irreversible or model uses are refused](../verification/test_duty_executor.mjs); [attribution output preserves all required distinct names and source links](../verification/test_duty_executor.mjs); [pending outbox survives reopen with identical bytes, IDs and original deadline](../verification/test_duty_executor.mjs); [safe cancelled acquisition does not block a separately permitted new acquisition or fabricate events](../verification/test_storage_executor.mjs); [cancellation persistence failure remains uncertain and restart never invents completion](../verification/test_storage_executor.mjs) |
| EVID-01 | archive | [PortableEvidenceTests.test_missing_extra_duplicate_and_changed_blobs_rejected](../tests/test_portable_evidence.py#L232); [PortableEvidenceTests.test_exporter_keys_cannot_bootstrap_external_client_trust](../tests/test_portable_evidence.py#L247); [AssetRuntimeTests.test_importer_rejects_authorized_exporter_asset_omission_and_untrusted_origin](../tests/test_asset_runtime.py#L200); [PaidEvidenceTests.test_independent_payer_pin_is_required_and_known_compromise_is_not_hidden](../tests/test_paid_evidence.py#L171) |
| EVID-02 | archive | [PortableEvidenceTests.test_indexed_lifecycle_cannot_invent_unattested_revocation_or_versions](../tests/test_portable_evidence.py#L135); [PaidEvidenceTests.test_audit_missing_reordered_changed_state_or_cut_fails_after_exporter_resigns](../tests/test_paid_evidence.py#L179); [PaidEvidenceTests.test_signed_provider_proof_and_authority_are_both_required](../tests/test_paid_evidence.py#L201); [PaidEvidenceTests.test_late_confirmation_and_lazy_expiry_never_restore_access](../tests/test_paid_evidence.py#L145) |
| EVID-03 | archive | [PaidEvidenceTests.test_selected_paid_storage_has_signed_copy_parent_closure](../tests/test_paid_evidence.py#L261); [PaidEvidenceTests.test_paid_asset_graph_and_actual_delivery_archive](../tests/test_paid_evidence.py#L299); [PaidEvidenceTests.test_paid_asset_storage_graph_archive](../tests/test_paid_evidence.py#L300); [StorageEvidenceTests.test_ordinary_exporter_never_infers_selected_storage](../tests/test_storage_evidence.py#L75) |
| EVID-04 | archive | [PortableEvidenceTests.test_archive_import_restart_and_exact_retry_are_inert](../tests/test_portable_evidence.py#L209); [PortableEvidenceTests.test_no_credential_tables_or_token_plaintext_exported](../tests/test_portable_evidence.py#L222); [PortableEvidenceTests.test_archive_cannot_be_constructed_over_live_service_database](../tests/test_portable_evidence.py#L451); [PaidEvidenceTests.test_source_restart_preserves_exact_payment_proofs_without_credentials](../tests/test_paid_evidence.py#L245) |
| MIG-01 | handover | [ProviderHandoverTests.test_real_cutover_preserves_exact_evidence_and_requires_fresh_assent](../tests/test_provider_handover.py#L249); [ProviderHandoverTests.test_successor_staging_cannot_self_appoint_or_receive_old_credentials](../tests/test_provider_handover.py#L306); [ProviderHandoverTests.test_outage_and_rollback_after_cutover_never_fall_back_to_old_provider](../tests/test_provider_handover.py#L325); [ProviderHandoverTests.test_paid_rights_stay_original_and_new_provider_requires_new_quote_and_mandate](../tests/test_provider_handover.py#L373) |
| MIG-02 | handover | [ProviderHandoverTests.test_old_collector_can_drain_selected_storage_without_future_access_authority](../tests/test_provider_handover.py#L277); [ProviderHandoverTests.test_live_key_rotation_retains_old_receipt_and_blocks_retired_signer](../tests/test_provider_handover.py#L343) |
| METRIC-01 | measurement | [CoverageTests.test_closed_registry_exact_policy_scope_time_and_no_secret_fields](../tests/test_observation_coverage.py#L200); [CoverageTests.test_history_restart_rollback_same_revision_conflict_and_repeated_read_clock](../tests/test_observation_coverage.py#L221); [CoverageTLSTests.test_static_registry_fetch_needs_no_service_payment_or_credential](../tests/test_observation_coverage.py#L280); [CoverageTests.test_registry_acquisition_age_covers_both_requests](../tests/test_observation_coverage.py#L243) |
| METRIC-02 | measurement | [CoverageTests.test_static_publication_has_unknown_traffic_and_null_not_zero_percent](../tests/test_observation_coverage.py#L68); [CoverageTests.test_zero_expectations_is_unknown_ratio_and_unexpected_reports_are_not_a_denominator](../tests/test_observation_coverage.py#L102); [CoverageTests.test_collector_receipt_uses_exact_payload_and_is_not_another_use](../tests/test_observation_coverage.py#L139) |
| METRIC-03 | measurement | [CoverageTests.test_known_cohort_separates_timely_late_missing_and_pending](../tests/test_observation_coverage.py#L84); [CoverageTests.test_expectation_conflicts_never_shrink_or_rewrite_the_denominator](../tests/test_observation_coverage.py#L131); [CoverageTests.test_another_agreement_or_selected_profile_cannot_fill_a_known_gap](../tests/test_observation_coverage.py#L192); [CoverageTests.test_as_of_does_not_backfill_a_missing_report_with_future_receipt](../tests/test_observation_coverage.py#L96) |
| REF-01 | reference_distribution | [CurrentRuntimeTests.test_free_initialisation_imports_no_paid_runtime](../tests/test_current_runtime.py#L86); [CurrentRuntimeTests.test_private_configuration_and_no_synthetic_public_verifier](../tests/test_current_runtime.py#L94); [CurrentRuntimeTests.test_static_only_allowlist_no_secrets_or_unprotected_asset](../tests/test_current_runtime.py#L46); [CurrentRuntimeTests.test_client_verifies_public_authority_without_reading_service_private_key](../tests/test_current_runtime.py#L76); [Installed command flow](../verification/integrated-installed-checks.json) |
