[INFO] cloning repository https://github.com/Metbcy/bomdrift
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Metbcy/bomdrift" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMetbcy%2Fbomdrift", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMetbcy%2Fbomdrift'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 12074e7b20c073960be7cc58b8ba63f6e9077b02
[INFO] testing Metbcy/bomdrift against 1.99.0-beta.8+cargoflags=--release for beta-release-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FMetbcy%2Fbomdrift" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Metbcy/bomdrift
[INFO] finished tweaking git repo https://github.com/Metbcy/bomdrift
[INFO] tweaked toml for git repo https://github.com/Metbcy/bomdrift written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Metbcy/bomdrift on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Metbcy/bomdrift already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da
[INFO] running `Command { std: "docker" "start" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling typenum v1.20.0
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling cc v1.2.61
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling hashbrown v0.17.0
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling is_ci v1.2.0
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling rustls v0.23.39
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling anyhow v1.0.103
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling num-conv v0.2.1
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling supports-color v3.0.2
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling bomdrift v0.9.9 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling spdx v0.10.9
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling supports-color v2.1.0
[INFO] [stderr]    Compiling directories v6.0.0
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling zerofrom v0.1.7
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling ureq v2.12.1
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 2m 06s
[INFO] running `Command { std: "docker" "inspect" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling zerocopy-derive v0.8.48
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling rand v0.9.4
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling ureq v2.12.1
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling bomdrift v0.9.9 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 3m 04s
[INFO] running `Command { std: "docker" "inspect" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.28s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/bomdrift-d2ae6338c3ec94bf)
[INFO] [stdout] 
[INFO] [stdout] running 441 tests
[INFO] [stdout] test attestation::tests::malformed_base64_payload_errors ... ok
[INFO] [stdout] test attestation::tests::missing_payload_field_errors_clearly ... ok
[INFO] [stdout] test attestation::tests::missing_predicate_in_statement_errors ... ok
[INFO] [stdout] test baseline::tests::add_suppression_full_writes_object_form_with_expires_only ... ok
[INFO] [stdout] test baseline::tests::add_suppression_full_writes_object_form_when_metadata_present ... ok
[INFO] [stdout] test baseline::tests::add_suppression_full_writes_object_form_with_reason_only ... ok
[INFO] [stdout] test attestation::tests::empty_stdout_errors_clearly ... ok
[INFO] [stdout] test baseline::tests::add_suppression_is_idempotent ... ok
[INFO] [stdout] test attestation::tests::handles_per_line_envelope_emission ... ok
[INFO] [stdout] test baseline::tests::active_object_entry_suppresses ... ok
[INFO] [stdout] test baseline::tests::maintainer_age_key_requires_both_purl_and_contributor_nonempty ... ok
[INFO] [stdout] test baseline::tests::add_suppression_preserves_existing_diff_output_baseline ... ok
[INFO] [stdout] test baseline::tests::empty_baseline_is_a_noop ... ok
[INFO] [stdout] test baseline::tests::doc_kind_maps_each_json_variant_to_its_label ... ok
[INFO] [stdout] test baseline::tests::add_suppression_appends_to_existing_baseline ... ok
[INFO] [stdout] test baseline::tests::malformed_expires_errors_strict ... ok
[INFO] [stdout] test baseline::tests::apply_drops_matched_maintainer_age_and_keeps_unmatched ... ok
[INFO] [stdout] test baseline::tests::add_suppression_full_rejects_malformed_expires ... ok
[INFO] [stdout] test attestation::tests::extracts_predicate_from_well_formed_envelope ... ok
[INFO] [stdout] test baseline::tests::malformed_baseline_yields_empty_keys_not_error ... ok
[INFO] [stdout] test baseline::tests::add_suppression_full_idempotent_against_existing_object_entry ... ok
[INFO] [stdout] test baseline::tests::add_suppression_full_error_names_actual_root_type ... ok
[INFO] [stdout] test baseline::tests::add_suppression_rejects_empty_id ... ok
[INFO] [stdout] test baseline::tests::add_suppression_creates_new_baseline ... ok
[INFO] [stdout] test baseline::tests::expired_entry_warning_text_is_stable ... ok
[INFO] [stdout] test baseline::tests::expired_object_entry_warns_and_does_not_suppress ... ok
[INFO] [stdout] test attestation::tests::fetch_verified_sbom_invokes_cosign_on_path ... ok
[INFO] [stdout] test baseline::tests::parse_comment_directive_extracts_id_only ... ok
[INFO] [stdout] test baseline::tests::parse_comment_directive_rejects_malformed_id ... ok
[INFO] [stdout] test baseline::tests::parse_comment_directive_returns_none_when_no_directive ... ok
[INFO] [stdout] test baseline::tests::no_expires_object_entry_suppresses_indefinitely ... ok
[INFO] [stdout] test baseline::tests::purl_drops_when_last_advisory_is_suppressed ... ok
[INFO] [stdout] test baseline::tests::typosquat_suppression_matches_on_purl_and_closest ... ok
[INFO] [stdout] test baseline::tests::wildcard_advisory_id_suppresses_across_purls ... ok
[INFO] [stdout] test baseline::tests::typosquat_key_requires_both_purl_and_closest_nonempty ... ok
[INFO] [stdout] test baseline::tests::version_jump_suppression_matches_on_purl_and_majors ... ok
[INFO] [stdout] test clock::tests::parse_ymd_accepts_valid ... ok
[INFO] [stdout] test clock::tests::parse_ymd_rejects_non_zero_padded ... ok
[INFO] [stdout] test config::tests::config_baseline_path_is_dropped_when_file_missing ... ok
[INFO] [stdout] test config::tests::config_baseline_path_is_kept_when_file_exists ... ok
[INFO] [stdout] test config::tests::parses_diff_config ... ok
[INFO] [stdout] test diff::key::tests::key_falls_back_to_name_tuple ... ok
[INFO] [stdout] test diff::key::tests::key_uses_purl_when_present ... ok
[INFO] [stdout] test clock::tests::parse_ymd_rejects_malformed ... ok
[INFO] [stdout] test config::tests::merge_keeps_explicit_cli_values ... ok
[INFO] [stdout] test diff::key::tests::passes_through_when_no_version ... ok
[INFO] [stdout] test diff::key::tests::strips_simple_version ... ok
[INFO] [stdout] test diff::tests::cardinality_symmetry ... ok
[INFO] [stdout] test diff::tests::detects_added_and_removed ... ok
[INFO] [stdout] test diff::tests::detects_version_change ... ok
[INFO] [stdout] test baseline::tests::parse_comment_directive_extracts_id_and_reason ... ok
[INFO] [stdout] test baseline::tests::suppressed_ids_alias_is_also_accepted ... ok
[INFO] [stdout] test baseline::tests::vuln_with_matching_key_is_suppressed ... ok
[INFO] [stdout] test clock::tests::format_rfc3339_round_trip ... ok
[INFO] [stdout] test diff::key::tests::handles_npm_scoped_with_at_in_namespace ... ok
[INFO] [stdout] test diff::key::tests::strips_version_with_qualifiers ... ok
[INFO] [stdout] test diff::tests::license_change_with_version_bump_only_flags_version ... ok
[INFO] [stdout] test diff::tests::multi_version_intersecting_license_changes_route_to_license_changed ... ok
[INFO] [stdout] test diff::tests::diff_with_self_is_empty ... ok
[INFO] [stdout] test diff::key::tests::strips_subpath ... ok
[INFO] [stdout] test diff::tests::multi_version_same_component_does_not_collapse ... ok
[INFO] [stdout] test diff::tests::no_purl_components_match_by_name_and_ecosystem ... ok
[INFO] [stdout] test diff::tests::no_purl_same_name_different_ecosystem_does_not_collide ... ok
[INFO] [stdout] test diff::tests::single_to_multi_version_does_not_synthesize_version_changed ... ok
[INFO] [stdout] test enrich::cache::tests::effective_ttl_secs_converts_hours_to_seconds ... ok
[INFO] [stdout] test enrich::cache::tests::entry_within_ttl_is_returned ... ok
[INFO] [stdout] test enrich::cache::tests::effective_ttl_secs_falls_back_to_default_when_none ... ok
[INFO] [stdout] test diff::tests::license_change_without_version_bump_is_suspicious ... ok
[INFO] [stdout] test enrich::cache::tests::open_unless_disabled_respects_flag ... ok
[INFO] [stdout] test enrich::cache::tests::expired_entry_returns_none ... ok
[INFO] [stdout] test enrich::cache::tests::corrupt_cache_file_is_treated_as_miss ... ok
[INFO] [stdout] test enrich::cache::tests::get_returns_none_for_missing_advisory ... ok
[INFO] [stdout] test enrich::cache::tests::put_full_roundtrips_aliases ... ok
[INFO] [stdout] test enrich::cache::tests::cache_with_overridden_ttl_expires_independently_of_const ... ok
[INFO] [stdout] test enrich::cache::tests::put_then_get_roundtrips_severity ... ok
[INFO] [stdout] test attestation::tests::fetch_verified_sbom_reports_missing_cosign ... ok
[INFO] [stdout] test enrich::cache::tests::sanitize_replaces_path_separators_with_underscore ... ok
[INFO] [stdout] test enrich::epss::tests::apply_scores_takes_max_across_aliases ... ok
[INFO] [stdout] test enrich::epss::tests::collect_cves_dedups_across_components ... ok
[INFO] [stdout] test enrich::cache::tests::put_uses_temp_file_then_rename_no_torn_writes ... ok
[INFO] [stdout] test clock::tests::is_expired_ordering ... ok
[INFO] [stdout] test clock::tests::malformed_source_date_epoch_falls_back ... ok
[INFO] [stdout] test clock::tests::now_honors_source_date_epoch ... ok
[INFO] [stdout] test clock::tests::now_is_read_per_call_not_cached ... ok
[INFO] [stdout] test enrich::kev::tests::enrich_with_url_swallows_network_failure ... ok
[INFO] [stdout] test enrich::epss::tests::parse_epss_response_extracts_cve_to_score_map ... ok
[INFO] [stdout] test enrich::kev::tests::apply_kev_flips_flag_on_alias_match ... ok
[INFO] [stdout] test enrich::kev::tests::apply_kev_leaves_unmatched_refs_alone ... ok
[INFO] [stdout] test enrich::kev::tests::enrich_with_ttl_short_circuits_when_vulns_empty ... ok
[INFO] [stdout] test enrich::kev::tests::parse_kev_feed ... ok
[INFO] [stdout] test enrich::kev::tests::read_cache_returns_ids_when_within_ttl ... ok
[INFO] [stdout] test enrich::kev::tests::read_cache_returns_none_when_file_missing ... ok
[INFO] [stdout] test enrich::epss::tests::cache_roundtrip ... ok
[INFO] [stdout] test enrich::license::tests::deny_wins_over_allow_when_both_match ... ok
[INFO] [stdout] test enrich::kev::tests::write_cache_round_trips_through_read_cache ... ok
[INFO] [stdout] test enrich::license::tests::allow_pass_no_violation ... ok
[INFO] [stdout] test enrich::license::tests::compound_exception_violation_fingerprint_distinct_from_base_only ... ok
[INFO] [stdout] test enrich::license::tests::deny_fail_violation ... ok
[INFO] [stdout] test enrich::license::tests::spdx_and_with_denied_exception_violates_and_cites_in_compound ... ok
[INFO] [stdout] test enrich::kev::tests::read_cache_treats_corrupt_body_as_miss ... ok
[INFO] [stdout] test enrich::license::tests::spdx_and_inherits_exception_denial_from_either_side ... ok
[INFO] [stdout] test enrich::license::tests::spdx_and_with_allowed_exception_permits ... ok
[INFO] [stdout] test enrich::license::tests::spdx_and_with_one_denied_branch_violates ... ok
[INFO] [stdout] test enrich::license::tests::noassertion_treated_as_ambiguous ... ok
[INFO] [stdout] test enrich::kev::tests::cache_path_resolves_to_kev_subdir_when_cache_root_is_set ... ok
[INFO] [stdout] test enrich::license::tests::empty_policy_is_inactive ... ok
[INFO] [stdout] test enrich::kev::tests::enrich_short_circuits_when_vulns_empty ... ok
[INFO] [stdout] test enrich::license::tests::exception_violation_synthetic_id_round_trips_distinctly ... ok
[INFO] [stdout] test enrich::license::tests::spdx_exception_or_branch_permits_when_sibling_path_passes ... ok
[INFO] [stdout] test enrich::license::tests::spdx_with_exception_resolves_base_license ... ok
[INFO] [stdout] test enrich::license::tests::unknown_spdx_id_falls_back_to_atomic_path ... ok
[INFO] [stdout] test enrich::license::tests::version_changed_components_evaluated ... ok
[INFO] [stdout] test enrich::license::tests::spdx_or_with_one_allowed_exception_branch_permits ... ok
[INFO] [stdout] test enrich::license::tests::spdx_with_exception_back_compat_when_no_exception_policy ... ok
[INFO] [stdout] test enrich::maintainer::tests::components_without_source_url_are_silently_skipped ... ok
[INFO] [stdout] test enrich::license::tests::glob_expansion_matches_prefix ... ok
[INFO] [stdout] test enrich::maintainer::tests::empty_changeset_short_circuits_to_empty_ok ... ok
[INFO] [stdout] test enrich::license::tests::spdx_exception_not_in_allow_list_fails_closed ... ok
[INFO] [stdout] test enrich::maintainer::tests::hosts_empty_changeset_short_circuits ... ok
[INFO] [stdout] test enrich::license::tests::spdx_or_with_both_exceptions_denied_violates ... ok
[INFO] [stdout] test enrich::license::tests::spdx_compound_denial_wins_over_or_branches ... ok
[INFO] [stdout] test enrich::license::tests::spdx_or_with_one_allowed_branch_permits ... ok
[INFO] [stdout] test enrich::license::tests::spdx_compound_without_exceptions_back_compat ... ok
[INFO] [stdout] test enrich::license::tests::spdx_exception_in_allow_list_permits ... ok
[INFO] [stdout] test enrich::license::tests::spdx_exception_in_deny_list_violates_and_cites_exception ... ok
[INFO] [stdout] test enrich::kev::tests::write_cache_creates_missing_parent_dirs ... ok
[INFO] [stdout] test enrich::maintainer::tests::non_github_source_urls_are_silently_skipped ... ok
[INFO] [stdout] test enrich::maintainer::tests::normalize_iso8601_rejects_short_input ... ok
[INFO] [stdout] test enrich::maintainer::tests::iso8601_unix_epoch_is_zero ... ok
[INFO] [stdout] test enrich::maintainer::tests::normalize_iso8601_rejects_multibyte_at_slice_point ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_codeberg_repo_extracts_https_url ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_codeberg_repo_strips_dot_git_suffix ... ok
[INFO] [stdout] test enrich::maintainer::tests::hosts_no_source_url_skipped ... ok
[INFO] [stdout] test enrich::maintainer::tests::normalize_iso8601_strips_fractional_seconds ... ok
[INFO] [stdout] test enrich::maintainer::tests::hosts_unknown_forge_url_skipped ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_first_commit_date_takes_last_array_element ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_codeberg_repo_handles_ssh_form ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_codeberg_repo_handles_trailing_path_and_fragment ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_codeberg_repo_returns_none_for_non_codeberg ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_first_commit_date_handles_empty_array ... ok
[INFO] [stdout] test enrich::maintainer::tests::iso8601_handles_non_midnight_time ... ok
[INFO] [stdout] test enrich::maintainer::tests::iso8601_rejects_malformed_input ... ok
[INFO] [stdout] test enrich::maintainer::tests::iso8601_round_trips_known_date ... ok
[INFO] [stdout] test enrich::maintainer::tests::normalize_iso8601_handles_canonical_zulu_form ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_github_repo_handles_git_plus_and_ssh_forms ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_github_repo_handles_trailing_path_and_fragment ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_github_repo_returns_none_for_non_github ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_first_commit_date_falls_back_to_committed_date ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_github_repo_extracts_https_url ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_github_repo_strips_dot_git_suffix ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_top_contributor_name_returns_name_field ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_top_contributor_name_returns_none_for_empty_array ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_link_last_page_extracts_page_number ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_repo_extracts_https_url ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_repo_handles_trailing_path_and_fragment ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_link_last_page_handles_missing_header ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_link_last_page_returns_none_when_no_last_rel ... ok
[INFO] [stdout] test enrich::maintainer::tests::percent_encode_passes_through_unreserved_chars ... ok
[INFO] [stdout] test enrich::osv::tests::aliases_from_detail_excludes_primary_and_sorts ... ok
[INFO] [stdout] test enrich::osv::tests::aliases_from_detail_handles_missing_aliases_field ... ok
[INFO] [stdout] test enrich::osv::tests::candidate_purls_extracts_from_added_and_version_changed_after ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_first_commit_date_handles_empty_array ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_repo_handles_git_plus_and_ssh_forms ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_first_commit_date_takes_last_element_authored_date ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_repo_returns_none_for_non_gitlab ... ok
[INFO] [stdout] test enrich::osv::tests::candidate_purls_skips_components_without_purl ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_gitlab_repo_strips_dot_git_suffix ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_top_contributor_returns_none_for_empty_array ... ok
[INFO] [stdout] test enrich::maintainer::tests::percent_encode_encodes_slash_and_space ... ok
[INFO] [stdout] test enrich::maintainer::tests::parse_top_contributor_returns_login_field ... ok
[INFO] [stdout] test enrich::osv::tests::merge_ids_drops_empty_vuln_lists ... ok
[INFO] [stdout] test enrich::osv::tests::severity_from_detail_handles_ghsa_moderate_label ... ok
[INFO] [stdout] test enrich::osv::tests::vulnref_cves_iterates_aliases_when_primary_is_ghsa ... ok
[INFO] [stdout] test enrich::osv::tests::vulnref_cves_includes_primary_when_cve_keyed ... ok
[INFO] [stdout] test enrich::registry::tests::cargo_parse_yanked_and_recent ... ok
[INFO] [stdout] test enrich::registry::tests::days_since_zero_for_now ... ok
[INFO] [stdout] test enrich::registry::tests::npm_parse_recent_publish_and_deprecated ... ok
[INFO] [stdout] test enrich::registry::tests::url_encode_handles_npm_scopes ... ok
[INFO] [stdout] test enrich::registry::tests::pypi_parse_yanked ... ok
[INFO] [stdout] test enrich::osv::tests::severity_from_detail_returns_none_when_database_specific_absent ... ok
[INFO] [stdout] test enrich::osv::tests::severity_from_detail_returns_none_when_severity_field_missing ... ok
[INFO] [stdout] test enrich::tests::ghsa_label_is_case_insensitive_and_trim_tolerant ... ok
[INFO] [stdout] test enrich::osv::tests::severity_from_detail_uses_database_specific_when_present ... ok
[INFO] [stdout] test enrich::tests::ghsa_label_parses_canonical_forms ... ok
[INFO] [stdout] test enrich::tests::severity_ordering_low_to_high ... ok
[INFO] [stdout] test enrich::tests::severity_serializes_as_uppercase_string ... ok
[INFO] [stdout] test enrich::typosquat::tests::cargo_list_loads_with_known_top_crates ... ok
[INFO] [stdout] test enrich::typosquat::tests::cargo_typo_flags_against_serde ... ok
[INFO] [stdout] test enrich::typosquat::tests::composer_legit_fork_under_different_vendor_does_not_flag ... ok
[INFO] [stdout] test enrich::typosquat::tests::composer_list_loads_with_known_top_packages ... ok
[INFO] [stdout] test enrich::typosquat::tests::cache_file_overrides_embedded_snapshot_for_npm ... ok
[INFO] [stdout] test enrich::typosquat::tests::cargo_extension_pattern_is_not_a_squat ... ok
[INFO] [stdout] test enrich::typosquat::tests::composer_package_typo_flags_against_symfony_console ... ok
[INFO] [stdout] test enrich::osv::tests::merge_ids_pairs_purls_with_response_results_in_order ... ok
[INFO] [stdout] test enrich::typosquat::tests::default_cache_path_targets_typosquat_subdir_with_ecosystem_filename ... ok
[INFO] [stdout] test enrich::osv::tests::request_body_matches_osv_querybatch_schema ... ok
[INFO] [stdout] test enrich::typosquat::tests::empty_cache_file_falls_back_to_embedded_snapshot_for_npm ... ok
[INFO] [stdout] test enrich::tests::unknown_label_falls_back_to_none ... ok
[INFO] [stdout] test enrich::typosquat::tests::gem_extension_pattern_is_not_a_squat ... ok
[INFO] [stdout] test enrich::typosquat::tests::gem_list_loads_with_known_top_gems ... ok
[INFO] [stdout] test enrich::typosquat::tests::go_legit_fork_under_different_org_does_not_flag ... ok
[INFO] [stdout] test enrich::typosquat::tests::case_insensitive_exact_match_is_not_flagged ... ok
[INFO] [stdout] test enrich::typosquat::tests::crossenv_flags_against_cross_env_via_jaro_winkler ... ok
[INFO] [stdout] test enrich::typosquat::tests::embedded_list_loads_thousand_names ... ok
[INFO] [stdout] test enrich::typosquat::tests::empty_changeset_yields_no_findings ... ok
[INFO] [stdout] test enrich::typosquat::tests::go_extension_pattern_is_not_a_squat ... ok
[INFO] [stdout] test enrich::typosquat::tests::axios_retry_does_not_flag_against_axios ... ok
[INFO] [stdout] test enrich::typosquat::tests::go_repo_typo_flags_against_cobra ... ok
[INFO] [stdout] test enrich::typosquat::tests::likely_legit_extension_requires_separator_npm ... ok
[INFO] [stdout] test enrich::typosquat::tests::maven_artifact_typo_flags_against_commons_lang3 ... ok
[INFO] [stdout] test enrich::typosquat::tests::maven_best_match_includes_distance_equal_to_max_levenshtein ... ok
[INFO] [stdout] test enrich::typosquat::tests::gem_typo_flags_against_rails ... ok
[INFO] [stdout] test enrich::typosquat::tests::maven_exact_artifact_match_with_different_group_does_not_flag ... ok
[INFO] [stdout] test enrich::typosquat::tests::maven_list_loads_with_known_top_coords ... ok
[INFO] [stdout] test enrich::typosquat::tests::findings_preserve_added_iteration_order ... ok
[INFO] [stdout] test enrich::typosquat::tests::go_list_loads_with_known_top_modules ... ok
[INFO] [stdout] test enrich::typosquat::tests::maven_best_match_picks_closest_when_multiple_candidates_within_distance ... ok
[INFO] [stdout] test enrich::typosquat::tests::nuget_typo_flags_against_newtonsoft_json ... ok
[INFO] [stdout] test enrich::typosquat::tests::exact_match_is_not_flagged ... ok
[INFO] [stdout] test enrich::typosquat::tests::pep503_normalization ... ok
[INFO] [stdout] test enrich::typosquat::tests::maven_best_match_score_formula_matches_one_minus_dist_over_len_plus_one ... ok
[INFO] [stdout] test enrich::license::tests::license_not_in_allow_list_violates ... ok
[INFO] [stdout] test enrich::typosquat::tests::nuget_list_loads_with_known_top_packages ... ok
[INFO] [stdout] test enrich::typosquat::tests::react_router_does_not_flag_against_react ... ok
[INFO] [stdout] test enrich::typosquat::tests::safe_axios_flags_against_axios_via_suffix_boost ... ok
[INFO] [stdout] test enrich::typosquat::tests::missing_cache_file_falls_back_to_embedded_snapshot_for_npm ... ok
[INFO] [stdout] test enrich::typosquat::tests::short_legit_names_skip_structural_rules ... ok
[INFO] [stdout] test enrich::typosquat::tests::nuget_case_insensitive_exact_match_is_not_flagged ... ok
[INFO] [stdout] test enrich::typosquat::tests::pypi_extension_pattern_is_not_a_squat ... ok
[INFO] [stdout] test enrich::typosquat::tests::pypi_underscore_dash_equivalence_is_not_a_squat ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_does_not_flag_minor_or_patch_bump ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_does_not_flag_single_major_bump ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_flags_delta_of_three ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_preserves_input_order ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_returns_empty_for_empty_changeset ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_skips_pairs_with_unparseable_versions ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_with_default_threshold_matches_enrich ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_with_high_threshold_suppresses_smaller_jumps ... ok
[INFO] [stdout] test enrich::typosquat::tests::similarity_threshold_override_widens_match_set ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_with_threshold_one_trips_on_single_major_bump ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_build_metadata ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_returns_empty_for_added_only_changeset ... ok
[INFO] [stdout] test enrich::typosquat::tests::unsupported_ecosystem_components_are_ignored ... ok
[INFO] [stdout] test enrich::typosquat::tests::plain_crypto_js_flags_against_crypto_js_via_suffix_boost ... ok
[INFO] [stdout] test enrich::typosquat::tests::pypi_typo_flags_against_requests ... ok
[INFO] [stdout] test enrich::typosquat::tests::suffix_containment_requires_substantial_prefix ... ok
[INFO] [stdout] test enrich::typosquat::tests::suspicious_suffix_containment_requires_strict_delta_over_legit_len ... ok
[INFO] [stdout] test enrich::version_jump::tests::enrich_flags_delta_of_two ... ok
[INFO] [stdout] test enrich::typosquat::tests::last_path_segment_returns_substring ... ok
[INFO] [stdout] test enrich::typosquat::tests::pypi_list_loads_with_known_top_packages ... ok
[INFO] [stdout] test enrich::typosquat::tests::pep503_normalize_does_not_panic ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_plain ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_pre_release_suffix ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_rejects_leading_zero ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_returns_none_on_empty ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_returns_none_on_non_numeric ... ok
[INFO] [stdout] test parse::cyclonedx::tests::license_falls_back_to_id_then_name ... ok
[INFO] [stdout] test model::sbom::tests::display_matches_as_str_for_each_variant ... ok
[INFO] [stdout] test parse::spdx::tests::license_empty_when_both_noassertion ... ok
[INFO] [stdout] test parse::spdx::tests::download_location_strips_git_plus_and_filters_sentinels ... ok
[INFO] [stdout] test parse::spdx::tests::license_falls_back_to_declared_when_noassertion ... ok
[INFO] [stdout] test parse::spdx::tests::license_prefers_concluded ... ok
[INFO] [stdout] test parse::syft::tests::license_object_prefers_spdx_expression ... ok
[INFO] [stdout] test model::sbom::tests::serialize_emits_canonical_string_form ... ok
[INFO] [stdout] test parse::syft::tests::license_string_form ... ok
[INFO] [stdout] test parse::syft::tests::license_object_falls_back_to_value ... ok
[INFO] [stdout] test parse::tests::detects_cyclonedx_case_insensitive ... ok
[INFO] [stdout] test parse::cyclonedx::tests::license_flattens_expression_first ... ok
[INFO] [stdout] test parse::tests::detects_syft ... ok
[INFO] [stdout] test parse::spdx::tests::actor_strips_prefix ... ok
[INFO] [stdout] test parse::tests::detects_cyclonedx ... ok
[INFO] [stdout] test parse::tests::hash_alg_normalization ... ok
[INFO] [stdout] test model::sbom::tests::as_str_round_trips_each_variant ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_v_prefix ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_does_not_panic ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_round_trips_well_formed_numerics ... ok
[INFO] [stdout] test parse::syft::tests::type_to_ecosystem_handles_syft_specific_names ... ok
[INFO] [stdout] test parse::tests::parse_with_format_hint_bypasses_detection ... ok
[INFO] [stdout] test parse::tests::filter_file_components_drops_only_file_pseudo_components ... ok
[INFO] [stdout] test parse::tests::filter_file_components_is_a_noop_when_none_present ... ok
[INFO] [stdout] test parse::tests::detects_spdx ... ok
[INFO] [stdout] test parse::tests::parse_with_format_none_falls_back_to_detection ... ok
[INFO] [stdout] test parse::tests::parse_with_format_steers_to_chosen_parser_even_when_body_matches_a_different_format ... ok
[INFO] [stdout] test parse::tests::rejects_unknown ... ok
[INFO] [stdout] test plugin::tests::manifest_parses_full_toml ... ok
[INFO] [stdout] test plugin::tests::manifest_missing_exec_field_errors ... ok
[INFO] [stdout] test plugin::tests::manifest_parses_minimum_valid_toml ... ok
[INFO] [stdout] test plugin::tests::fingerprint_is_stable_and_distinct ... ok
[INFO] [stdout] test plugin::tests::manifest_unknown_invoke_on_value_errors ... ok
[INFO] [stdout] test parse::tests::purl_ecosystem_inference ... ok
[INFO] [stdout] test plugin::tests::plugin_nonzero_exit_drops_findings ... ok
[INFO] [stdout] test refresh::tests::parse_cargo_json_extracts_names_in_order ... ok
[INFO] [stdout] test refresh::tests::parse_nuget_json_extracts_ids_in_order ... ok
[INFO] [stdout] test refresh::tests::parse_nuget_json_rejects_non_json ... ok
[INFO] [stdout] test plugin::tests::two_plugins_findings_are_merged ... ok
[INFO] [stdout] test refresh::tests::parse_pypi_json_rejects_non_json ... ok
[INFO] [stdout] test refresh::tests::parser_extracts_names_correctly_from_anvaka_markdown ... ok
[INFO] [stdout] test refresh::tests::parser_handles_empty_input_without_crashing ... ok
[INFO] [stdout] test refresh::tests::parser_skips_lines_with_non_numeric_prefix ... ok
[INFO] [stdout] test refresh::tests::refresh_all_includes_all_eight_ecosystems ... ok
[INFO] [stdout] test refresh::tests::refresh_cargo_concatenates_pages_and_writes_cache ... ok
[INFO] [stdout] test refresh::tests::refresh_composer_is_a_noop_no_cache_file_written ... ok
[INFO] [stdout] test refresh::tests::refresh_fails_loudly_when_fetcher_returns_unparseable_body ... ok
[INFO] [stdout] test refresh::tests::refresh_gem_is_a_noop_no_cache_file_written ... ok
[INFO] [stdout] test refresh::tests::refresh_go_is_a_noop_no_cache_file_written ... ok
[INFO] [stdout] test refresh::tests::refresh_maven_is_a_noop_no_cache_file_written ... ok
[INFO] [stdout] test refresh::tests::refresh_propagates_fetcher_errors_with_context ... ok
[INFO] [stdout] test refresh::tests::refresh_writes_parsed_npm_list_to_cache_dir ... ok
[INFO] [stdout] test refresh::tests::parse_pypi_json_extracts_names_in_order ... ok
[INFO] [stdout] test refresh::tests::refresh_writes_parsed_nuget_list_to_cache_dir ... ok
[INFO] [stdout] test refresh::tests::refresh_writes_parsed_pypi_list_to_cache_dir ... ok
[INFO] [stdout] test render::json::tests::ecosystem_other_serializes_sensibly ... ok
[INFO] [stdout] test render::json::tests::empty_diff_renders_valid_json ... ok
[INFO] [stdout] test render::json::tests::enrichment_round_trips ... ok
[INFO] [stdout] test render::json::tests::output_is_pretty_printed ... ok
[INFO] [stdout] test refresh::tests::write_list_atomically_overwrites_existing_file ... ok
[INFO] [stdout] test render::json::tests::populated_diff_round_trips ... ok
[INFO] [stdout] test render::markdown::dependency_churn::tests::renders_added_section ... ok
[INFO] [stdout] test render::markdown::dependency_churn::tests::renders_version_change_table_columns ... ok
[INFO] [stdout] test render::markdown::dependency_churn::tests::findings_only_hides_raw_churn_but_keeps_risk_sections ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_default_platform_preserves_github_shape ... ok
[INFO] [stdout] test plugin::tests::plugin_stdin_envelope_includes_protocol_version_1 ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_renders_azure_devops_shape ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_omitted_when_repo_url_unset ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_renders_bitbucket_shape ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_renders_gitlab_shape_when_platform_is_gitlab ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_strips_trailing_slash_from_repo_url ... ok
[INFO] [stdout] test render::markdown::license::tests::empty_license_list_renders_as_none ... ok
[INFO] [stdout] test render::markdown::license::tests::license_changed_section_includes_investigation_callout ... ok
[INFO] [stdout] test render::markdown::maintainer_age::tests::maintainer_age_section_omitted_when_no_findings ... ok
[INFO] [stdout] test render::markdown::maintainer_age::tests::maintainer_age_section_renders_with_table_and_xz_callout ... ok
[INFO] [stdout] test render::markdown::tests::empty_changeset_says_no_changes ... ok
[INFO] [stdout] test render::markdown::tests::empty_sections_are_omitted ... ok
[INFO] [stdout] test render::markdown::tests::render_is_deterministic ... ok
[INFO] [stdout] test render::markdown::tests::summary_only_does_not_change_no_changes_short_circuit ... ok
[INFO] [stdout] test render::markdown::tests::summary_only_keeps_summary_table_and_drops_detail ... ok
[INFO] [stdout] test render::markdown::tests::typosquat_summary_row_only_when_typosquats_present ... ok
[INFO] [stdout] test render::markdown::tests::why_this_matters_link_appears_in_each_finding_section ... ok
[INFO] [stdout] test render::markdown::typosquat::tests::typosquat_section_omitted_when_no_findings ... ok
[INFO] [stdout] test render::markdown::typosquat::tests::typosquat_section_renders_with_similarity_table ... ok
[INFO] [stdout] test parse::tests::hash_alg_does_not_panic ... ok
[INFO] [stdout] test render::markdown::typosquat::tests::typosquat_section_summary_includes_top_similarity_teaser ... ok
[INFO] [stdout] test render::markdown::version_jump::tests::version_jump_section_renders_with_table ... ok
[INFO] [stdout] test render::markdown::version_jump::tests::version_jump_section_omitted_when_no_findings ... ok
[INFO] [stdout] test render::markdown::vulns::tests::vuln_rows_sorted_by_max_severity_across_components ... ok
[INFO] [stdout] test render::markdown::vulns::tests::vuln_section_summary_includes_top_severity_teaser ... ok
[INFO] [stdout] test render::markdown::vulns::tests::vulnerability_section_omitted_when_no_findings ... ok
[INFO] [stdout] test render::markdown::vulns::tests::vulnerability_section_sorts_advisories_by_severity_then_id ... ok
[INFO] [stdout] test render::sarif::tests::cve_results_are_sorted_by_purl_for_determinism ... ok
[INFO] [stdout] test render::markdown::footer::tests::footer_renders_when_repo_url_supplied ... ok
[INFO] [stdout] test render::sarif::tests::cve_results_carry_partial_fingerprints_stable_across_runs ... ok
[INFO] [stdout] test render::sarif::tests::cve_results_emit_one_per_advisory_with_purl_property ... ok
[INFO] [stdout] test render::sarif::tests::cve_severity_none_emits_warning_level ... ok
[INFO] [stdout] test render::sarif::tests::empty_diff_renders_valid_sarif_with_all_rules ... ok
[INFO] [stdout] test render::markdown::vulns::tests::vulnerability_section_renders_with_osv_links ... ok
[INFO] [stdout] test render::sarif::tests::fingerprint_helper_is_pure_and_hex_64_chars ... ok
[INFO] [stdout] test render::sarif::tests::license_change_result_carries_before_after_license_arrays ... ok
[INFO] [stdout] test render::sarif::tests::license_violation_emits_result_with_stable_fingerprint ... ok
[INFO] [stdout] test render::sarif::tests::output_is_pretty_printed ... ok
[INFO] [stdout] test render::sarif::tests::plugin_findings_emit_sarif_results_with_distinct_fingerprints ... ok
[INFO] [stdout] test render::sarif::tests::exception_driven_license_violation_fingerprint_differs_from_base ... ok
[INFO] [stdout] test render::sarif::tests::render_is_pure_byte_deterministic_across_runs ... ok
[INFO] [stdout] test render::sarif::tests::two_cves_on_same_purl_get_distinct_fingerprints ... ok
[INFO] [stdout] test render::sarif::tests::typosquat_result_carries_similarity_and_closest_property ... ok
[INFO] [stdout] test render::sarif::tests::version_jump_fingerprint_uses_full_versions_not_majors ... ok
[INFO] [stdout] test render::term::tests::color_off_emits_no_ansi_escapes ... ok
[INFO] [stdout] test render::term::tests::empty_changeset_says_no_changes ... ok
[INFO] [stdout] test render::sarif::tests::every_result_has_a_location_and_a_ruleid ... ok
[INFO] [stdout] test render::sarif::tests::version_jump_result_carries_major_deltas ... ok
[INFO] [stdout] test render::markdown::dependency_churn::tests::sections_are_wrapped_in_collapsible_details_with_count ... ok
[INFO] [stdout] test plugin::tests::plugin_malformed_json_drops_findings ... ok
[INFO] [stdout] test parse::tests::ecosystem_from_purl_does_not_panic ... ok
[INFO] [stdout] test plugin::tests::plugin_invocation_returns_findings ... ok
[INFO] [stdout] test render::term::tests::empty_sections_are_omitted ... ok
[INFO] [stdout] test render::term::tests::render_is_deterministic ... ok
[INFO] [stdout] test run::tests::any_epss_threshold_gating ... ok
[INFO] [stdout] test run::tests::budget_trips_when_counts_exceed_limits ... ok
[INFO] [stdout] test run::tests::calibration_emits_epss_and_kev_rows_when_set ... ok
[INFO] [stdout] test parse::tests::parse_pipeline_does_not_panic_on_arbitrary_bytes ... ok
[INFO] [stdout] test run::tests::calibration_jsonl_keeps_severity_label_as_string ... ok
[INFO] [stdout] test render::term::tests::empty_changeset_under_forced_color_has_no_escapes_on_neutral_line ... ok
[INFO] [stdout] test render::term::tests::forced_color_emits_ansi_escapes ... ok
[INFO] [stdout] test render::term::tests::vulnerability_lines_render_advisory_ids ... ok
[INFO] [stdout] test run::tests::calibration_jsonl_format_emits_one_object_per_line ... ok
[INFO] [stdout] test run::tests::calibration_license_row_includes_exception_detail ... ok
[INFO] [stdout] test run::tests::calibration_pipe_format_matches_v0_7_layout ... ok
[INFO] [stdout] test run::tests::fail_on_cve_still_trips_on_severity_none_advisories ... ok
[INFO] [stdout] test run::tests::fail_on_cve_trips_only_on_cve_findings ... ok
[INFO] [stdout] test render::term::tests::renders_added_section ... ok
[INFO] [stdout] test render::term::tests::renders_removed_version_typosquat_lines ... ok
[INFO] [stdout] test run::tests::fail_on_license_change_trips_only_on_license_changes ... ok
[INFO] [stdout] test run::tests::fail_on_license_violation_trips ... ok
[INFO] [stdout] test run::tests::fail_on_none_never_trips ... ok
[INFO] [stdout] test run::tests::fail_on_typosquat_ignores_license_change ... ok
[INFO] [stdout] test vex::apply::tests::apply_accumulates_into_existing_suppressed_count ... ok
[INFO] [stdout] test vex::apply::tests::apply_license_violations_suppresses_and_counts ... ok
[INFO] [stdout] test vex::apply::tests::apply_maintainer_age_suppresses_and_counts ... ok
[INFO] [stdout] test vex::apply::tests::apply_typosquats_annotates_under_investigation ... ok
[INFO] [stdout] test vex::apply::tests::apply_typosquats_suppresses_and_counts ... ok
[INFO] [stdout] test vex::apply::tests::apply_version_jumps_suppresses_and_counts ... ok
[INFO] [stdout] test run::tests::fail_on_typosquat_trips_only_on_typosquat_findings ... ok
[INFO] [stdout] test vex::apply::tests::apply_noop_on_empty_index ... ok
[INFO] [stdout] test vex::emit::tests::emission_default_status_is_under_investigation ... ok
[INFO] [stdout] test vex::apply::tests::apply_vulns_suppresses_and_annotates ... ok
[INFO] [stdout] test vex::emit::tests::emission_byte_deterministic_with_source_date_epoch ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_license_change_round_trip ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_license_violation_round_trip_with_spdx_with_clause ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_maintainer_set_changed_round_trip ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_recently_published_round_trip ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_synthetic_id_handles_bare_name_fallback ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_synthetic_id_rejects_real_advisory_ids ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_typosquat_round_trip ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_version_jump_round_trip ... ok
[INFO] [stdout] test vex::tests::detect_format_cyclonedx_requires_vulnerabilities_array ... ok
[INFO] [stdout] test run::tests::fail_on_any_trips_on_each_finding_kind_and_license_changes ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_maintainer_age_round_trip ... ok
[INFO] [stdout] test vex::tests::first_write_wins_across_multiple_files ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_synthetic_id_rejects_malformed_strings ... ok
[INFO] [stdout] test run::tests::fail_on_kev_trips_when_any_advisory_kev_set ... ok
[INFO] [stdout] test vex::emit::tests::emission_roundtrip_via_loader ... ok
[INFO] [stdout] test vex::synthetic_id::tests::parse_deprecated_round_trip ... ok
[INFO] [stdout] test vex::tests::load_cyclonedx_vex_basic ... ok
[INFO] [stdout] test vex::tests::matcher_versionless_product_matches_versioned_finding ... ok
[INFO] [stdout] test vex::tests::under_investigation_annotates_not_suppresses ... ok
[INFO] [stdout] test vex::tests::unknown_format_errors_with_path ... ok
[INFO] [stdout] test vex::tests::vex_effect_justification_returns_inner_for_both_variants ... ok
[INFO] [stdout] test vex::tests::vex_index_is_empty_tracks_statement_presence ... ok
[INFO] [stdout] test vex::tests::vex_status_from_openvex_rejects_unknown_strings ... ok
[INFO] [stdout] test run::tests::fail_on_critical_cve_filters_on_severity_high_or_above ... ok
[INFO] [stdout] test vex::tests::load_openvex_basic ... ok
[INFO] [stdout] test vex::tests::vex_status_from_openvex_round_trips_all_arms ... ok
[INFO] [stdout] test vex::tests::matcher_rejects_mismatched_product ... ok
[INFO] [stdout] test vex::tests::matcher_resolves_by_alias ... ok
[INFO] [stdout] test parse::tests::parse_pipeline_does_not_panic_with_format_hint ... ok
[INFO] [stdout] test parse::tests::parse_pipeline_does_not_panic_on_arbitrary_json ... ok
[INFO] [stdout] test plugin::tests::plugin_timeout_drops_findings ... ok
[INFO] [stdout] test diff::tests::diff_is_deterministic ... ok
[INFO] [stdout] test diff::tests::diff_self_is_empty ... ok
[INFO] [stdout] test enrich::version_jump::tests::extract_major_handles_unicode_without_panic ... ok
[INFO] [stdout] test diff::tests::diff_swap_roles_when_inputs_swapped ... ok
[INFO] [stdout] test enrich::typosquat::tests::enrich_does_not_panic_on_arbitrary_components ... ok
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/bomdrift-6cff3a3fe9a52c8d)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 441 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.13s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cli.rs (/opt/rustwide/target/release/deps/cli-a28df436710509f0)
[INFO] [stdout] 
[INFO] [stdout] running 36 tests
[INFO] [stdout] test diff_axios_fixture_pair_renders_typosquat_section ... ok
[INFO] [stdout] test diff_explicit_baseline_path_missing_errors_loudly ... ok
[INFO] [stdout] test diff_debug_calibration_prints_csv_lines_to_stderr ... ok
[INFO] [stdout] test diff_explicit_flag_overrides_config_default ... ok
[INFO] [stdout] test diff_explicit_format_cdx_succeeds_on_cdx_input ... ok
[INFO] [stdout] test diff_default_config_can_focus_comment_and_trip_budget ... ok
[INFO] [stdout] test diff_auto_detects_gitlab_when_gitlab_ci_env_is_true ... ok
[INFO] [stdout] test diff_fail_on_cve_with_no_findings_exits_0 ... ok
[INFO] [stdout] test diff_explicit_platform_flag_overrides_ci_env_detection ... ok
[INFO] [stdout] test diff_before_attestation_conflicts_with_positional_before ... ok
[INFO] [stdout] test diff_fail_on_critical_cve_with_no_cve_findings_does_not_warn ... ok
[INFO] [stdout] test diff_config_baseline_missing_file_does_not_error ... ok
[INFO] [stdout] test diff_fail_on_license_change_exits_2 ... ok
[INFO] [stdout] test diff_renders_github_footer_when_only_repo_url_env_var_is_set ... ok
[INFO] [stdout] test diff_missing_file_fails_with_useful_error ... ok
[INFO] [stdout] test diff_explicit_markdown_flag_is_identical_to_default ... ok
[INFO] [stdout] test diff_multi_major_delta_accepts_valid_value ... ok
[INFO] [stdout] test diff_missing_explicit_config_fails_usefully ... ok
[INFO] [stdout] test diff_explicit_format_overrides_autodetection ... ok
[INFO] [stdout] test diff_no_maintainer_age_flag_skips_enricher ... ok
[INFO] [stdout] test diff_fail_on_typosquat_exits_2_but_still_prints_markdown_body ... ok
[INFO] [stdout] test refresh_typosquat_help_advertises_ecosystem_flag ... ok
[INFO] [stdout] test diff_json_output_produces_parseable_json ... ok
[INFO] [stdout] test diff_cache_ttl_hours_rejects_zero_and_negative ... ok
[INFO] [stdout] test diff_require_attestation_demands_both_attestation_flags ... ok
[INFO] [stdout] test diff_typosquat_similarity_threshold_changes_calibration_row ... ok
[INFO] [stdout] test diff_terminal_output_in_non_tty_falls_back_to_markdown ... ok
[INFO] [stdout] test diff_typosquat_similarity_threshold_surfaces_in_calibration_threshold_field ... ok
[INFO] [stdout] test diff_self_against_self_reports_no_changes ... ok
[INFO] [stdout] test diff_multi_major_delta_rejects_zero_and_negative ... ok
[INFO] [stdout] test diff_axios_fixture_pair_prints_pr_comment_markdown ... ok
[INFO] [stdout] test diff_typosquat_similarity_threshold_rejects_out_of_range ... ok
[INFO] [stdout] test diff_young_maintainer_days_rejects_zero_and_negative ... ok
[INFO] [stdout] test diff_plugin_end_to_end_emits_finding_in_markdown_and_sarif ... ok
[INFO] [stdout] test init_config_only_scaffolds_policy_file_without_workflows ... ok
[INFO] [stdout] test diff_sarif_output_produces_valid_sarif_with_typosquat_finding ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/integration.rs (/opt/rustwide/target/release/deps/integration-f7158ff3aca9256c)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test axios_diff_renders_pr_comment_shape ... ok
[INFO] [stdout] test diff_is_deterministic_across_runs ... ok
[INFO] [stdout] test syft_minimal_parses ... ok
[INFO] [stdout] test diff_cdx_minimal_against_cdx_after ... ok
[INFO] [stdout] test spdx_minimal_parses ... ok
[INFO] [stdout] test render_is_deterministic_through_full_pipeline ... ok
[INFO] [stdout] test cdx_minimal_parses ... ok
[INFO] [stderr]      Running tests/real_world.rs (/opt/rustwide/target/release/deps/real_world-7ea88ee6a2123ef3)
[INFO] [stdout] test typosquat_enricher_flags_plain_crypto_js_on_axios_fixture ... ok
[INFO] [stdout] test json_render_full_pipeline ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test every_real_world_spdx_fixture_parses_with_components ... ok
[INFO] [stdout] test diff_two_unrelated_real_world_sboms_does_not_panic ... ok
[INFO] [stdout] test known_purl_types_resolve_to_canonical_ecosystem ... ok
[INFO] [stdout] test every_real_world_cdx_fixture_parses_with_components ... ok
[INFO] [stdout] test self_diff_of_each_real_world_sbom_is_empty ... ok
[INFO] [stdout] test real_world_fixtures_contain_no_file_pseudo_components_after_filter ... ok
[INFO] [stdout] test render_diff_of_real_world_sboms_to_all_formats ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests bomdrift
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/clock.rs - clock::now (line 25) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 2.93s; merged doctests compilation took 2.91s
[INFO] running `Command { std: "docker" "inspect" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da", kill_on_drop: false }`
[INFO] [stdout] 64af293d833671afdee5c8ac14fefc0af83e58e57dadfbccb81b255da59169da
