[INFO] fetching crate deps-pypi 2.0.0...
[INFO] testing deps-pypi-2.0.0 against 1.99.0-beta.8+cargoflags=--release for beta-release-1.100-2
[INFO] extracting crate deps-pypi 2.0.0 into /workspace/builds/worker-6-tc1/source
[INFO] started tweaking crates.io crate deps-pypi 2.0.0
[INFO] finished tweaking crates.io crate deps-pypi 2.0.0
[INFO] tweaked toml for crates.io crate deps-pypi 2.0.0 written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate deps-pypi 2.0.0 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 crates.io crate deps-pypi 2.0.0 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] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded pep440_rs v0.7.3
[INFO] [stderr]   Downloaded pep508_rs v0.9.2
[INFO] [stderr]   Downloaded version-ranges v0.1.3
[INFO] [stderr]   Downloaded deps-core-macros v2.0.0
[INFO] [stderr]   Downloaded toml-span v0.7.1
[INFO] [stderr]   Downloaded hashlink v0.12.2
[INFO] [stderr]   Downloaded yaml-rust2 v0.13.0
[INFO] [stderr]   Downloaded deps-core v2.0.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602
[INFO] running `Command { std: "docker" "start" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", 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" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602" "/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" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", 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" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling smallvec v1.16.1
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling aws-lc-rs v1.18.1
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling crc32fast v1.5.2
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling rustls v0.23.45
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling miniz_oxide v0.9.1
[INFO] [stderr]    Compiling aws-lc-sys v0.45.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling flate2 v1.1.10
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling compression-core v0.4.33
[INFO] [stderr]    Compiling compression-codecs v0.4.43
[INFO] [stderr]    Compiling multiversion-macros v0.9.0
[INFO] [stderr]    Compiling encoding_rs v0.8.41
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling ipnet v2.12.2
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling rustls-native-certs v0.8.4
[INFO] [stderr]    Compiling multiversion v0.9.0
[INFO] [stderr]    Compiling bitflags v2.13.2
[INFO] [stderr]    Compiling unicode-general-category v1.1.0
[INFO] [stderr]    Compiling simdutf8 v0.1.5
[INFO] [stderr]    Compiling core_detect v1.0.0
[INFO] [stderr]    Compiling multiversion_no_op v1.0.0
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling version-ranges v0.1.3
[INFO] [stderr]    Compiling hashlink v0.12.2
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling arraydeque v0.5.1
[INFO] [stderr]    Compiling unscanny v0.1.0
[INFO] [stderr]    Compiling urlencoding v2.1.3
[INFO] [stderr]    Compiling either v1.18.0
[INFO] [stderr]    Compiling time v0.3.55
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling dashmap v6.2.1
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling async-compression v0.4.48
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling pep440_rs v0.7.3
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling yaml-rust2 v0.13.0
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling toml-span v0.7.1
[INFO] [stderr]    Compiling deps-core-macros v2.0.0
[INFO] [stderr]    Compiling boxcar v0.2.14
[INFO] [stderr]    Compiling jsonc-parser v0.33.2
[INFO] [stderr]    Compiling rustc-hash v2.1.3
[INFO] [stderr]    Compiling semver v1.0.28
[INFO] [stderr]    Compiling pep508_rs v0.9.2
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.10
[INFO] [stderr]    Compiling reqwest v0.13.5
[INFO] [stderr]    Compiling deps-core v2.0.0
[INFO] [stderr]    Compiling deps-pypi v2.0.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 4m 34s
[INFO] running `Command { std: "docker" "inspect" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", 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" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602" "/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_core v1.0.229
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling log v0.4.34
[INFO] [stderr]    Compiling rustix v1.1.5
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling alloca v0.4.0
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling clap_builder v4.6.7
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling criterion-plot v0.8.2
[INFO] [stderr]    Compiling rand v0.9.5
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling clap v4.6.7
[INFO] [stderr]    Compiling console v0.16.6
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling pep440_rs v0.7.3
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling async-compression v0.4.48
[INFO] [stderr]    Compiling tokio-rustls v0.26.5
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling colored v3.1.1
[INFO] [stderr]    Compiling pep508_rs v0.9.2
[INFO] [stderr]    Compiling insta v1.48.0
[INFO] [stderr]    Compiling criterion v0.8.2
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.10
[INFO] [stderr]    Compiling reqwest v0.13.5
[INFO] [stderr]    Compiling mockito v1.7.2
[INFO] [stderr]    Compiling deps-core v2.0.0
[INFO] [stderr]    Compiling deps-pypi v2.0.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 4m 00s
[INFO] running `Command { std: "docker" "inspect" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", 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" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602" "/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.42s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/deps_pypi-df17534060d773e7)
[INFO] [stdout] 
[INFO] [stdout] running 453 tests
[INFO] [stdout] test config::tests::test_blocked_class_for_primary_and_named_source_sharing_url_have_distinct_declaration_keys ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_uv_default_blocked_with_valid_extra_present ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_none_when_not_blocked ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_primary_blocked_by_policy ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_none_when_primary_invalid_for_other_reason ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_tail_hop_ignored_when_primary_present ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_uv_default_blocked_with_no_extras_degrades_to_registry ... ok
[INFO] [stdout] test config::tests::test_blocked_class_for_named_source_blocked_by_policy ... ok
[INFO] [stdout] test config::tests::test_case_a_primary_only ... ok
[INFO] [stdout] test config::tests::test_case_a_primary_plus_extras ... ok
[INFO] [stdout] test config::tests::test_case_b_extras_only_no_primary ... ok
[INFO] [stdout] test config::tests::test_chain_key_differs_by_extras ... ok
[INFO] [stdout] test config::tests::test_index_url_accepts_query_string ... ok
[INFO] [stdout] test config::tests::test_chain_key_distinguishes_explicit_from_implicit ... ok
[INFO] [stdout] test config::tests::test_index_url_accepts_http_loopback_under_test_cfg ... ok
[INFO] [stdout] test config::tests::test_index_url_accepts_https ... ok
[INFO] [stdout] test config::tests::test_index_url_policy_matrix ... ok
[INFO] [stdout] test config::tests::test_index_url_rejects_invalid_url ... ok
[INFO] [stdout] test config::tests::test_invalid_extra_dropped_not_escalated ... ok
[INFO] [stdout] test config::tests::test_index_url_normalizes_trailing_slash ... ok
[INFO] [stdout] test config::tests::test_index_url_rejects_http_near_miss_loopback ... ok
[INFO] [stdout] test config::tests::test_invalid_primary_fails_closed ... ok
[INFO] [stdout] test config::tests::test_no_declaration_resolves_to_plain_registry ... ok
[INFO] [stdout] test config::tests::test_index_url_rejects_userinfo ... ok
[INFO] [stdout] test config::tests::test_redact_userinfo_noop_cases ... ok
[INFO] [stdout] test config::tests::test_index_url_rejects_http_non_loopback ... ok
[INFO] [stdout] test config::tests::test_rejected_reason_for_none_when_valid ... ok
[INFO] [stdout] test config::tests::test_named_source_resolves_independently ... ok
[INFO] [stdout] test config::tests::test_rejected_reason_for_none_when_blocked_host ... ok
[INFO] [stdout] test config::tests::test_redact_userinfo_strips_username_and_password ... ok
[INFO] [stdout] test config::tests::test_rejected_reason_for_primary_invalid_url ... ok
[INFO] [stdout] test config::tests::test_resolve_entry_redacts_literal_userinfo_from_unparseable_raw ... ok
[INFO] [stdout] test config::tests::test_resolved_chain_debug_opaque_shape_prints_key_verbatim ... ok
[INFO] [stdout] test config::tests::test_resolve_entry_redacts_userinfo_from_raw_and_log ... ok
[INFO] [stdout] test config::tests::test_set_primary_resolved_keeps_first_on_duplicate ... ok
[INFO] [stdout] test config::tests::test_resolve_entry_redacts_query_string_from_raw_and_log ... ok
[INFO] [stdout] test config::tests::test_unresolved_named_source_fails_closed ... ok
[INFO] [stdout] test config::tests::test_resolved_chain_debug_redacts_credentials_for_url_shape::debug_redaction_conformance ... ok
[INFO] [stdout] test config::tests::test_uv_default_is_last_resort_not_primary ... ok
[INFO] [stdout] test config::tests::test_zero_hop_case_degrades_to_plain_registry ... ok
[INFO] [stdout] test config::tests::test_userinfo_rejected_never_retained_in_index_url ... ok
[INFO] [stdout] test config::tests::test_set_primary_resolved_redacts_query_string_credential_in_dropped_source_log ... ok
[INFO] [stdout] test config::tests::test_uv_invalid_default_degrades_to_implicit_public ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_id_matches ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_manifest_filenames_match ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_as_any_downcasts ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_lockfile_filenames_match ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_display_name_matches ... ok
[INFO] [stdout] test ecosystem::tests::pypi_poetry_dollar_placeholder_conformance::unresolved_requirement_never_rewritten ... ok
[INFO] [stdout] test ecosystem::tests::test_extract_prefix_no_quote_returns_unchanged ... ok
[INFO] [stdout] test ecosystem::tests::test_extract_prefix_skips_escaped_quote ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_non_registry_source_yields_no_fetch ... ok
[INFO] [stdout] test ecosystem::tests::test_extract_prefix_closed_value_is_empty ... ok
[INFO] [stdout] test ecosystem::tests::test_extract_prefix_strips_leading_quote ... ok
[INFO] [stdout] test ecosystem::tests::pypi_ecosystem_conformance::ecosystem_registry_returns_arc ... ok
[INFO] [stdout] test ecosystem::tests::pypi_unresolved_requirement_conformance::unresolved_requirement_never_rewritten ... ok
[INFO] [stdout] test ecosystem::tests::test_fallback_bare_insert_text_default_is_bare_name ... ok
[INFO] [stdout] test ecosystem::tests::test_ecosystem_manifest_patterns ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_and_extract_prefix_optional_dependencies_group ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_optional_dependencies_header ... ok
[INFO] [stdout] test ecosystem::tests::test_fallback_edit_excludes_newer_rejects_not_equal_excluded_fallback ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_array_ignores_bracket_in_comment ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_array_no_literal_header ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_array_resyncs_after_unbalanced_extras_bracket ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_array_single_line ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_array_scoped_to_project_table ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_header_with_trailing_comment ... ok
[INFO] [stdout] test ecosystem::tests::test_is_in_dependencies_section_project_state_cleared_by_commented_other_header ... ok
[INFO] [stdout] test ecosystem::tests::test_manifest_kind_file_type_reflects_uri ... ok
[INFO] [stdout] test ecosystem::tests::test_completion_insert_text_dotted_name_stays_quoted_string ... ok
[INFO] [stdout] test ecosystem::tests::test_fallback_edit_excludes_newer_pins_d1_in_range_tilde_admission ... ok
[INFO] [stdout] test ecosystem::tests::test_completion_insert_text_quotes_the_name ... ok
[INFO] [stdout] test ecosystem::tests::test_fallback_edit_excludes_newer_pins_writable_out_of_range ... ok
[INFO] [stdout] test ecosystem::tests::test_fallback_edit_excludes_newer_rejects_not_equal_excluded_fallback_vacuous_case ... ok
[INFO] [stdout] test ecosystem::tests::test_generate_diagnostics_no_dependencies ... ok
[INFO] [stdout] test ecosystem::tests::test_lockfile_provider_returns_some ... ok
[INFO] [stdout] test ecosystem::tests::test_matched_only_via_directory_pattern ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_blocked_extra_does_not_break_chain_with_valid_primary ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_directory_pattern_only_applies_strict_gate ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_empty_dependencies ... ok
[INFO] [stdout] test error::tests::test_error_display ... ok
[INFO] [stdout] test error::tests::test_invalid_dependency_spec_display_and_debug_never_echo_credential ... ok
[INFO] [stdout] test error::tests::test_pep508_error_kind_str_never_echoes_message_or_input ... ok
[INFO] [stdout] test error::tests::test_pep508_error_kind_str_unsupported_requirement_variant ... ok
[INFO] [stdout] test error::tests::test_pep508_error_kind_str_url_error_variant ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_all_extras_blocked_degrades_to_plain_registry ... ok
[INFO] [stdout] test error::tests::test_reason_for_log_invalid_dependency_spec_is_a_fixed_category ... ok
[INFO] [stdout] test error::tests::test_reason_for_log_unsupported_format_shows_full_self_authored_message ... ok
[INFO] [stdout] test error::tests::test_reason_for_log_requirement_too_long_reports_the_bounds ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_invalid_toml ... ok
[INFO] [stdout] test error::tests::test_toml_parse_error_display ... ok
[INFO] [stdout] test formatter::tests::pypi_formatter_conformance::formatter_generic_template_placeholders_guarded ... ok
[INFO] [stdout] test formatter::tests::pypi_formatter_conformance::formatter_package_url_matches ... ok
[INFO] [stdout] test formatter::tests::pypi_formatter_conformance::formatter_validate_package_name_accepts ... ok
[INFO] [stdout] test formatter::tests::pypi_formatter_conformance::formatter_validate_package_name_rejects ... ok
[INFO] [stdout] test formatter::tests::pypi_formatter_conformance::formatter_version_satisfies_requirement_matches ... ok
[INFO] [stdout] test formatter::tests::test_can_resolve_source ... ok
[INFO] [stdout] test formatter::tests::pypi_formatter_conformance::formatter_package_url_hostile_input_safe ... ok
[INFO] [stdout] test formatter::tests::test_compile_requirement_unparseable_candidate_is_skipped ... ok
[INFO] [stdout] test formatter::tests::test_compile_requirement_satisfiable ... ok
[INFO] [stdout] test formatter::tests::test_compile_requirement_local_version_returns_none ... ok
[INFO] [stdout] test formatter::tests::test_default_yanked_message ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_pyproject_toml_unchanged ... ok
[INFO] [stdout] test formatter::tests::test_compile_requirement_unparseable_requirement_returns_none ... ok
[INFO] [stdout] test formatter::tests::test_format_version ... ok
[INFO] [stdout] test formatter::tests::test_format_version_overflow_protection ... ok
[INFO] [stdout] test formatter::tests::test_format_version_replacing_wildcard_pin_no_op_falls_back_to_exact_fix ... ok
[INFO] [stdout] test formatter::tests::test_normalize_fast_path ... ok
[INFO] [stdout] test formatter::tests::test_osv_package_name_is_pep503_normalized ... ok
[INFO] [stdout] test formatter::tests::test_osv_version_to_native_round_trips_through_own_parser ... ok
[INFO] [stdout] test formatter::tests::test_format_version_replacing_table ... ok
[INFO] [stdout] test formatter::tests::test_suppress_package_url ... ok
[INFO] [stdout] test formatter::tests::test_normalize_package_name ... ok
[INFO] [stdout] test formatter::tests::test_osv_version_to_native_round_trips_through_format_version_replacing ... ok
[INFO] [stdout] test lockfile::tests::test_duplicate_table_error_redacts_credential_in_lockfile ... ok
[INFO] [stdout] test lockfile::tests::test_locate_lockfile_poetry_priority ... ok
[INFO] [stdout] test lockfile::tests::test_locate_lockfile_rejects_non_file_uri ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_requirements_txt_uri_yields_dependencies ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_pyproject_toml_invalid_reports_pyproject_file_type ... ok
[INFO] [stdout] test lockfile::tests::test_missing_version_warn_redacts_credential_in_package_name ... ok
[INFO] [stdout] test lockfile::tests::test_parse_empty_lock_file ... ok
[INFO] [stdout] test lockfile::tests::test_locate_lockfile_uv_fallback ... ok
[INFO] [stdout] test lockfile::tests::test_parse_lockfile_rejects_excessive_nesting ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_no_declaration_registers_nothing ... ok
[INFO] [stdout] test lockfile::tests::pypi_lockfile_conformance::locate_lockfile_not_found ... ok
[INFO] [stdout] test lockfile::tests::test_parse_poetry_lock_missing_fields ... ok
[INFO] [stdout] test lockfile::tests::test_parse_poetry_lock_with_path ... ok
[INFO] [stdout] test lockfile::tests::pypi_lockfile_conformance::parse_malformed_lockfile_does_not_panic ... ok
[INFO] [stdout] test lockfile::tests::test_parse_uv_lock_with_git ... ok
[INFO] [stdout] test name::tests::test_normalize_already_normalized ... ok
[INFO] [stdout] test name::tests::test_normalize_consecutive_separators ... ok
[INFO] [stdout] test name::tests::test_normalize_dots ... ok
[INFO] [stdout] test name::tests::test_normalize_edge_cases ... ok
[INFO] [stdout] test lockfile::tests::pypi_lockfile_conformance::locate_lockfile_same_directory ... ok
[INFO] [stdout] test name::tests::test_normalize_leading_trailing_separators ... ok
[INFO] [stdout] test name::tests::test_normalize_lowercase ... ok
[INFO] [stdout] test name::tests::test_normalize_mixed ... ok
[INFO] [stdout] test name::tests::test_normalize_underscores ... ok
[INFO] [stdout] test lockfile::tests::test_parse_simple_poetry_lock ... ok
[INFO] [stdout] test lockfile::tests::test_parse_uv_lock ... ok
[INFO] [stdout] test lockfile::tests::test_parse_uv_lock_with_path ... ok
[INFO] [stdout] test parser::pep508_name_tests::leading_name_stops_at_extras_bracket ... ok
[INFO] [stdout] test parser::pep508_name_tests::leading_name_stops_at_whitespace ... ok
[INFO] [stdout] test parser::pep508_name_tests::leading_name_trims_leading_whitespace ... ok
[INFO] [stdout] test parser::pep508_name_tests::name_ending_in_hyphen_rejected ... ok
[INFO] [stdout] test parser::pep508_parse_error_tests::malformed_marker_produces_invalid_dependency_spec_with_working_error_impls ... ok
[INFO] [stdout] test parser::pep508_name_tests::name_starting_or_ending_with_special_char_rejected ... ok
[INFO] [stdout] test parser::pep508_name_tests::valid_names_accepted ... ok
[INFO] [stdout] test parser::pep508_name_tests::empty_name_rejected ... ok
[INFO] [stdout] test parser::pep508_name_tests::leading_name_of_empty_string_is_empty ... ok
[INFO] [stdout] test parser::pep508_parse_error_tests::pep508_parse_error_display_and_debug_never_echo_credential_in_input ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_build_system_requires ... ok
[INFO] [stdout] test parser::pyproject::tests::test_no_index_declaration_pyproject_is_plain_registry ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_complex_version_specifier ... ok
[INFO] [stdout] test parser::pyproject::tests::test_leading_name_rejection_redacts_direct_reference_url_credential ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_empty_dependencies ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_empty_optional_dependencies_table ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_content_rejects_excessive_nesting ... ok
[INFO] [stdout] test parser::pyproject::tests::test_credential_free_parse_failure_still_reports_a_useful_reason ... ok
[INFO] [stdout] test parser::pyproject::tests::test_leading_name_rejection_redacts_direct_reference_url_query_token ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_failure_redacts_credential_embedded_in_pep508_error_display ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_content_redacts_credential_in_duplicate_table_error ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_mixed_formats ... ok
[INFO] [stdout] test ecosystem::tests::test_parse_manifest_valid_content ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_duplicate_dependency_positions ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_invalid_toml ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_no_project_section ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep508_with_compound_marker ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep508_with_markers ... ok
[INFO] [stdout] test lockfile::tests::test_parse_poetry_lock_with_git ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep508_with_platform_marker ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep508_without_markers ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep621_dependencies ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep735_dependency_groups ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep735_with_includes ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_poetry_dependencies ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_poetry_groups ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep621_dollar_placeholder_requirement_is_skipped ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_version_with_wildcard ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_whitespace_only_dependency ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_deeply_nested_marker_under_length_cap_skips_normalization ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_and_joined_repeated_token_no_operator_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_chained_comparison_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_chained_in_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_depth_bypass_via_quoted_parens_falls_back ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_poetry_path_dependency ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep621_with_git_url ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep621_with_comments ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_pep621_optional_dependencies ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_poetry_with_multiple_constraints ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_keyword_padded_with_unquoted_garbage_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_markers_range_covers_marker_text ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_non_ascii_marker_literal_still_normalizes ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_keyword_repeated_without_separators_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_oversized_in_operator_marker_still_normalizes ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_repeated_token_no_operator_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_oversized_marker_beyond_total_cap_still_survives ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_without_markers_has_no_markers_range ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_reasonably_nested_marker_still_normalizes ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_version_range_excludes_marker_text ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_oversized_not_in_operator_marker_still_normalizes ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_primary_source_blocked_by_policy_populates_blocked_registries ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_primary_source_invalid_populates_rejected_registries ... ok
[INFO] [stdout] test parser::pyproject::tests::test_parse_poetry_with_python_constraint ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_oversized_marker_skips_normalization ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_source_reference_with_no_matching_entry_fails_closed ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_explicit_source_via_dependency_key ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_marker_with_non_ascii ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_multiple_primary_sources_keeps_first ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_empty_marker_after_semicolon ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_no_space_around_equals ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_marker_with_escaped_quotes ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_quoted_key ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_with_invalid_marker_suffix_falls_back_to_raw ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_version_range_without_marker ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_without_marker_stays_none ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_marker_parse_failure_redacts_credential ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_with_marker_suffix_normalized ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_string_form_oversized_marker_skips_normalization ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_supplemental_priority_is_extra_not_primary ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_empty_markers_becomes_none ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_invalid_markers_falls_back_to_raw ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_chained_comparison_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_named_source_blocked_by_policy_populates_blocked_registries ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_marker_extras_bracket_injection_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_oversized_garbage_under_length_cap_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_oversized_marker_skips_normalization ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_markers_normalized ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_repeated_token_no_operator_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_deeply_nested_marker_skips_normalization ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_oversized_non_marker_text_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_trivially_true_marker_becomes_none ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_without_markers_key_has_no_markers ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_unsupported_format_redacts_key_shaped_as_url ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_plain_entry_is_automatic_extra ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_table_form_unbalanced_parens_rejected ... ok
[INFO] [stdout] test parser::pyproject::tests::test_poetry_unlabeled_source_is_primary ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_sources_index_binding_normalizes_name_mismatch ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_default_entry_is_last_resort_not_primary ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_explicit_entry_named_source_only ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_sources_index_binding_works_for_non_explicit_entry ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_sources_non_index_shapes_have_no_routing_effect ... ok
[INFO] [stdout] test parser::pyproject::tests::test_version_range_for_code_actions ... ok
[INFO] [stdout] test parser::pyproject::tests::test_uv_sources_dependency_key_normalizes_name_mismatch ... ok
[INFO] [stdout] test parser::pyproject::tests::test_version_range_with_space_before_specifier ... ok
[INFO] [stdout] test parser::pyproject::tests::test_version_range_position_without_space ... ok
[INFO] [stdout] test parser::pyproject::tests::test_position_tracking_pep735 ... ok
[INFO] [stdout] test parser::requirements::tests::test_basic_pinned ... ok
[INFO] [stdout] test parser::requirements::tests::test_bare_name_no_specifier ... ok
[INFO] [stdout] test parser::pyproject::tests::test_position_tracking_with_extras ... ok
[INFO] [stdout] test parser::requirements::tests::test_compound_marker_on_line ... ok
[INFO] [stdout] test parser::requirements::tests::test_constraints_txt_parses_identically ... ok
[INFO] [stdout] test parser::requirements::tests::test_basic_range ... ok
[INFO] [stdout] test parser::requirements::tests::test_deeply_nested_marker_on_line_skips_normalization ... ok
[INFO] [stdout] test parser::requirements::tests::test_document_links_ignores_unrelated_options ... ok
[INFO] [stdout] test parser::requirements::tests::test_document_links_long_form_equals_separated ... ok
[INFO] [stdout] test parser::pyproject::tests::test_version_range_position_with_space ... ok
[INFO] [stdout] test parser::requirements::tests::test_document_links_range_slices_to_target_text_only ... ok
[INFO] [stdout] test parser::requirements::tests::test_bom_on_first_line ... ok
[INFO] [stdout] test parser::requirements::tests::test_document_links_short_form ... ok
[INFO] [stdout] test parser::requirements::tests::test_document_links_long_form_space_separated ... ok
[INFO] [stdout] test parser::requirements::tests::test_dotted_source_name_version_range ... ok
[INFO] [stdout] test parser::requirements::tests::test_empty_file ... ok
[INFO] [stdout] test parser::requirements::tests::test_document_links_bare_option_with_no_target_is_skipped ... ok
[INFO] [stdout] test parser::requirements::tests::test_extra_index_url_equals_multi_option_line_does_not_swallow_trailing_options ... ok
[INFO] [stdout] test parser::requirements::tests::test_credential_free_parse_failure_still_reports_a_useful_reason ... ok
[INFO] [stdout] test parser::requirements::tests::test_extra_index_url_alone_routes_through_chain ... ok
[INFO] [stdout] test parser::requirements::tests::test_crlf_line_endings_positions_correct ... ok
[INFO] [stdout] test parser::requirements::tests::test_extra_index_url_equals_spelling ... ok
[INFO] [stdout] test parser::requirements::tests::test_extract_option_target_equals_separated_stops_at_next_option ... ok
[INFO] [stdout] test parser::requirements::tests::test_garbage_line_skipped_surrounding_lines_parse ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_bare_less_than_digit_is_strong_signal ... ok
[INFO] [stdout] test parser::requirements::tests::test_file_of_only_comments ... ok
[INFO] [stdout] test parser::requirements::tests::test_extract_option_target_space_separated_stops_at_next_option ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_drops_prose_file ... ok
[INFO] [stdout] test parser::requirements::tests::test_extras ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_email_in_prose_does_not_defeat_gate ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_keeps_unpinned_hand_written_file ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_option_only_file_no_panic ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_survives_mid_typing_edit ... ok
[INFO] [stdout] test parser::requirements::tests::test_git_sourced_dependency_untouched_by_index_config ... ok
[INFO] [stdout] test parser::requirements::tests::test_hash_in_url_fragment_not_cut ... ok
[INFO] [stdout] test parser::requirements::tests::test_indented_line_position ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_after_bom_on_first_line_still_captured ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_after_dependency_line_still_routes_it ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_blocked_by_policy_populates_blocked_registries ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_equals_spelling ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_invalid_populates_rejected_registries ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_multi_option_line_does_not_swallow_trailing_options ... ok
[INFO] [stdout] test parser::requirements::tests::test_inline_hash_single_line_nulls_version_range ... ok
[INFO] [stdout] test parser::requirements::tests::test_invalid_index_url_fails_closed ... ok
[INFO] [stdout] test parser::requirements::tests::test_last_line_no_trailing_newline ... ok
[INFO] [stdout] test parser::requirements::tests::test_malformed_package_name_rejected_by_pep508_precheck ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_and_joined_repeated_token_no_operator_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_chained_comparison_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_hash_with_no_preceding_whitespace_not_cut ... ok
[INFO] [stdout] test parser::requirements::tests::test_index_url_routes_every_dependency ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_chained_in_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_full_line_comment ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_keyword_padded_with_unquoted_garbage_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_named_direct_reference_kept ... ok
[INFO] [stdout] test parser::requirements::tests::test_no_index_declaration_is_plain_registry ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_extras_bracket_injection_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_non_hash_continuation_still_nulls_version_range ... ok
[INFO] [stdout] test parser::requirements::tests::test_option_lines_equals_form_recognized ... ok
[INFO] [stdout] test parser::requirements::tests::test_option_lines_skipped_not_failures ... ok
[INFO] [stdout] test parser::requirements::tests::test_oversized_in_operator_marker_still_normalizes ... ok
[INFO] [stdout] test parser::requirements::tests::test_gate_markdown_bullets_are_failures_not_prose_survivors ... ok
[INFO] [stdout] test parser::requirements::tests::test_oversized_marker_on_line_skips_normalization ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_on_line ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_keyword_repeated_without_separators_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_marker_repeated_token_no_operator_rejected ... ok
[INFO] [stdout] test parser::requirements::tests::test_parse_failure_redacts_credential_embedded_in_pep508_error_display ... ok
[INFO] [stdout] test parser::requirements::tests::test_requirement_length_boundary ... ok
[INFO] [stdout] test parser::requirements::tests::test_position_after_non_ascii_comment ... ok
[INFO] [stdout] test parser::requirements::tests::test_quoted_marker_hash_mis_cut_matches_pip ... ok
[INFO] [stdout] test parser::requirements::tests::test_requirement_ref_debug_redacts_credentials::debug_redaction_conformance ... ok
[INFO] [stdout] test parser::requirements::tests::test_pep508_rs_panic_on_malformed_extra_name_is_caught ... ok
[INFO] [stdout] test parser::requirements::tests::test_pip_compile_continuation_with_hashes ... ok
[INFO] [stdout] test parser::requirements::tests::test_short_dash_i_alias ... ok
[INFO] [stdout] test parser::requirements::tests::test_skipped_bare_url ... ok
[INFO] [stdout] test parser::requirements::tests::test_skipped_local_paths ... ok
[INFO] [stdout] test parser::requirements::tests::test_spaced_extras_and_spaced_operator_version_range ... ok
[INFO] [stdout] test parser::requirements::tests::test_spaced_extras_version_range ... ok
[INFO] [stdout] test parser::requirements::tests::test_spaces_around_operator ... ok
[INFO] [stdout] test parser::requirements::tests::test_strict_gate_drops_prose_that_would_survive_ratio_gate ... ok
[INFO] [stdout] test parser::requirements::tests::test_strict_gate_still_keeps_file_with_real_pip_option ... ok
[INFO] [stdout] test parser::requirements::tests::test_strict_gate_still_keeps_file_with_version_specifier ... ok
[INFO] [stdout] test parser::requirements::tests::test_trailing_comment ... ok
[INFO] [stdout] test parser::requirements::tests::test_unrelated_known_option_does_not_affect_routing ... ok
[INFO] [stdout] test parser::truncate_for_log_tests::benign_colon_shaped_values_survive_unredacted ... ok
[INFO] [stdout] test parser::truncate_for_log_tests::credential_shaped_values_still_redact_through_the_gate ... ok
[INFO] [stdout] test parser::truncate_for_log_tests::oversized_len_annotation_reports_original_not_redacted_length ... ok
[INFO] [stdout] test parser::truncate_for_log_tests::short_credential_free_input_is_borrowed_unchanged ... ok
[INFO] [stdout] test parser::truncate_for_log_tests::userinfo_credential_is_redacted ... ok
[INFO] [stdout] test registry::tests::pypi_package_info_json_depth_conformance::json_nesting_at_max_depth_accepted ... ok
[INFO] [stdout] test registry::tests::pypi_package_info_json_depth_conformance::json_nesting_over_max_depth_rejected ... ok
[INFO] [stdout] test registry::tests::pypi_simple_api_json_depth_conformance::json_nesting_at_max_depth_accepted ... ok
[INFO] [stdout] test registry::tests::pypi_simple_api_json_depth_conformance::json_nesting_over_max_depth_rejected ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_absent_upload_time_is_none ... ok
[INFO] [stdout] test parser::requirements::tests::test_tilde_equal ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_any_file_yanked_marks_version_yanked ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_disambiguates_in_both_directions ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_disambiguates_version_prefixes ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_ignores_platform_tag_false_match ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_malformed_upload_time_is_none ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_pep440_underscore_normalization ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_pre_post_dev_suffixes ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_skips_non_conforming_filename_instead_of_guessing ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_takes_maximum_upload_time ... ok
[INFO] [stdout] test registry::tests::test_build_version_metadata_uses_fast_path_not_quadratic_fallback ... ok
[INFO] [stdout] test parser::pyproject::tests::test_pep621_oversized_extras_list_rejected_fast ... ok
[INFO] [stdout] test registry::tests::test_alternate_client_only_meaningful_on_root ... ok
[INFO] [stdout] test registry::tests::pypi_registry_conformance::select_latest_matching_not_default_none ... ok
[INFO] [stdout] test registry::tests::test_get_latest_matching_bad_req_error_message_is_sanitized ... ok
[INFO] [stdout] test registry::tests::test_case_b_extra_wins_over_implicit_public_request_count_asserted ... ok
[INFO] [stdout] test registry::tests::test_case_b_falls_through_to_implicit_public_when_extra_misses ... ok
[INFO] [stdout] test parser::requirements::tests::test_oversized_extras_list_rejected_fast ... ok
[INFO] [stdout] test registry::tests::test_get_package_metadata_empty_normalized_name_logs_warn_rejected_value ... ok
[INFO] [stdout] test registry::tests::test_get_package_metadata_on_workspace_declared_tier_issues_no_request ... ok
[INFO] [stdout] test registry::tests::test_get_versions_chained_falls_through_on_empty_listing ... ok
[INFO] [stdout] test parser::requirements::tests::test_oversized_line_rejection_does_not_count_as_failed_line ... ok
[INFO] [stdout] test registry::tests::test_get_package_metadata_empty_normalized_name_short_circuits ... ok
[INFO] [stdout] test registry::tests::test_get_latest_matching_from_alternate_registry_happy_path ... ok
[INFO] [stdout] test registry::tests::test_get_versions_empty_normalized_name_logs_warn_rejected_value ... ok
[INFO] [stdout] test registry::tests::test_metadata_url_dot_segment_sweep ... ok
[INFO] [stdout] test registry::tests::test_metadata_url_encodes_malicious_name ... ok
[INFO] [stdout] test registry::tests::test_not_found_or_maps_404_to_package_not_found ... ok
[INFO] [stdout] test registry::tests::test_not_found_or_passes_through_non_404 ... ok
[INFO] [stdout] test registry::tests::test_package_url ... ok
[INFO] [stdout] test registry::tests::test_package_url_accepted_logs_no_warn ... ok
[INFO] [stdout] test registry::tests::test_package_url_empty_name ... ok
[INFO] [stdout] test registry::tests::test_package_url_empty_normalized_name_logs_warn_rejected_value ... ok
[INFO] [stdout] test registry::tests::test_package_url_encodes_malicious_name ... ok
[INFO] [stdout] test registry::tests::test_package_url_encoding ... ok
[INFO] [stdout] test registry::tests::test_package_url_normalization ... ok
[INFO] [stdout] test registry::tests::test_package_url_normalizes_to_empty ... ok
[INFO] [stdout] test registry::tests::test_parse_package_info ... ok
[INFO] [stdout] test registry::tests::test_parse_simple_api_response ... ok
[INFO] [stdout] test registry::tests::test_parse_simple_api_response_with_malformed_upload_time ... ok
[INFO] [stdout] test registry::tests::test_parse_simple_api_response_with_upload_time ... ok
[INFO] [stdout] test registry::tests::test_parse_simple_api_response_without_upload_time ... ok
[INFO] [stdout] test registry::tests::test_parse_simple_api_response_yanked_with_reason_string ... ok
[INFO] [stdout] test registry::tests::test_parse_version_from_filename_dotted_and_underscored_project_name ... ok
[INFO] [stdout] test registry::tests::test_parse_version_from_filename_no_digit_run_confusion ... ok
[INFO] [stdout] test registry::tests::test_parse_version_from_filename_rejects_non_conforming ... ok
[INFO] [stdout] test registry::tests::test_parse_version_from_filename_wheel_and_sdist ... ok
[INFO] [stdout] test registry::tests::test_prerelease_detection ... ok
[INFO] [stdout] test registry::tests::test_get_versions_chained_terminates_on_transport_error_never_tries_next_hop ... ok
[INFO] [stdout] test registry::tests::test_get_versions_chained_falls_through_on_package_not_found ... ok
[INFO] [stdout] test registry::tests::test_get_latest_matching_from_alternate_forwards_selection_context ... ok
[INFO] [stdout] test registry::tests::test_get_versions_empty_normalized_name_short_circuits ... ok
[INFO] [stdout] test registry::tests::test_implicit_public_hop_does_not_create_reference_cycle ... ok
[INFO] [stdout] test registry::tests::test_register_alternate_idempotent ... ok
[INFO] [stdout] test registry::tests::test_get_versions_from_unregistered_alternate_never_falls_back ... ok
[INFO] [stdout] test registry::tests::test_register_alternate_empty_hops_is_noop ... ok
[INFO] [stdout] test registry::tests::test_get_versions_from_case_a_primary_wins ... ok
[INFO] [stdout] test registry::tests::test_register_alternate_redacts_query_credential_for_named_source_on_cap_reached ... ok
[INFO] [stdout] test registry::tests::test_register_alternate_capacity_cap ... ok
[INFO] [stdout] test registry::tests::test_register_alternate_implicit_public_fallback_hop_shape ... ok
[INFO] [stdout] test registry::tests::test_search_empty_query_returns_empty_without_building_index ... ok
[INFO] [stdout] test registry::tests::test_simple_api_url_dot_segment_sweep ... ok
[INFO] [stdout] test registry::tests::test_simple_api_url_encodes_malicious_name ... ok
[INFO] [stdout] test registry::tests::test_search_on_workspace_declared_tier_issues_no_request ... ok
[INFO] [stdout] test registry::tests::test_simple_api_url_normal_names ... ok
[INFO] [stdout] test registry::tests::test_select_latest_matching_all_yanked_returns_newest_yanked ... ok
[INFO] [stdout] test registry::tests::test_select_latest_matching_excludes_unhyphenated_prerelease ... ok
[INFO] [stdout] test registry::tests::test_wildcard_specifier_normalization ... ok
[INFO] [stdout] test registry::tests::test_select_latest_matching_all_prerelease_returns_newest_prerelease ... ok
[INFO] [stdout] test search::tests::test_backoff_for_caps_at_max ... ok
[INFO] [stdout] test search::tests::test_backoff_for_matches_spec ... ok
[INFO] [stdout] test search::tests::test_backoff_for_never_overflows_shift_for_huge_attempts ... ok
[INFO] [stdout] test registry::tests::test_three_hop_chain_falls_through_to_third_hop ... ok
[INFO] [stdout] test registry::tests::test_transport_error_logs_distinguishable_diagnostic ... ok
[INFO] [stdout] test search::tests::test_index_cell_failed_respects_backoff_then_allows_retry ... ok
[INFO] [stdout] test search::tests::test_index_cell_ready_after_set_ready_never_needs_attempt_again ... ok
[INFO] [stdout] test search::tests::test_index_cell_starts_not_built_and_needs_attempt ... ok
[INFO] [stdout] test search::tests::test_live_pypi_simple_index_parses_and_contains_requests ... ignored, requires network access
[INFO] [stdout] test search::tests::test_parse_index_empty_projects ... ok
[INFO] [stdout] test search::tests::test_parse_index_escaped_name_survives ... ok
[INFO] [stdout] test search::tests::test_parse_index_malformed_json ... ok
[INFO] [stdout] test search::tests::test_parse_index_nesting_at_max_depth_accepted ... ok
[INFO] [stdout] test search::tests::test_parse_index_nesting_over_max_depth_rejected ... ok
[INFO] [stdout] test search::tests::test_parse_index_normalizes_sorts_and_dedupes ... ok
[INFO] [stdout] test search::tests::test_parse_index_rejects_oversized_raw_name_before_normalizing ... ok
[INFO] [stdout] test registry::tests::test_with_base_fetches_configured_host_not_pypi_org ... ok
[INFO] [stdout] test search::tests::test_parse_index_trailing_separator_pinning ... ok
[INFO] [stdout] test search::tests::test_parse_index_rejects_unsafe_names ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_alphabetical_order_and_limit ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_case_and_separator_insensitive_query ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_empty_prefix ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_limit_zero ... ok
[INFO] [stdout] test registry::tests::test_warm_search_index_on_workspace_declared_tier_issues_no_request ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_multi_byte_prefix ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_past_last_entry ... ok
[INFO] [stdout] test search::tests::test_ensure_index_built_failure_then_backoff_then_retry ... ok
[INFO] [stdout] test types::tests::test_dependency_section_variants ... ok
[INFO] [stdout] test types::tests::test_dependency_source_variants ... ok
[INFO] [stdout] test types::tests::test_package_url_fallbacks ... ok
[INFO] [stdout] test types::tests::test_pypi_dependency_creation ... ok
[INFO] [stdout] test search::tests::test_prefix_matches_matches_final_entry ... ok
[INFO] [stdout] test types::tests::test_pypi_package_creation ... ok
[INFO] [stdout] test types::tests::test_pypi_dependency_features_maps_to_extras ... ok
[INFO] [stdout] test types::tests::test_pypi_package_metadata_trait ... ok
[INFO] [stdout] test types::tests::test_pypi_version_creation ... ok
[INFO] [stdout] test types::tests::test_pypi_version_prerelease_detection ... ok
[INFO] [stdout] test types::tests::test_pypi_version_prerelease_detection_through_version_trait ... ok
[INFO] [stdout] test types::tests::test_pypi_version_trait ... ok
[INFO] [stdout] test search::tests::test_ensure_index_built_marks_implausibly_small_parse_as_failed ... ok
[INFO] [stdout] test registry::tests::test_search_cold_start_returns_empty_immediately ... ok
[INFO] [stdout] test registry::tests::test_search_no_match_returns_empty_once_index_is_ready ... ok
[INFO] [stdout] test registry::tests::test_search_finds_match_after_index_builds ... ok
[INFO] [stdout] test search::tests::test_trigger_index_build_single_flight_against_mock ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 452 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 2.77s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests deps_pypi
[INFO] [stdout] 
[INFO] [stdout] running 21 tests
[INFO] [stdout] test src/lib.rs - (line 38) - compile ... ok
[INFO] [stdout] test src/lib.rs - (line 61) - compile ... ok
[INFO] [stdout] test src/parser/requirements.rs - parser::requirements::PypiParser::parse_requirements (line 105) - compile ... ok
[INFO] [stdout] test src/registry.rs - registry::PypiRegistry::get_latest_matching (line 487) - compile ... ok
[INFO] [stdout] test src/registry.rs - registry::PypiRegistry::get_versions (line 432) - compile ... ok
[INFO] [stdout] test src/lockfile.rs - lockfile::PypiLockParser (line 65) - compile ... ok
[INFO] [stdout] test src/parser/mod.rs - parser::PypiParser (line 463) - compile ... ok
[INFO] [stdout] test src/parser/pyproject.rs - parser::pyproject::PypiParser::parse_content (line 75) - compile ... ok
[INFO] [stdout] test src/search.rs - search::backoff_for (line 110) ... ignored
[INFO] [stdout] test src/types.rs - types::PypiDependency (line 12) - compile ... ok
[INFO] [stdout] test src/registry.rs - registry::PypiRegistry (line 140) - compile ... ok
[INFO] [stdout] test src/registry.rs - registry::PypiRegistry::search (line 551) - compile ... ok
[INFO] [stdout] test src/name.rs - name::normalize (line 29) ... ok
[INFO] [stdout] test src/config.rs - config::PypiIndexUrl (line 72) ... ok
[INFO] [stdout] test src/types.rs - types::PypiPackage::new (line 293) ... ok
[INFO] [stdout] test src/types.rs - types::PypiPackage (line 258) ... ok
[INFO] [stdout] test src/types.rs - types::PypiDependencySection (line 74) ... ok
[INFO] [stdout] test src/types.rs - types::PypiVersion::yanked (line 175) ... ok
[INFO] [stdout] test src/types.rs - types::PypiVersion::available (line 154) ... ok
[INFO] [stdout] test src/types.rs - types::PypiVersion (line 119) ... ok
[INFO] [stdout] test src/types.rs - types::PypiVersion::is_prerelease (line 204) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 20 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 1.45s; merged doctests compilation took 1.41s
[INFO] running `Command { std: "docker" "inspect" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602", kill_on_drop: false }`
[INFO] [stdout] 9d27eb88b11ca15f0c5b5413d7ae41d58fca2d98a24432de22bdc5af140f9602
