<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="1" skipped="0" tests="315" time="35.060" timestamp="2026-10-07T19:13:01.034018+00:00" hostname="vultr"><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I001]" time="0.006" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I002]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I003]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I004]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I005]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I006]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I007]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I008]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I009]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I010]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I011]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I012]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I013]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I014]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_invariant_holds[I015]" time="0.001" /><testcase classname="tests.test_cain42_e27c_control" name="test_control_e2e_execute_then_block" time="0.015" /><testcase classname="tests.test_cain42_e27c_control" name="test_context_binding_blocks_substitution" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_dependency_change_requires_reverify" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_lineage_parent_invalidation" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_tampered_control_rejected" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_attack_bench_all_contained" time="0.053" /><testcase classname="tests.test_cain42_e27c_control" name="test_cleanroom_valid_and_tamper_rejected" time="0.007" /><testcase classname="tests.test_cain42_e27c_control" name="test_cleanroom_zero_cain_imports" time="0.002" /><testcase classname="tests.test_cain42_e27c_control" name="test_cleanroom_cli" time="0.166" /><testcase classname="tests.test_cain42_e27c_control" name="test_unknown_condition_state_never_allows" time="0.006" /><testcase classname="tests.test_cain42_e27c_control" name="test_conformance_library_and_cleanroom_agree_on_every_vector" time="0.013" /><testcase classname="tests.test_cain42_e27c_control" name="test_forged_child_cannot_escape_its_parent[change0]" time="0.009" /><testcase classname="tests.test_cain42_e27c_control" name="test_forged_child_cannot_escape_its_parent[change1]" time="0.007" /><testcase classname="tests.test_cain42_e27c_control" name="test_forged_child_cannot_escape_its_parent[change2]" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_forged_child_cannot_escape_its_parent[change3]" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_child_must_name_the_parent_it_is_judged_against" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_missing_policy_or_lineage_state_is_unknown_not_valid[policy_version-POLICY_UNKNOWN]" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_missing_policy_or_lineage_state_is_unknown_not_valid[lineage_valid-LINEAGE_UNKNOWN]" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_the_unmodified_scenario_still_allows" time="0.004" /><testcase classname="tests.test_cain42_e27c_control" name="test_missing_revocation_state_is_unknown_not_unrevoked" time="0.004" /><testcase classname="tests.test_cain42_e27c_control" name="test_gate_binds_the_called_tool_to_the_presented_context" time="0.005" /><testcase classname="tests.test_cain42_e27c_control" name="test_a_denied_action_is_denied_even_if_also_allowed" time="0.006" /><testcase classname="tests.test_cain42_e27c_control" name="test_delegation_cannot_loosen_risk_constraints[child_risk0-True]" time="0.006" /><testcase classname="tests.test_cain42_e27c_control" name="test_delegation_cannot_loosen_risk_constraints[child_risk1-True]" time="0.006" /><testcase classname="tests.test_cain42_e27c_control" name="test_delegation_cannot_loosen_risk_constraints[child_risk2-False]" time="0.006" /><testcase classname="tests.test_cain42_e27c_control" name="test_delegation_cannot_loosen_risk_constraints[child_risk3-False]" time="0.009" /><testcase classname="tests.test_cain42_e27c_control" name="test_delegation_cannot_loosen_risk_constraints[child_risk4-False]" time="0.008" /><testcase classname="tests.test_cain42_e27c_independent_go" name="test_go_catcp_matches_all_vectors" time="1.328" /><testcase classname="tests.test_cain42_e27c_independent_go" name="test_go_catcp_single_bundle" time="0.012" /><testcase classname="tests.test_cain42_e27c_independent_go" name="test_go_catcp_no_external_deps" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_epistemic_illegal_transition_derived_to_observed_blocked" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_epistemic_illegal_transition_counterfactual_to_observed_blocked" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_epistemic_valid_transition_unverified_to_verified_with_method" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_trust_provenance_graph_detects_orphan_and_circular_claims" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_trust_vector_non_compensatory_critical_dimensions" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_trust_budget_allocation_and_spend" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_trust_budget_cross_tenant_isolation" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_authority_attenuation_widening_strictly_rejected" time="0.000" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_authority_attenuation_parent_revocation_invalidates_descendants" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_pcaa_expiration_and_resource_mismatch_fails_closed" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_lra_re_evaluates_at_last_responsible_moment" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_effect_intent_reconciliation_detects_wrong_destination_and_side_effects" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_causal_forensics_incident_reconstruction" time="0.000" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_counterfactual_engine_segregates_hypothetical_from_real" time="0.000" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_adversarial_simulator_blocks_compound_attacks" time="0.006" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_meta_verification_audits_verifier_assumptions" time="0.002" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_independent_verifier_passport_and_chain" time="0.009" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_conformance_protocol_runner_evaluates_all_11_domains" time="0.035" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_primitive_api_all_14_primitives_operational" time="0.008" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_primitives_return_failed_receipt_on_malformed_input" time="0.001" /><testcase classname="tests.test_cain_trust_kernel_3" name="test_primitives_happy_paths_still_succeed" time="0.001" /><testcase classname="tests.test_commit_certificate_type" name="test_gateway_accepts_the_commit_certificate" time="0.203" /><testcase classname="tests.test_commit_certificate_type" name="test_gateway_refuses_a_prepare_certificate_served_as_the_commit" time="0.009" /><testcase classname="tests.test_commit_certificate_type" name="test_snapshot_reverification_accepts_the_commit_certificate" time="0.005" /><testcase classname="tests.test_commit_certificate_type" name="test_snapshot_reverification_refuses_a_prepare_certificate" time="0.017" /><testcase classname="tests.test_commit_certificate_type" name="test_public_hosted_verifier_accepts_the_commit_certificate" time="0.002" /><testcase classname="tests.test_commit_certificate_type" name="test_public_hosted_verifier_refuses_a_prepare_certificate" time="0.003" /><testcase classname="tests.test_commit_certificate_type" name="test_published_bundle_still_verifies" time="0.341" /><testcase classname="tests.test_commit_certificate_type" name="test_bundle_with_a_prepare_certificate_in_a_commit_slot_fails" time="0.132" /><testcase classname="tests.test_decision_record_separator" name="test_the_attack_worked_on_the_old_encoding" time="0.001" /><testcase classname="tests.test_decision_record_separator" name="test_caller_text_cannot_carry_the_separator" time="0.014" /><testcase classname="tests.test_decision_record_separator" name="test_a_resplit_record_is_not_intact" time="0.017" /><testcase classname="tests.test_decision_record_separator" name="test_digest_refuses_a_field_with_the_separator" time="0.001" /><testcase classname="tests.test_decision_record_separator" name="test_public_verifier_flags_the_resplit_record" time="0.018" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_unsigned_token_is_not_valid" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_self_signed_token_from_untrusted_key_is_not_valid" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_genuine_kernel_token_verifies_under_its_trusted_key" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_tampered_genuine_token_is_rejected" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_malformed_expiry_fails_closed[99999999999]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_malformed_expiry_fails_closed[nan]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_malformed_expiry_fails_closed[inf]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_malformed_expiry_fails_closed[None]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_malformed_expiry_fails_closed[bad_expiry4]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pcaa_non_allow_decision_is_not_dispatchable" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_passport_signed_by_untrusted_key_is_not_valid" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_passport_signed_by_trusted_key_is_valid" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_passport_unparseable_expiry_fails_closed" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_causal_chain_without_commitments_is_not_valid" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_causal_chain_without_payload_wrapper_verifies" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_causal_chain_checks_the_timestamp_monotonicity_it_claims" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_causal_chain_reordering_is_detected" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_execution_boundary_rejects_self_signed_capability" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_execution_boundary_accepts_own_capability" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_execution_boundary_rejects_non_allow_capability" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_capability_with_non_finite_time_never_verifies[expires_at]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_capability_with_non_finite_time_never_verifies[issued_at]" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_child_action_must_be_inside_its_own_scope" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_nan_ceiling_cannot_widen_delegation[risk_ceiling]" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_nan_ceiling_cannot_widen_delegation[blast_radius_ceiling]" time="0.004" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_nan_ceiling_cannot_widen_delegation[budget_ceiling_usd]" time="0.005" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_pinned_keys_reject_unpinned_signer" time="0.004" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_chain_rejects_non_allow_tokens_and_decision_change" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_child_cannot_change_intent_or_resource" time="0.006" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_agent_passport_pin_rejects_unpinned_issuer" time="0.007" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_manifest_with_forged_signature_is_rejected" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_manifest_signed_by_another_key_is_rejected" time="0.003" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_canonical_algorithm_cannot_be_silently_replaced" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_idle_decay_never_raises_trust" time="0.000" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_salami_cap_cannot_be_reset_with_negative_or_nan_inputs[-10000-0.1]" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_salami_cap_cannot_be_reset_with_negative_or_nan_inputs[10-nan]" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_salami_cap_cannot_be_reset_with_negative_or_nan_inputs[10--5.0]" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_salami_cap_cannot_be_reset_with_negative_or_nan_inputs[10--inf]" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_homoglyph_action_cannot_hide_a_destructive_call" time="0.001" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_authority_escalation_check_is_case_insensitive" time="0.000" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_orphan_authority_needs_a_verifiable_signature" time="0.000" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_orphan_authority_accepts_a_pinned_issuer_signature" time="0.002" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_trust_laundering_through_a_single_intermediary_is_detected" time="0.000" /><testcase classname="tests.test_ip_hardening_batch3_kernel" name="test_invariant8_flags_child_authority_from_an_empty_parent" time="0.005" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_honest_record_passes_with_the_pinned_key" time="0.001" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_forger_signing_with_their_own_key_fails" time="0.001" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_fields_outside_the_hash_are_reported_unbound" time="0.001" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_empty_bundle_fails" time="0.001" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_single_evidence_file_is_actually_verified" time="0.003" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_bundle_with_mixed_tenants_or_replayed_ids_fails" time="0.004" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_merkle_proof_counts_only_against_a_pinned_root" time="0.002" /><testcase classname="tests.test_offline_verifier_fail_closed" name="test_manifest_with_an_embedded_forger_key_is_not_valid" time="0.002" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_published_copies_are_identical_and_verifier_matches_source" time="0.391"><failure message="AssertionError: index.html&#10;assert b'&lt;!doctype h...ody&gt;&lt;/html&gt;\n' == b'&lt;!doctype h...ody&gt;&lt;/html&gt;\n'&#10;  &#10;  At index 429 diff: b'p' != b'm'&#10;  Use -v to get more diff">tests/test_pbft_qc_public_bundle.py:43: in test_published_copies_are_identical_and_verifier_matches_source
    assert (GW / f).read_bytes() == (ROOT / "scripts/cain42_bft/pbft_qc_proof_page" / f).read_bytes(), f
E   AssertionError: index.html
E   assert b'&lt;!doctype h...ody&gt;&lt;/html&gt;\n' == b'&lt;!doctype h...ody&gt;&lt;/html&gt;\n'
E     
E     At index 429 diff: b'p' != b'm'
E     Use -v to get more diff</failure></testcase><testcase classname="tests.test_pbft_qc_public_bundle" name="test_verifier_has_no_cain_imports" time="0.001" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_bundle_verifies" time="0.213" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_bundle_contains_no_private_material" time="0.004" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_engine_verification_agrees" time="0.284" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_tampered_operation_in_leader_proposal_fails" time="0.152" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_divergent_node_history_fails" time="0.202" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_swapped_member_key_fails" time="0.016" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_authorization_certificate_for_other_action_fails" time="0.189" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_browser_page_verifier[False]" time="1.502" /><testcase classname="tests.test_pbft_qc_public_bundle" name="test_browser_page_verifier[True]" time="1.754" /><testcase classname="tests.test_public_verifier_sweep" name="test_universal_proof_with_no_sub_proofs_is_never_valid" time="0.001" /><testcase classname="tests.test_public_verifier_sweep" name="test_universal_proof_from_an_untrusted_signer_is_not_valid" time="0.001" /><testcase classname="tests.test_public_verifier_sweep" name="test_universal_proof_malformed_expiry_fails_closed[2999-01-01]" time="0.002" /><testcase classname="tests.test_public_verifier_sweep" name="test_universal_proof_malformed_expiry_fails_closed[nan]" time="0.007" /><testcase classname="tests.test_public_verifier_sweep" name="test_universal_proof_malformed_expiry_fails_closed[None]" time="0.008" /><testcase classname="tests.test_public_verifier_sweep" name="test_public_route_pins_issuer_keys" time="0.003" /><testcase classname="tests.test_public_verifier_sweep" name="test_unsigned_worm_package_is_not_authentic" time="0.000" /><testcase classname="tests.test_public_verifier_sweep" name="test_worm_package_signed_by_untrusted_key_is_not_authentic" time="0.002" /><testcase classname="tests.test_public_verifier_sweep" name="test_crossbench_report_attested_by_another_key_is_not_verified" time="0.272" /><testcase classname="tests.test_risk_screen_nested" name="test_injection_is_screened_wherever_it_sits[payload0]" time="0.002" /><testcase classname="tests.test_risk_screen_nested" name="test_injection_is_screened_wherever_it_sits[payload1]" time="0.010" /><testcase classname="tests.test_risk_screen_nested" name="test_injection_is_screened_wherever_it_sits[payload2]" time="0.002" /><testcase classname="tests.test_risk_screen_nested" name="test_injection_is_screened_wherever_it_sits[payload3]" time="0.001" /><testcase classname="tests.test_risk_screen_nested" name="test_injection_is_screened_wherever_it_sits[payload4]" time="0.001" /><testcase classname="tests.test_risk_screen_nested" name="test_clean_nested_payload_is_allowed" time="0.001" /><testcase classname="tests.test_risk_screen_nested" name="test_payload_too_deep_to_walk_is_unanswered_not_skipped" time="0.001" /><testcase classname="tests.test_risk_screen_nested" name="test_empty_payload_is_still_skipped" time="0.001" /><testcase classname="tests.test_risk_screen_nested" name="test_unreadable_threshold_or_spend_holds_for_a_human[$100-5]" time="0.014" /><testcase classname="tests.test_risk_screen_nested" name="test_unreadable_threshold_or_spend_holds_for_a_human[100-lots]" time="0.014" /><testcase classname="tests.test_risk_screen_nested" name="test_unreadable_threshold_or_spend_holds_for_a_human[nan-5]" time="0.019" /><testcase classname="tests.test_risk_screen_nested" name="test_unreadable_threshold_or_spend_holds_for_a_human[100-nan]" time="0.029" /><testcase classname="tests.test_risk_screen_nested" name="test_readable_threshold_still_decides_by_amount" time="0.017" /><testcase classname="platform-gateway.tests.test_fabric" name="test_every_live_service_is_mapped_exactly_once" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_catalog_carries_a_fabric_domain_for_every_service" time="0.019" /><testcase classname="platform-gateway.tests.test_fabric" name="test_eleven_trust_fabric_domains_in_the_stated_order" time="0.002" /><testcase classname="platform-gateway.tests.test_fabric" name="test_hierarchy_endpoint_names_the_parent_and_both_deployment_models" time="0.011" /><testcase classname="platform-gateway.tests.test_fabric" name="test_domains_endpoint_counts_only_live_services" time="0.012" /><testcase classname="platform-gateway.tests.test_fabric" name="test_domain_gaps_are_reported_not_hidden" time="0.010" /><testcase classname="platform-gateway.tests.test_fabric" name="test_fabric_catalog_groups_are_render_ready_and_complete" time="0.016" /><testcase classname="platform-gateway.tests.test_fabric" name="test_architecture_page_renders_the_hierarchy" time="0.020" /><testcase classname="platform-gateway.tests.test_fabric" name="test_alias_urls_redirect_to_the_canonical_fabric_page" time="0.020" /><testcase classname="platform-gateway.tests.test_fabric" name="test_sitemap_lists_the_fabric_page_and_not_its_aliases" time="0.013" /><testcase classname="platform-gateway.tests.test_fabric" name="test_whoami_resolves_a_root_key_to_a_service_principal" time="0.108" /><testcase classname="platform-gateway.tests.test_fabric" name="test_whoami_resolves_an_agent_sub_key_to_an_agent_principal_in_the_same_tenant" time="0.016" /><testcase classname="platform-gateway.tests.test_fabric" name="test_whoami_is_idempotent_one_key_is_one_principal" time="0.037" /><testcase classname="platform-gateway.tests.test_fabric" name="test_whoami_requires_a_key_and_an_active_subscription" time="0.019" /><testcase classname="platform-gateway.tests.test_fabric" name="test_raw_api_keys_are_never_stored" time="0.027" /><testcase classname="platform-gateway.tests.test_fabric" name="test_register_list_and_revoke_a_principal" time="0.068" /><testcase classname="platform-gateway.tests.test_fabric" name="test_principals_are_tenant_scoped" time="0.113" /><testcase classname="platform-gateway.tests.test_fabric" name="test_agent_sub_keys_cannot_manage_webhooks" time="0.030" /><testcase classname="platform-gateway.tests.test_fabric" name="test_plan_profile_is_tenant_bound_and_owner_only" time="0.048" /><testcase classname="platform-gateway.tests.test_fabric" name="test_plan_profile_without_actionproof_is_503" time="0.015" /><testcase classname="platform-gateway.tests.test_fabric" name="test_agent_sub_keys_cannot_mint_or_revoke_principals" time="0.044" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_principal_kind_and_bad_public_key_are_rejected_at_registration" time="0.036" /><testcase classname="platform-gateway.tests.test_fabric" name="test_real_ed25519_signature_verification" time="0.075" /><testcase classname="platform-gateway.tests.test_fabric" name="test_signature_verification_needs_a_registered_public_key" time="0.042" /><testcase classname="platform-gateway.tests.test_fabric" name="test_shadow_mode_never_blocks_even_when_stages_deny" time="0.264" /><testcase classname="platform-gateway.tests.test_fabric" name="test_enforce_mode_blocks_and_names_the_stage" time="1.018" /><testcase classname="platform-gateway.tests.test_fabric" name="test_clean_call_is_allowed_and_records_every_stage" time="0.120" /><testcase classname="platform-gateway.tests.test_fabric" name="test_actionproof_unreachable_fails_closed_when_enforcing" time="0.423" /><testcase classname="platform-gateway.tests.test_fabric" name="test_actionproof_unreachable_is_degraded_not_blocked_when_advisory" time="0.384" /><testcase classname="platform-gateway.tests.test_fabric" name="test_derive_outcome_unavailable_enforcing_stage_never_allows[policy]" time="0.062" /><testcase classname="platform-gateway.tests.test_fabric" name="test_derive_outcome_unavailable_enforcing_stage_never_allows[risk]" time="0.044" /><testcase classname="platform-gateway.tests.test_fabric" name="test_derive_outcome_unavailable_enforcing_stage_never_allows[trust]" time="0.037" /><testcase classname="platform-gateway.tests.test_fabric" name="test_derive_outcome_unavailable_enforcing_stage_never_allows[actionproof]" time="0.110" /><testcase classname="platform-gateway.tests.test_fabric" name="test_no_constraint_profile_is_not_a_denial" time="0.087" /><testcase classname="platform-gateway.tests.test_fabric" name="test_proven_violation_blocks_when_verification_is_enforcing" time="0.128" /><testcase classname="platform-gateway.tests.test_fabric" name="test_revoked_principal_denies_identity_stage" time="0.039" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decision_is_recorded_and_retrievable_by_id" time="0.091" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decisions_are_tenant_scoped" time="0.078" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decisions_endpoint_rejects_unknown_service" time="0.072" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decision_endpoint_runs_the_real_path" time="0.059" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decision_reports_per_stage_latency_in_server_timing" time="0.084" /><testcase classname="platform-gateway.tests.test_fabric" name="test_server_timing_header_sanitises_metric_names" time="0.007" /><testcase classname="platform-gateway.tests.test_fabric" name="test_policy_stage_sends_the_same_opa_document_the_proxy_sends" time="0.038" /><testcase classname="platform-gateway.tests.test_fabric" name="test_policy_stage_reports_entitled_false_when_the_caller_is_not_active" time="0.032" /><testcase classname="platform-gateway.tests.test_fabric" name="test_status_endpoint_states_the_enforcement_mode" time="0.098" /><testcase classname="platform-gateway.tests.test_fabric" name="test_intent_is_recorded_when_declared" time="0.028" /><testcase classname="platform-gateway.tests.test_fabric" name="test_undeclared_intent_is_not_configured_not_allow" time="0.032" /><testcase classname="platform-gateway.tests.test_fabric" name="test_intent_can_be_required" time="0.032" /><testcase classname="platform-gateway.tests.test_fabric" name="test_intent_is_length_bounded" time="0.045" /><testcase classname="platform-gateway.tests.test_fabric" name="test_structural_verification_rejects_a_malformed_plan" time="0.051" /><testcase classname="platform-gateway.tests.test_fabric" name="test_structural_verification_passes_a_well_formed_plan" time="0.071" /><testcase classname="platform-gateway.tests.test_fabric" name="test_verification_is_skipped_with_no_plan" time="0.029" /><testcase classname="platform-gateway.tests.test_fabric" name="test_approval_reports_not_configured_rather_than_allow" time="0.042" /><testcase classname="platform-gateway.tests.test_fabric" name="test_require_approval_verdict_is_reachable" time="0.056" /><testcase classname="platform-gateway.tests.test_fabric" name="test_execution_stage_reports_prevention_when_blocked" time="0.034" /><testcase classname="platform-gateway.tests.test_fabric" name="test_execution_stage_does_not_claim_upstream_success" time="0.036" /><testcase classname="platform-gateway.tests.test_fabric" name="test_mcpgate_stage_names_the_enforcement_boundary" time="0.023" /><testcase classname="platform-gateway.tests.test_fabric" name="test_evidence_stage_names_the_record_it_belongs_to" time="0.031" /><testcase classname="platform-gateway.tests.test_fabric" name="test_stored_stages_match_returned_stages_exactly" time="0.032" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decision_carries_a_schema_version" time="0.030" /><testcase classname="platform-gateway.tests.test_fabric" name="test_integrity_digest_verifies_an_untouched_record" time="0.026" /><testcase classname="platform-gateway.tests.test_fabric" name="test_integrity_digest_detects_a_tampered_record" time="0.040" /><testcase classname="platform-gateway.tests.test_fabric" name="test_integrity_digest_detects_a_tampered_stage_list" time="0.033" /><testcase classname="platform-gateway.tests.test_fabric" name="test_integrity_reports_unverifiable_rather_than_failed_for_old_records" time="0.283" /><testcase classname="platform-gateway.tests.test_fabric" name="test_record_is_signed_by_a_key_outside_the_database" time="0.126" /><testcase classname="platform-gateway.tests.test_fabric" name="test_edit_with_recomputed_digest_is_caught_by_the_signature" time="0.045" /><testcase classname="platform-gateway.tests.test_fabric" name="test_moving_a_signature_between_records_is_caught" time="0.072" /><testcase classname="platform-gateway.tests.test_fabric" name="test_unsigned_record_is_reported_as_unsigned_not_as_signed" time="0.096" /><testcase classname="platform-gateway.tests.test_fabric" name="test_signature_verifies_offline_with_the_published_key" time="0.061" /><testcase classname="platform-gateway.tests.test_fabric" name="test_group_readable_key_is_refused_and_records_go_unsigned" time="0.012" /><testcase classname="platform-gateway.tests.test_fabric" name="test_dry_run_evaluates_without_writing_evidence" time="0.031" /><testcase classname="platform-gateway.tests.test_fabric" name="test_kill_switch_blocks_every_action_for_the_tenant" time="0.051" /><testcase classname="platform-gateway.tests.test_fabric" name="test_kill_switch_blocks_even_in_shadow_mode" time="0.106" /><testcase classname="platform-gateway.tests.test_fabric" name="test_kill_switch_is_tenant_scoped" time="0.099" /><testcase classname="platform-gateway.tests.test_fabric" name="test_release_restores_service" time="0.039" /><testcase classname="platform-gateway.tests.test_fabric" name="test_kill_switch_history_is_an_incident_timeline" time="0.015" /><testcase classname="platform-gateway.tests.test_fabric" name="test_halted_decisions_are_marked_in_the_record" time="0.036" /><testcase classname="platform-gateway.tests.test_fabric" name="test_decision_carries_delegated_authority" time="0.048" /><testcase classname="platform-gateway.tests.test_fabric" name="test_agent_key_cannot_rename_itself_around_a_rule_written_for_it" time="0.536" /><testcase classname="platform-gateway.tests.test_fabric" name="test_a_customer_key_may_still_label_the_agent_it_acts_for" time="0.041" /><testcase classname="platform-gateway.tests.test_fabric" name="test_quorum_phrase_is_read_from_the_cluster_record" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_agent_key_cannot_rename_itself_around_its_own_tool_rule" time="0.183" /><testcase classname="platform-gateway.tests.test_fabric" name="test_customer_key_may_still_label_the_agent_it_acts_for" time="0.054" /><testcase classname="platform-gateway.tests.test_fabric" name="test_baseline_reports_insufficient_history_rather_than_normal" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_anomaly_detection_says_unknown_not_clean_without_a_baseline" time="0.002" /><testcase classname="platform-gateway.tests.test_fabric" name="test_baseline_is_computed_from_real_recorded_decisions" time="0.845" /><testcase classname="platform-gateway.tests.test_fabric" name="test_trust_score_is_labelled_a_heuristic_and_shows_its_arithmetic" time="0.655" /><testcase classname="platform-gateway.tests.test_fabric" name="test_trust_score_is_zero_while_halted" time="0.665" /><testcase classname="platform-gateway.tests.test_fabric" name="test_trust_score_has_no_score_without_history" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_trust_score_withholds_a_number_without_enough_history" time="0.022" /><testcase classname="platform-gateway.tests.test_fabric" name="test_halted_tenant_scores_zero_even_without_history" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_held_action_creates_a_queue_entry" time="0.020" /><testcase classname="platform-gateway.tests.test_fabric" name="test_retries_reuse_one_queue_entry" time="0.057" /><testcase classname="platform-gateway.tests.test_fabric" name="test_approval_lets_the_action_through" time="0.062" /><testcase classname="platform-gateway.tests.test_fabric" name="test_an_approval_is_single_use" time="0.055" /><testcase classname="platform-gateway.tests.test_fabric" name="test_approval_does_not_authorise_a_different_action" time="0.022" /><testcase classname="platform-gateway.tests.test_fabric" name="test_denied_action_stays_held" time="0.048" /><testcase classname="platform-gateway.tests.test_fabric" name="test_a_principal_cannot_approve_its_own_request" time="0.020" /><testcase classname="platform-gateway.tests.test_fabric" name="test_an_agent_cannot_resolve_approvals" time="0.019" /><testcase classname="platform-gateway.tests.test_fabric" name="test_pending_approvals_expire_on_their_own" time="0.019" /><testcase classname="platform-gateway.tests.test_fabric" name="test_an_expired_approval_does_not_authorise" time="0.043" /><testcase classname="platform-gateway.tests.test_fabric" name="test_approvals_are_tenant_scoped" time="0.020" /><testcase classname="platform-gateway.tests.test_fabric" name="test_a_dry_run_does_not_create_review_work" time="0.014" /><testcase classname="platform-gateway.tests.test_fabric" name="test_resolving_twice_is_refused" time="0.018" /><testcase classname="platform-gateway.tests.test_fabric" name="test_consume_is_atomic_under_concurrency" time="0.034" /><testcase classname="platform-gateway.tests.test_fabric" name="test_approval_endpoints_require_authentication" time="0.032" /><testcase classname="platform-gateway.tests.test_fabric" name="test_simulation_uses_the_same_verdict_function_as_the_live_path" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_simulation_predicts_what_enforcement_would_block" time="0.218" /><testcase classname="platform-gateway.tests.test_fabric" name="test_simulation_has_no_side_effects" time="0.039" /><testcase classname="platform-gateway.tests.test_fabric" name="test_simulation_states_what_it_cannot_do" time="0.011" /><testcase classname="platform-gateway.tests.test_fabric" name="test_simulation_is_tenant_scoped" time="0.031" /><testcase classname="platform-gateway.tests.test_fabric" name="test_per_call_enforcement_override_does_not_touch_globals" time="0.043" /><testcase classname="platform-gateway.tests.test_fabric" name="test_demo_scenarios_are_a_fixed_set" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_demo_ignores_a_caller_supplied_payload" time="0.092" /><testcase classname="platform-gateway.tests.test_fabric" name="test_demo_rejects_an_unknown_scenario" time="0.012" /><testcase classname="platform-gateway.tests.test_fabric" name="test_demo_needs_no_credential_and_returns_the_full_chain" time="0.055" /><testcase classname="platform-gateway.tests.test_fabric" name="test_demo_actually_blocks_the_injection_scenario" time="0.053" /><testcase classname="platform-gateway.tests.test_fabric" name="test_demo_lists_its_scenarios_publicly" time="0.011" /><testcase classname="platform-gateway.tests.test_fabric" name="test_the_sandbox_renders_on_every_surface_that_carries_it" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_the_mcpgate_sandbox_says_where_the_decision_is_made" time="0.002" /><testcase classname="platform-gateway.tests.test_fabric" name="test_the_portal_leads_with_the_sandbox_not_the_key_prompt" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_consensus_not_configured_by_default" time="0.079" /><testcase classname="platform-gateway.tests.test_fabric" name="test_consensus_committed_is_recorded_and_commitment_recomputable" time="0.067" /><testcase classname="platform-gateway.tests.test_fabric" name="test_consensus_unreachable_fails_closed_when_enforcing" time="0.059" /><testcase classname="platform-gateway.tests.test_fabric" name="test_consensus_refusal_in_shadow_mode_is_recorded_not_blocking" time="0.057" /><testcase classname="platform-gateway.tests.test_fabric" name="test_nonpermit_reply_does_not_wait_and_the_same_commitment_is_ordered_after" time="0.076" /><testcase classname="platform-gateway.tests.test_fabric" name="test_deferred_order_is_reported_pending_then_failed_never_anchored" time="0.062" /><testcase classname="platform-gateway.tests.test_fabric" name="test_backpressure_falls_back_to_waiting_for_the_round" time="0.066" /><testcase classname="platform-gateway.tests.test_fabric" name="test_a_permit_is_never_deferred" time="0.004" /><testcase classname="platform-gateway.tests.test_fabric" name="test_consensus_skipped_for_unrecorded_evaluation" time="0.049" /><testcase classname="platform-gateway.tests.test_fabric" name="test_order_sends_only_the_commitment" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_malformed_certificate_from_a_replica_is_refused_not_raised" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_order_answer_other_than_commit_is_not_committed" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_trust_approval_is_satisfied_only_by_a_granted_human_approval" time="0.064" /><testcase classname="platform-gateway.tests.test_fabric" name="test_tenant_starts_in_shadow_and_can_choose_enforce_on_a_paid_tier" time="0.238" /><testcase classname="platform-gateway.tests.test_fabric" name="test_free_tier_enforces_by_default_and_may_opt_down" time="0.129" /><testcase classname="platform-gateway.tests.test_fabric" name="test_enforce_is_the_code_default" time="0.004" /><testcase classname="platform-gateway.tests.test_fabric" name="test_one_tenants_mode_never_affects_another" time="0.141" /><testcase classname="platform-gateway.tests.test_fabric" name="test_invalid_mode_is_rejected" time="0.020" /><testcase classname="platform-gateway.tests.test_fabric" name="test_exported_row_verifies_with_the_published_verifier" time="0.025" /><testcase classname="platform-gateway.tests.test_fabric" name="test_published_verifier_catches_an_edit_with_recomputed_digest" time="0.028" /><testcase classname="platform-gateway.tests.test_fabric" name="test_signed_record_endpoint_is_tenant_scoped" time="0.009" /><testcase classname="platform-gateway.tests.test_fabric" name="test_signed_record_binds_the_exact_arguments" time="0.042" /><testcase classname="platform-gateway.tests.test_fabric" name="test_record_without_a_payload_hash_is_reported_not_matched" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_credentials_are_401_and_billing_problems_402[agent_revoked-401]" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_credentials_are_401_and_billing_problems_402[unknown_api_key-401]" time="0.004" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_credentials_are_401_and_billing_problems_402[key_expired-401]" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_credentials_are_401_and_billing_problems_402[budget_exceeded-402]" time="0.005" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_credentials_are_401_and_billing_problems_402[parent_inactive-402]" time="0.004" /><testcase classname="platform-gateway.tests.test_fabric" name="test_bad_credentials_are_401_and_billing_problems_402[over_quota-402]" time="0.003" /><testcase classname="platform-gateway.tests.test_fabric" name="test_recorded_decisions_reach_the_live_stream" time="0.026" /></testsuite></testsuites>