{
  "format_version": 1,
  "total_collected": 233,
  "modules": {
    "AM-BIND": {
      "path": "tests/test_am_bind.py",
      "count": 44,
      "node_ids": [
        "tests/test_am_bind.py::test_decision_trace_audit_key_sealed_is_bool",
        "tests/test_am_bind.py::test_decision_trace_invalid_window",
        "tests/test_am_bind.py::test_decision_trace_valid",
        "tests/test_am_bind.py::test_hash_value_sha256_valid",
        "tests/test_am_bind.py::test_hash_value_shake256_valid",
        "tests/test_am_bind.py::test_hash_value_unknown_algorithm",
        "tests/test_am_bind.py::test_hash_value_uppercase_rejected",
        "tests/test_am_bind.py::test_hash_value_wrong_length",
        "tests/test_am_bind.py::test_manifest_delegation_depth_at_limit_is_valid",
        "tests/test_am_bind.py::test_manifest_delegation_depth_exceeded",
        "tests/test_am_bind.py::test_manifest_empty_delegation_chain_invalid",
        "tests/test_am_bind.py::test_manifest_expires_too_far",
        "tests/test_am_bind.py::test_manifest_expires_too_soon",
        "tests/test_am_bind.py::test_manifest_id_not_a_string",
        "tests/test_am_bind.py::test_manifest_id_valid",
        "tests/test_am_bind.py::test_manifest_id_wrong_variant",
        "tests/test_am_bind.py::test_manifest_id_wrong_version_nibble",
        "tests/test_am_bind.py::test_manifest_json_schema_export",
        "tests/test_am_bind.py::test_manifest_valid",
        "tests/test_am_bind.py::test_memory_baseline_persistent_requires_ttl",
        "tests/test_am_bind.py::test_memory_baseline_shared_requires_owner",
        "tests/test_am_bind.py::test_memory_baseline_snapshot_required_unless_none",
        "tests/test_am_bind.py::test_memory_baseline_ttl_maximum",
        "tests/test_am_bind.py::test_memory_baseline_ttl_minimum",
        "tests/test_am_bind.py::test_memory_baseline_type_none_requires_null_snapshot",
        "tests/test_am_bind.py::test_memory_baseline_valid_ttl",
        "tests/test_am_bind.py::test_memory_checkpoint_binding_roundtrips_memory_root",
        "tests/test_am_bind.py::test_model_api_no_hash",
        "tests/test_am_bind.py::test_model_api_with_hash_rejected",
        "tests/test_am_bind.py::test_model_attestation_type_must_match_hash_presence",
        "tests/test_am_bind.py::test_model_attestation_type_required",
        "tests/test_am_bind.py::test_model_confidential_inference_requires_hash",
        "tests/test_am_bind.py::test_model_local_requires_hash",
        "tests/test_am_bind.py::test_model_third_party_api_hash_must_be_null",
        "tests/test_am_bind.py::test_policy_bundle_advisory_mode",
        "tests/test_am_bind.py::test_policy_bundle_cedar",
        "tests/test_am_bind.py::test_rag_corpus_with_scan",
        "tests/test_am_bind.py::test_system_prompt_minimal",
        "tests/test_am_bind.py::test_system_prompt_optional_fields",
        "tests/test_am_bind.py::test_system_prompt_version_and_classification_required",
        "tests/test_am_bind.py::test_tool_manifest_allow_dynamic_false_by_default",
        "tests/test_am_bind.py::test_tool_manifest_boolean_not_string",
        "tests/test_am_bind.py::test_tool_manifest_rug_pull_enum",
        "tests/test_am_bind.py::test_tool_manifest_rug_pull_policy_required"
      ]
    },
    "AM-CRYPTO": {
      "path": "tests/test_am_crypto.py",
      "count": 29,
      "node_ids": [
        "tests/test_am_crypto.py::test_canonical_json_appendix_d_vector",
        "tests/test_am_crypto.py::test_canonical_json_bool_lowercase",
        "tests/test_am_crypto.py::test_canonical_json_context_type_included",
        "tests/test_am_crypto.py::test_canonical_json_key_order",
        "tests/test_am_crypto.py::test_canonical_json_no_whitespace",
        "tests/test_am_crypto.py::test_canonical_json_null_excluded",
        "tests/test_am_crypto.py::test_catalog_description_bound",
        "tests/test_am_crypto.py::test_catalog_root_vector",
        "tests/test_am_crypto.py::test_corpus_root_vector",
        "tests/test_am_crypto.py::test_ed25519_algorithm_label",
        "tests/test_am_crypto.py::test_ed25519_pre_image_deterministic",
        "tests/test_am_crypto.py::test_ed25519_pre_image_excludes_attestation",
        "tests/test_am_crypto.py::test_ed25519_pre_image_excludes_signature",
        "tests/test_am_crypto.py::test_ed25519_sign_verify",
        "tests/test_am_crypto.py::test_ed25519_signed_fields_complete",
        "tests/test_am_crypto.py::test_ed25519_small_order_key_rejected",
        "tests/test_am_crypto.py::test_ed25519_tampered_manifest_fails",
        "tests/test_am_crypto.py::test_ed25519_truncated_sig_fails",
        "tests/test_am_crypto.py::test_ed25519_wrong_key_fails",
        "tests/test_am_crypto.py::test_hybrid_both_verify",
        "tests/test_am_crypto.py::test_hybrid_classical_tampered_fails",
        "tests/test_am_crypto.py::test_hybrid_envelope_fields",
        "tests/test_am_crypto.py::test_hybrid_pq_tampered_fails",
        "tests/test_am_crypto.py::test_inclusion_proof_roundtrip",
        "tests/test_am_crypto.py::test_merkle_domain_separation",
        "tests/test_am_crypto.py::test_merkle_empty_root",
        "tests/test_am_crypto.py::test_merkle_single_leaf",
        "tests/test_am_crypto.py::test_sha256_hash_format",
        "tests/test_am_crypto.py::test_shake256_hash_format"
      ]
    },
    "AM-ATTEST": {
      "path": "tests/test_am_attest.py",
      "count": 41,
      "node_ids": [
        "tests/test_am_attest.py::test_all_hw_providers_expose_attest_runtime_state",
        "tests/test_am_attest.py::test_attest_pre_image_differs_from_signing_pre_image",
        "tests/test_am_attest.py::test_attest_pre_image_excludes_attestation_block",
        "tests/test_am_attest.py::test_attest_pre_image_includes_signature",
        "tests/test_am_attest.py::test_attest_pre_image_is_rfc8785",
        "tests/test_am_attest.py::test_attestation_block_change_no_hash_change",
        "tests/test_am_attest.py::test_attestation_unavailable_error_is_runtime",
        "tests/test_am_attest.py::test_container_image_digest_in_supply_chain",
        "tests/test_am_attest.py::test_custom_pcr",
        "tests/test_am_attest.py::test_default_pcr_not_nitro",
        "tests/test_am_attest.py::test_enforcement_mode_in_manifest_pre_image",
        "tests/test_am_attest.py::test_manifest_change_changes_attest_hash",
        "tests/test_am_attest.py::test_manifest_hash_format",
        "tests/test_am_attest.py::test_manifest_hash_is_sha256_of_pre_image",
        "tests/test_am_attest.py::test_nitro_pcr_label",
        "tests/test_am_attest.py::test_policy_bundle_hash_in_manifest_matches_report_field",
        "tests/test_am_attest.py::test_provider_has_required_methods",
        "tests/test_am_attest.py::test_raw_ed25519_to_pem_format",
        "tests/test_am_attest.py::test_raw_ed25519_to_pem_length",
        "tests/test_am_attest.py::test_report_cert_chain_optional",
        "tests/test_am_attest.py::test_report_has_manifest_hash",
        "tests/test_am_attest.py::test_report_has_platform",
        "tests/test_am_attest.py::test_report_pcr_values_optional",
        "tests/test_am_attest.py::test_report_with_pcr_values",
        "tests/test_am_attest.py::test_runtime_report_required_fields",
        "tests/test_am_attest.py::test_runtime_state_different_contexts_differ",
        "tests/test_am_attest.py::test_runtime_state_different_nonces_differ",
        "tests/test_am_attest.py::test_runtime_state_is_deterministic",
        "tests/test_am_attest.py::test_runtime_state_report_data_hash_derivation",
        "tests/test_am_attest.py::test_select_provider_level0_returns_software",
        "tests/test_am_attest.py::test_software_provider_attest_runtime_state_returns_report",
        "tests/test_am_attest.py::test_software_provider_hash_in_report",
        "tests/test_am_attest.py::test_software_provider_mismatch",
        "tests/test_am_attest.py::test_software_provider_non_ascii_hash_fails_closed",
        "tests/test_am_attest.py::test_software_provider_non_string_hash_fails_closed",
        "tests/test_am_attest.py::test_software_provider_raw_labels_not_hw_attested",
        "tests/test_am_attest.py::test_software_provider_returns_report",
        "tests/test_am_attest.py::test_software_provider_verify_uses_constant_time_compare",
        "tests/test_am_attest.py::test_tpm_provider_no_ak_raises",
        "tests/test_am_attest.py::test_transparency_entry_fields",
        "tests/test_am_attest.py::test_transparency_entry_with_checkpoint"
      ]
    },
    "AM-VERIFY": {
      "path": "tests/test_am_verify.py",
      "count": 88,
      "node_ids": [
        "tests/test_am_verify.py::test_alternate_timestamp_forms_still_verify_when_in_window",
        "tests/test_am_verify.py::test_delegation_chain_absent",
        "tests/test_am_verify.py::test_delegation_chain_present_without_keys_is_unverifiable",
        "tests/test_am_verify.py::test_different_manifest_not_revoked",
        "tests/test_am_verify.py::test_error_response_has_error_code",
        "tests/test_am_verify.py::test_error_response_has_request_id",
        "tests/test_am_verify.py::test_error_response_retry_after_optional",
        "tests/test_am_verify.py::test_error_response_retry_after_set",
        "tests/test_am_verify.py::test_expired_manifest_is_not_valid_under_alternate_timestamp_forms[lowercase-z]",
        "tests/test_am_verify.py::test_expired_manifest_is_not_valid_under_alternate_timestamp_forms[numeric-epoch]",
        "tests/test_am_verify.py::test_expired_result",
        "tests/test_am_verify.py::test_expired_returns_early_no_field_checks",
        "tests/test_am_verify.py::test_fold_reproduces_v01_snapshot_hash",
        "tests/test_am_verify.py::test_future_issued_manifest_is_not_valid",
        "tests/test_am_verify.py::test_hitl_approved",
        "tests/test_am_verify.py::test_hitl_expired",
        "tests/test_am_verify.py::test_hitl_missing",
        "tests/test_am_verify.py::test_hitl_not_required",
        "tests/test_am_verify.py::test_http_get_verify_without_keys_is_unverifiable",
        "tests/test_am_verify.py::test_http_post_verify_enforces_trusted_key_issuers",
        "tests/test_am_verify.py::test_http_post_verify_not_found",
        "tests/test_am_verify.py::test_http_post_verify_unsigned_manifest_is_signature_missing",
        "tests/test_am_verify.py::test_http_post_verify_with_trusted_keys_is_incomplete_without_runtime_evidence",
        "tests/test_am_verify.py::test_http_post_verify_without_issuer_policy_is_unverifiable",
        "tests/test_am_verify.py::test_http_result_schema_has_all_fields",
        "tests/test_am_verify.py::test_http_revocation_status_not_revoked",
        "tests/test_am_verify.py::test_http_revocation_status_revoked",
        "tests/test_am_verify.py::test_http_verify_invalid_manifest_id",
        "tests/test_am_verify.py::test_http_verify_missing_manifest_id",
        "tests/test_am_verify.py::test_http_verify_not_found",
        "tests/test_am_verify.py::test_memory_baseline_expired",
        "tests/test_am_verify.py::test_mismatch_decision_trace",
        "tests/test_am_verify.py::test_mismatch_detail_contains_both_hashes",
        "tests/test_am_verify.py::test_mismatch_detail_has_timestamp",
        "tests/test_am_verify.py::test_mismatch_memory_snapshot",
        "tests/test_am_verify.py::test_mismatch_multiple_fields",
        "tests/test_am_verify.py::test_mismatch_policy_bundle",
        "tests/test_am_verify.py::test_mismatch_rag_corpus",
        "tests/test_am_verify.py::test_mismatch_supply_chain",
        "tests/test_am_verify.py::test_mismatch_system_prompt",
        "tests/test_am_verify.py::test_mismatch_tool_catalog",
        "tests/test_am_verify.py::test_result_fields_includes_decision_trace",
        "tests/test_am_verify.py::test_result_has_fields_verified",
        "tests/test_am_verify.py::test_result_has_manifest_id",
        "tests/test_am_verify.py::test_result_has_verification_id",
        "tests/test_am_verify.py::test_result_has_verified_at",
        "tests/test_am_verify.py::test_result_mismatch_details_empty_on_valid",
        "tests/test_am_verify.py::test_revoked_before_expiry_check",
        "tests/test_am_verify.py::test_revoked_result",
        "tests/test_am_verify.py::test_tool_catalog_correct_root_still_checks_context",
        "tests/test_am_verify.py::test_tool_catalog_detects_changed_leaf_before_signing[description_hash-None-sha256]",
        "tests/test_am_verify.py::test_tool_catalog_detects_changed_leaf_before_signing[schema_hash-None-sha256]",
        "tests/test_am_verify.py::test_tool_catalog_detects_changed_leaf_before_signing[tool_id-com.example.changed-sha256]",
        "tests/test_am_verify.py::test_tool_catalog_legacy_hash_without_tools_remains_compatible",
        "tests/test_am_verify.py::test_tool_catalog_legacy_missing_nonhashed_metadata[endpoint_id]",
        "tests/test_am_verify.py::test_tool_catalog_legacy_missing_nonhashed_metadata[tool_name]",
        "tests/test_am_verify.py::test_tool_catalog_legacy_missing_nonhashed_metadata[version]",
        "tests/test_am_verify.py::test_tool_catalog_mismatched_hash_algorithm_is_detected_end_to_end[description_hash]",
        "tests/test_am_verify.py::test_tool_catalog_mismatched_hash_algorithm_is_detected_end_to_end[schema_hash]",
        "tests/test_am_verify.py::test_tool_catalog_missing_committed_input_fails_closed[description_hash]",
        "tests/test_am_verify.py::test_tool_catalog_missing_committed_input_fails_closed[schema_hash]",
        "tests/test_am_verify.py::test_tool_catalog_missing_committed_input_fails_closed[tool_id]",
        "tests/test_am_verify.py::test_tool_catalog_raw_python_ids_fail_closed[single-tool-com.example.read]",
        "tests/test_am_verify.py::test_tool_catalog_raw_python_ids_fail_closed[single-tool-tool_id1]",
        "tests/test_am_verify.py::test_tool_catalog_raw_python_ids_fail_closed[two-tools-com.example.read]",
        "tests/test_am_verify.py::test_tool_catalog_raw_python_ids_fail_closed[two-tools-tool_id1]",
        "tests/test_am_verify.py::test_tool_catalog_rejects_root_unrelated_to_tools[empty-sha256-0.1]",
        "tests/test_am_verify.py::test_tool_catalog_rejects_root_unrelated_to_tools[empty-sha256-0.2]",
        "tests/test_am_verify.py::test_tool_catalog_rejects_root_unrelated_to_tools[two-tools-sha256-0.1]",
        "tests/test_am_verify.py::test_tool_catalog_rejects_root_unrelated_to_tools[two-tools-sha256-0.2]",
        "tests/test_am_verify.py::test_tool_catalog_reordered_tools_match",
        "tests/test_am_verify.py::test_tool_catalog_reports_internal_and_runtime_mismatches",
        "tests/test_am_verify.py::test_tool_catalog_valid_root_and_context_match[empty-sha256-0.1]",
        "tests/test_am_verify.py::test_tool_catalog_valid_root_and_context_match[empty-sha256-0.2]",
        "tests/test_am_verify.py::test_tool_catalog_valid_root_and_context_match[two-tools-sha256-0.1]",
        "tests/test_am_verify.py::test_tool_catalog_valid_root_and_context_match[two-tools-sha256-0.2]",
        "tests/test_am_verify.py::test_tool_catalog_without_declared_root_is_not_bound",
        "tests/test_am_verify.py::test_tool_catalog_without_runtime_hash[False-False]",
        "tests/test_am_verify.py::test_tool_catalog_without_runtime_hash[False-True]",
        "tests/test_am_verify.py::test_tool_catalog_without_runtime_hash[True-False]",
        "tests/test_am_verify.py::test_tool_catalog_without_runtime_hash[True-True]",
        "tests/test_am_verify.py::test_unparseable_timestamps_fail_closed",
        "tests/test_am_verify.py::test_valid_all_fields_verified_count",
        "tests/test_am_verify.py::test_valid_all_match",
        "tests/test_am_verify.py::test_valid_decision_trace_match",
        "tests/test_am_verify.py::test_valid_unbound_fields_not_counted_as_mismatch",
        "tests/test_am_verify.py::test_verification_accepts_bound_delta",
        "tests/test_am_verify.py::test_verification_still_flags_unproven_memory_change"
      ]
    },
    "AM-COMPAT": {
      "path": "tests/test_am_compat.py",
      "count": 31,
      "node_ids": [
        "tests/test_am_compat.py::test_agt_audit_chain_root_in_decision_trace",
        "tests/test_am_compat.py::test_allow_dynamic_registration_false_by_default",
        "tests/test_am_compat.py::test_attest_and_sign_cover_same_policy_hash",
        "tests/test_am_compat.py::test_attest_pre_image_includes_enforcement_mode",
        "tests/test_am_compat.py::test_attest_pre_image_includes_policy_bundle",
        "tests/test_am_compat.py::test_catalog_tree_root_is_hash_value",
        "tests/test_am_compat.py::test_corpus_tree_root_is_hash_value",
        "tests/test_am_compat.py::test_enforcement_mode_in_pre_image",
        "tests/test_am_compat.py::test_full_manifest_model_roundtrip",
        "tests/test_am_compat.py::test_json_schema_has_properties",
        "tests/test_am_compat.py::test_json_schema_is_dict",
        "tests/test_am_compat.py::test_json_schema_manifest_id_present",
        "tests/test_am_compat.py::test_json_schema_serializable",
        "tests/test_am_compat.py::test_manifest_hash_deterministic_across_providers",
        "tests/test_am_compat.py::test_manifest_json_schema_has_required",
        "tests/test_am_compat.py::test_mcp_initialize_extension_fields",
        "tests/test_am_compat.py::test_mcp_rug_pull_detected_by_catalog_hash",
        "tests/test_am_compat.py::test_mcp_servers_in_supply_chain",
        "tests/test_am_compat.py::test_mcp_tool_call_evidence_has_manifest_id",
        "tests/test_am_compat.py::test_mcp_tool_evidence_verification_result_enum",
        "tests/test_am_compat.py::test_policy_bundle_enforcement_mode_advisory_allowed",
        "tests/test_am_compat.py::test_policy_bundle_hash_in_signed_fields",
        "tests/test_am_compat.py::test_policy_bundle_hash_in_signing_pre_image",
        "tests/test_am_compat.py::test_policy_hash_change_invalidates_signature",
        "tests/test_am_compat.py::test_sbom_cyclonedx",
        "tests/test_am_compat.py::test_sign_then_verify_valid",
        "tests/test_am_compat.py::test_slsa_declared_level_four",
        "tests/test_am_compat.py::test_slsa_provenance_in_supply_chain",
        "tests/test_am_compat.py::test_slsa_provenance_optional",
        "tests/test_am_compat.py::test_supply_chain_digest_in_attest_pre_image",
        "tests/test_am_compat.py::test_verification_engine_valid_after_sign"
      ]
    }
  }
}
