Command: python3 -m unittest discover -s tests -v Environment: GNU/Linux x86_64, Python 3.12.12, isolated namespaces, ephemeral keys Exit code: 0 test_compare_exit_code_and_report (test_cli.CliTests.test_compare_exit_code_and_report) ... ok test_help_and_doctor_do_not_require_gui_or_gpg (test_cli.CliTests.test_help_and_doctor_do_not_require_gui_or_gpg) ... ok test_json_report_is_saved_and_existing_files_are_preserved (test_cli.CliTests.test_json_report_is_saved_and_existing_files_are_preserved) ... ok test_missing_owner_and_invalid_root_return_two_without_traceback (test_cli.CliTests.test_missing_owner_and_invalid_root_return_two_without_traceback) ... ok test_preview_apply_verify_tamper_and_unmark_cli (test_cli.CliTests.test_preview_apply_verify_tamper_and_unmark_cli) ... ok test_signature_flags_must_be_used_together (test_cli.CliTests.test_signature_flags_must_be_used_together) ... ok test_active_lock_prevents_changes (test_core.CoreTests.test_active_lock_prevents_changes) ... ok test_changed_missing_and_untracked_files_are_reported (test_core.CoreTests.test_changed_missing_and_untracked_files_are_reported) ... ok test_compare_detects_copy_without_marker_and_with_renamed_variables (test_core.CoreTests.test_compare_detects_copy_without_marker_and_with_renamed_variables) ... ok test_compare_exact_small_file_and_visible_mark (test_core.CoreTests.test_compare_exact_small_file_and_visible_mark) ... ok test_compare_rejects_invalid_threshold (test_core.CoreTests.test_compare_rejects_invalid_threshold) ... ok test_file_count_limit_fails_before_writes (test_core.CoreTests.test_file_count_limit_fails_before_writes) ... ok test_licenses_dependencies_and_generated_files_are_not_marked (test_core.CoreTests.test_licenses_dependencies_and_generated_files_are_not_marked) ... ok test_malformed_config_fails_cleanly (test_core.CoreTests.test_malformed_config_fails_cleanly) ... ok test_malformed_manifest_fails_cleanly (test_core.CoreTests.test_malformed_manifest_fails_cleanly) ... ok test_mark_is_idempotent_including_manifest (test_core.CoreTests.test_mark_is_idempotent_including_manifest) ... ok test_mark_verify_unmark_is_byte_exact_across_languages (test_core.CoreTests.test_mark_verify_unmark_is_byte_exact_across_languages) ... ok test_overlarge_source_does_not_silently_disappear (test_core.CoreTests.test_overlarge_source_does_not_silently_disappear) ... ok test_owner_cannot_escape_block_or_html_comment (test_core.CoreTests.test_owner_cannot_escape_block_or_html_comment) ... ok test_permissions_survive (test_core.CoreTests.test_permissions_survive) ... ok test_plain_manifest_does_not_claim_authenticated_authorship (test_core.CoreTests.test_plain_manifest_does_not_claim_authenticated_authorship) ... ok test_preview_writes_nothing (test_core.CoreTests.test_preview_writes_nothing) ... ok test_python_shebang_encoding_docstring_and_future_import_survive (test_core.CoreTests.test_python_shebang_encoding_docstring_and_future_import_survive) ... ok test_short_unrelated_files_are_not_similar_just_due_to_identifiers (test_core.CoreTests.test_short_unrelated_files_are_not_similar_just_due_to_identifiers) ... ok test_symlink_is_rejected_without_reading_target (test_core.CoreTests.test_symlink_is_rejected_without_reading_target) ... ok test_symlink_metadata_directory_is_rejected (test_core.CoreTests.test_symlink_metadata_directory_is_rejected) ... ok test_transaction_rolls_back_after_write_failure (test_core.CoreTests.test_transaction_rolls_back_after_write_failure) ... ok test_unmark_preserves_edits_and_lookalike_comment (test_core.CoreTests.test_unmark_preserves_edits_and_lookalike_comment) ... ok test_unmark_preview_does_not_write (test_core.CoreTests.test_unmark_preview_does_not_write) ... ok test_unsupported_encoding_is_reported (test_core.CoreTests.test_unsupported_encoding_is_reported) ... ok test_reproducible_portable_package_runs_outside_repository (test_package.PortablePackageTests.test_reproducible_portable_package_runs_outside_repository) ... ok test_source_staging_excludes_local_execution_instructions (test_package.PortablePackageTests.test_source_staging_excludes_local_execution_instructions) ... ok test_symlink_is_rejected_before_a_portable_artifact_is_written (test_package.PortablePackageTests.test_symlink_is_rejected_before_a_portable_artifact_is_written) ... ok test_comparison_refuses_excessive_match_results (test_production.ProductionTests.test_comparison_refuses_excessive_match_results) ... ok test_entry_budget_is_enforced_for_unsupported_files (test_production.ProductionTests.test_entry_budget_is_enforced_for_unsupported_files) ... ok test_existing_report_prevents_all_project_mutations (test_production.ProductionTests.test_existing_report_prevents_all_project_mutations) ... ok test_failed_operation_cleans_reserved_report (test_production.ProductionTests.test_failed_operation_cleans_reserved_report) ... ok test_late_report_write_and_flush_failures_do_not_mark_sources (test_production.ProductionTests.test_late_report_write_and_flush_failures_do_not_mark_sources) ... ok test_late_report_write_and_flush_failures_do_not_unmark_sources (test_production.ProductionTests.test_late_report_write_and_flush_failures_do_not_unmark_sources) ... ok test_project_write_failure_removes_finished_report_and_reverts_sources (test_production.ProductionTests.test_project_write_failure_removes_finished_report_and_reverts_sources) ... ok test_report_inside_project_is_rejected_before_writes (test_production.ProductionTests.test_report_inside_project_is_rejected_before_writes) ... ok test_report_symlink_loop_fails_cleanly_before_mutation (test_production.ProductionTests.test_report_symlink_loop_fails_cleanly_before_mutation) ... ok test_successful_operation_saves_a_complete_external_report (test_production.ProductionTests.test_successful_operation_saves_a_complete_external_report) ... ok test_unwritable_report_prevents_all_project_mutations (test_production.ProductionTests.test_unwritable_report_prevents_all_project_mutations) ... ok test_aggregate_source_limit_accounts_for_watermark_overhead (test_regressions.ReviewRegressions.test_aggregate_source_limit_accounts_for_watermark_overhead) ... ok test_complete_own_marker_inside_multiline_string_is_preserved (test_regressions.ReviewRegressions.test_complete_own_marker_inside_multiline_string_is_preserved) ... ok test_emacs_ruby_and_css_prologues_remain_first (test_regressions.ReviewRegressions.test_emacs_ruby_and_css_prologues_remain_first) ... ok test_encoding_lookalike_inside_css_comment_keeps_comment_balanced (test_regressions.ReviewRegressions.test_encoding_lookalike_inside_css_comment_keeps_comment_balanced) ... ok test_encoding_lookalike_inside_docstring_keeps_runtime_value (test_regressions.ReviewRegressions.test_encoding_lookalike_inside_docstring_keeps_runtime_value) ... ok test_full_5000_record_manifest_can_be_loaded (test_regressions.ReviewRegressions.test_full_5000_record_manifest_can_be_loaded) ... ok test_generated_manifest_limit_is_checked_before_source_writes (test_regressions.ReviewRegressions.test_generated_manifest_limit_is_checked_before_source_writes) ... ok test_gui_owner_selection_rejects_symlink_metadata_parent (test_regressions.ReviewRegressions.test_gui_owner_selection_rejects_symlink_metadata_parent) ... ok test_gui_worker_finishes_transaction_before_process_exit (test_regressions.ReviewRegressions.test_gui_worker_finishes_transaction_before_process_exit) ... ok test_lock_precedes_configuration_snapshot (test_regressions.ReviewRegressions.test_lock_precedes_configuration_snapshot) ... ok test_maximum_size_source_remains_readable_after_marking (test_regressions.ReviewRegressions.test_maximum_size_source_remains_readable_after_marking) ... ok test_same_line_xml_header_round_trip_and_idempotence (test_regressions.ReviewRegressions.test_same_line_xml_header_round_trip_and_idempotence) ... ok test_unterminated_encoding_only_header_is_skipped_without_mutation (test_regressions.ReviewRegressions.test_unterminated_encoding_only_header_is_skipped_without_mutation) ... ok test_actual_selftest_checks_core_and_available_signer (test_selftest.SelfTestTests.test_actual_selftest_checks_core_and_available_signer) ... ok test_cli_selftest_runs_with_an_unrelated_working_directory (test_selftest.SelfTestTests.test_cli_selftest_runs_with_an_unrelated_working_directory) ... ok test_optional_tool_absence_is_explicit_without_hiding_core_results (test_selftest.SelfTestTests.test_optional_tool_absence_is_explicit_without_hiding_core_results) ... ok test_temporary_sources_and_ephemeral_keys_are_cleaned (test_selftest.SelfTestTests.test_temporary_sources_and_ephemeral_keys_are_cleaned) ... ok test_unavailable_python_execution_is_reported_as_failure (test_selftest.SelfTestTests.test_unavailable_python_execution_is_reported_as_failure) ... ok test_authenticated_cli_rejects_tampered_source (test_signing.SigningTests.test_authenticated_cli_rejects_tampered_source) ... ok test_invalid_signature_and_invalid_key_are_rejected (test_signing.SigningTests.test_invalid_signature_and_invalid_key_are_rejected) ... ok test_real_signature_verifies_with_pinned_public_key (test_signing.SigningTests.test_real_signature_verifies_with_pinned_public_key) ... ok test_stale_source_tree_cannot_be_signed (test_signing.SigningTests.test_stale_source_tree_cannot_be_signed) ... ok test_tampered_manifest_is_rejected (test_signing.SigningTests.test_tampered_manifest_is_rejected) ... ok test_wrong_pinned_fingerprint_is_rejected (test_signing.SigningTests.test_wrong_pinned_fingerprint_is_rejected) ... ok test_cli_refuses_incomplete_or_mixed_verification_modes (test_ssh_signing.SSHSigningTests.test_cli_refuses_incomplete_or_mixed_verification_modes) ... ok test_cli_sign_verify_and_tamper_exit_codes (test_ssh_signing.SSHSigningTests.test_cli_sign_verify_and_tamper_exit_codes) ... ok test_inconsistent_private_and_public_pair_is_rejected (test_ssh_signing.SSHSigningTests.test_inconsistent_private_and_public_pair_is_rejected) ... ok test_modified_manifest_is_rejected (test_ssh_signing.SSHSigningTests.test_modified_manifest_is_rejected) ... ok test_modified_signature_is_rejected (test_ssh_signing.SSHSigningTests.test_modified_signature_is_rejected) ... ok test_multiple_public_keys_are_rejected (test_ssh_signing.SSHSigningTests.test_multiple_public_keys_are_rejected) ... ok test_private_key_inside_source_tree_is_rejected (test_ssh_signing.SSHSigningTests.test_private_key_inside_source_tree_is_rejected) ... ok test_real_signature_authenticates_a_pinned_key (test_ssh_signing.SSHSigningTests.test_real_signature_authenticates_a_pinned_key) ... ok test_report_failure_does_not_publish_signature (test_ssh_signing.SSHSigningTests.test_report_failure_does_not_publish_signature) ... ok test_signature_from_another_namespace_is_rejected (test_ssh_signing.SSHSigningTests.test_signature_from_another_namespace_is_rejected) ... ok test_stale_tree_cannot_be_signed_as_a_fresh_release (test_ssh_signing.SSHSigningTests.test_stale_tree_cannot_be_signed_as_a_fresh_release) ... ok test_wrong_pinned_fingerprint_is_rejected (test_ssh_signing.SSHSigningTests.test_wrong_pinned_fingerprint_is_rejected) ... ok test_wrong_public_key_is_rejected_even_with_its_correct_fingerprint (test_ssh_signing.SSHSigningTests.test_wrong_public_key_is_rejected_even_with_its_correct_fingerprint) ... ok ---------------------------------------------------------------------- Ran 81 tests in 4.638s OK