[INFO] fetching crate fetchkit 0.2.0... [INFO] testing fetchkit-0.2.0 against beta-2026-04-21 for beta-1.96-1 [INFO] extracting crate fetchkit 0.2.0 into /workspace/builds/worker-4-tc2/source [INFO] started tweaking crates.io crate fetchkit 0.2.0 [INFO] removed 0 missing examples [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate fetchkit 0.2.0 [INFO] tweaked toml for crates.io crate fetchkit 0.2.0 written to /workspace/builds/worker-4-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate fetchkit 0.2.0 on toolchain beta-2026-04-21 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate fetchkit 0.2.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" "+beta-2026-04-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 1834d0138f1eeb42f4c9ea48e7eaf165a448a358a1ab2b827f30a326ff83e9f7 [INFO] running `Command { std: "docker" "start" "-a" "1834d0138f1eeb42f4c9ea48e7eaf165a448a358a1ab2b827f30a326ff83e9f7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "1834d0138f1eeb42f4c9ea48e7eaf165a448a358a1ab2b827f30a326ff83e9f7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1834d0138f1eeb42f4c9ea48e7eaf165a448a358a1ab2b827f30a326ff83e9f7", kill_on_drop: false }` [INFO] [stdout] 1834d0138f1eeb42f4c9ea48e7eaf165a448a358a1ab2b827f30a326ff83e9f7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] b4a89ec5390b47150bc88e4503254d272fa5ecdfd2cc8f39f9356f2f6646368e [INFO] running `Command { std: "docker" "start" "-a" "b4a89ec5390b47150bc88e4503254d272fa5ecdfd2cc8f39f9356f2f6646368e", kill_on_drop: false }` [INFO] [stderr] Compiling aws-lc-rs v1.16.2 [INFO] [stderr] Compiling http v1.4.0 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling simd-adler32 v0.3.9 [INFO] [stderr] Compiling mio v1.2.0 [INFO] [stderr] Compiling cc v1.2.58 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling brotli v8.0.2 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling ref-cast v1.0.25 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling serde_derive_internals v0.29.1 [INFO] [stderr] Compiling ref-cast-impl v1.0.25 [INFO] [stderr] Compiling iri-string v0.7.11 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling dyn-clone v1.0.20 [INFO] [stderr] Compiling miniz_oxide v0.8.9 [INFO] [stderr] Compiling tokio v1.50.0 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling flate2 v1.1.9 [INFO] [stderr] Compiling schemars_derive v1.2.1 [INFO] [stderr] Compiling http-body v1.0.1 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling cmake v0.1.58 [INFO] [stderr] Compiling aws-lc-sys v0.39.1 [INFO] [stderr] Compiling schemars v1.2.1 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling compression-codecs v0.4.37 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling async-compression v0.4.41 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling rustls v0.23.37 [INFO] [stderr] Compiling rustls-webpki v0.103.10 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling rustls-platform-verifier v0.6.2 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling reqwest v0.13.2 [INFO] [stderr] Compiling fetchkit v0.2.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 16s [INFO] running `Command { std: "docker" "inspect" "b4a89ec5390b47150bc88e4503254d272fa5ecdfd2cc8f39f9356f2f6646368e", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b4a89ec5390b47150bc88e4503254d272fa5ecdfd2cc8f39f9356f2f6646368e", kill_on_drop: false }` [INFO] [stdout] b4a89ec5390b47150bc88e4503254d272fa5ecdfd2cc8f39f9356f2f6646368e [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 5f385e45eb65c8f8971957cee2c961b12c4a9da2ec84799077f0c25e35fc4583 [INFO] running `Command { std: "docker" "start" "-a" "5f385e45eb65c8f8971957cee2c961b12c4a9da2ec84799077f0c25e35fc4583", kill_on_drop: false }` [INFO] [stderr] Compiling tokio v1.50.0 [INFO] [stderr] Compiling curve25519-dalek v4.1.3 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling curve25519-dalek-derive v0.1.1 [INFO] [stderr] Compiling num_cpus v1.17.0 [INFO] [stderr] Compiling signature v2.2.0 [INFO] [stderr] Compiling deadpool-runtime v0.1.4 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling rustls-platform-verifier v0.6.2 [INFO] [stderr] Compiling assert-json-diff v2.0.2 [INFO] [stderr] Compiling ed25519 v2.2.3 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling ed25519-dalek v2.2.0 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling async-compression v0.4.41 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling deadpool v0.12.3 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling tokio-test v0.4.5 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling wiremock v0.6.5 [INFO] [stderr] Compiling reqwest v0.13.2 [INFO] [stderr] Compiling fetchkit v0.2.0 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 50.30s [INFO] running `Command { std: "docker" "inspect" "5f385e45eb65c8f8971957cee2c961b12c4a9da2ec84799077f0c25e35fc4583", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5f385e45eb65c8f8971957cee2c961b12c4a9da2ec84799077f0c25e35fc4583", kill_on_drop: false }` [INFO] [stdout] 5f385e45eb65c8f8971957cee2c961b12c4a9da2ec84799077f0c25e35fc4583 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 93f94cd981d92ce4d4e0d4e7036572b37d6333ba4e52267d96a02cb71e27d8e8 [INFO] running `Command { std: "docker" "start" "-a" "93f94cd981d92ce4d4e0d4e7036572b37d6333ba4e52267d96a02cb71e27d8e8", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.36s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/fetchkit-cbbb41dee72f6c9b) [INFO] [stdout] [INFO] [stdout] running 253 tests [INFO] [stdout] test client::tests::test_batch_fetch_empty_input ... ok [INFO] [stdout] test client::tests::test_fetch_invalid_scheme ... ok [INFO] [stdout] test client::tests::test_fetch_empty_url ... ok [INFO] [stdout] test client::tests::test_validate_url_blocks_configured_host_and_port ... ok [INFO] [stdout] test client::tests::test_batch_fetch_respects_concurrency_limit ... ok [INFO] [stdout] test client::tests::test_validate_redirect_target_blocks_cross_host_when_enabled ... ok [INFO] [stdout] test convert::tests::test_clean_whitespace ... ok [INFO] [stdout] test client::tests::test_fetch_options_default ... ok [INFO] [stdout] test convert::tests::test_entity_decoding ... ok [INFO] [stdout] test convert::tests::test_extract_headings ... ok [INFO] [stdout] test convert::tests::test_extract_attribute ... ok [INFO] [stdout] test convert::tests::test_clean_whitespace_preserves_indentation ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_author ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_dates ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_description ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_language ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_time_element ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_canonical_url ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_empty_html ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_title ... ok [INFO] [stdout] test convert::tests::test_filter_excessive_newlines ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_code ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_full_page ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_definition_list ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_og_description_overrides ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_og_title_overrides ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_image_no_alt ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_expanded_entities ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_images ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_headers ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_emphasis ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_skips_script_content ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_links ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_nested_lists ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_ordered_list ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_link_no_text ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_paragraphs ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_smart_quotes ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_lists ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_skip_script ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_table ... ok [INFO] [stdout] test convert::tests::test_html_to_markdown_table_no_header ... ok [INFO] [stdout] test convert::tests::test_html_to_text_simple ... ok [INFO] [stdout] test convert::tests::test_html_to_text_skip_script ... ok [INFO] [stdout] test convert::tests::test_is_html_by_body ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_extracts_main ... ok [INFO] [stdout] test convert::tests::test_is_html_by_content_type ... ok [INFO] [stdout] test convert::tests::test_page_metadata_is_empty ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_extracts_article ... ok [INFO] [stdout] test convert::tests::test_is_plain_text_content_type ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_fallback_strips_nav_footer_aside ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_preserves_header_inside_main ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_role_main ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_nested_nav ... ok [INFO] [stdout] test dns::tests::test_carrier_grade_nat_blocked ... ok [INFO] [stdout] test dns::tests::test_6to4_ipv6_blocked ... ok [INFO] [stdout] test dns::tests::test_default_blocks_private ... ok [INFO] [stdout] test dns::tests::test_documentation_ranges_blocked ... ok [INFO] [stdout] test dns::tests::test_allow_all_permits_private ... ok [INFO] [stdout] test dns::tests::test_benchmarking_blocked ... ok [INFO] [stdout] test dns::tests::test_broadcast_blocked ... ok [INFO] [stdout] test convert::tests::test_is_markdown_content_type ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_role_navigation ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_main_takes_precedence_over_article ... ok [INFO] [stdout] test dns::tests::test_ipv4_compatible_ipv6_blocked ... ok [INFO] [stdout] test dns::tests::test_ipv6_link_local_blocked ... ok [INFO] [stdout] test dns::tests::test_ipv6_loopback_blocked ... ok [INFO] [stdout] test dns::tests::test_ipv6_mapped_ipv4_blocked ... ok [INFO] [stdout] test dns::tests::test_ipv6_multicast_blocked ... ok [INFO] [stdout] test dns::tests::test_ipv6_unique_local_blocked ... ok [INFO] [stdout] test dns::tests::test_ipv6_unspecified_blocked ... ok [INFO] [stdout] test dns::tests::test_link_local_blocked ... ok [INFO] [stdout] test dns::tests::test_loopback_blocked ... ok [INFO] [stdout] test dns::tests::test_multicast_blocked ... ok [INFO] [stdout] test dns::tests::test_private_10_blocked ... ok [INFO] [stdout] test dns::tests::test_private_172_blocked ... ok [INFO] [stdout] test dns::tests::test_private_192_168_blocked ... ok [INFO] [stdout] test dns::tests::test_public_ipv4_allowed ... ok [INFO] [stdout] test dns::tests::test_public_ipv6_allowed ... ok [INFO] [stdout] test dns::tests::test_resolve_allow_all_permits_loopback ... ok [INFO] [stdout] test dns::tests::test_resolve_loopback_blocked ... ok [INFO] [stdout] test dns::tests::test_resolve_private_blocked ... ok [INFO] [stdout] test dns::tests::test_unspecified_blocked ... ok [INFO] [stdout] test error::tests::test_error_messages ... ok [INFO] [stdout] test error::tests::test_tool_error_classification ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_extract_xml_attr ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_extract_xml_tag ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_parse_abs_url ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_parse_arxiv_response ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_parse_old_format ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_parse_pdf_url ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_parse_pdf_url_with_extension ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_rejects_non_arxiv ... ok [INFO] [stdout] test fetchers::arxiv::tests::test_rejects_non_paper_paths ... ok [INFO] [stdout] test convert::tests::test_extract_metadata_links ... ok [INFO] [stdout] test dns::tests::test_resolve_nonexistent_fails ... ok [INFO] [stdout] test fetchers::default::tests::test_count_words ... ok [INFO] [stdout] test fetchers::default::tests::test_default_fetcher_matches_all ... ok [INFO] [stdout] test fetchers::default::tests::test_detect_paywall ... ok [INFO] [stdout] test convert::tests::test_strip_boilerplate_no_semantic_html ... ok [INFO] [stdout] test fetchers::default::tests::test_parse_content_disposition_filename ... ok [INFO] [stdout] test fetchers::default::tests::test_extract_filename_from_url ... ok [INFO] [stdout] test fetchers::default::tests::test_is_binary_content_type ... ok [INFO] [stdout] test fetchers::default::tests::test_redirect_target_handles_relative_location ... ok [INFO] [stdout] test fetchers::default::tests::test_etag_returned_in_response ... ok [INFO] [stdout] test fetchers::docs_site::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::docs_site::tests::test_is_docs_site ... ok [INFO] [stdout] test fetchers::docs_site::tests::test_is_llms_txt_url ... ok [INFO] [stdout] test fetchers::github_code::tests::test_base64_decode ... ok [INFO] [stdout] test fetchers::github_code::tests::test_detect_language ... ok [INFO] [stdout] test fetchers::github_code::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::github_code::tests::test_format_file_response ... ok [INFO] [stdout] test fetchers::github_code::tests::test_parse_blob_url ... ok [INFO] [stdout] test fetchers::github_code::tests::test_parse_blob_url_nested_path ... ok [INFO] [stdout] test fetchers::github_code::tests::test_rejects_non_blob ... ok [INFO] [stdout] test fetchers::default::tests::test_redirect_target_rejects_non_http_location ... ok [INFO] [stdout] test client::tests::test_batch_fetch_partial_failure ... ok [INFO] [stdout] test fetchers::github_code::tests::test_rejects_non_github ... ok [INFO] [stdout] test fetchers::github_code::tests::test_rejects_too_few_segments ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_format_issue_response ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_format_pr_response ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_parse_issue_url ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_parse_pull_url ... ok [INFO] [stdout] test fetchers::github_code::tests::test_rejects_reserved_owner ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_rejects_non_github ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_rejects_non_issue_paths ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_rejects_non_numeric_number ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_rejects_wrong_segment_count ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_base64_decode ... ok [INFO] [stdout] test fetchers::github_issue::tests::test_rejects_reserved_owner ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_parse_github_url_too_few_segments ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_parse_github_url_too_many_segments ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_parse_github_url_valid ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_parse_github_url_with_trailing_slash ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_parse_github_url_wrong_host ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_parse_github_url_reserved_paths ... ok [INFO] [stdout] test fetchers::github_repo::tests::test_format_github_repo_response ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_format_hn_response ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_rejects_no_id ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_rejects_non_hn ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_rejects_non_item_path ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_strip_html_tags ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_parse_hn_url ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_parse_crates_io_url ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_parse_npm_scoped_url ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_parse_npm_url ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_parse_pypi_url ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_parse_pypi_url_with_version ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_rejects_non_package_paths ... ok [INFO] [stdout] test fetchers::rss_feed::tests::test_decode_entities ... ok [INFO] [stdout] test fetchers::rss_feed::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::default::tests::test_markdown_content_type_without_markdown_request_returns_raw ... ok [INFO] [stdout] test fetchers::rss_feed::tests::test_is_feed_url ... ok [INFO] [stdout] test fetchers::rss_feed::tests::test_parse_atom ... ok [INFO] [stdout] test fetchers::rss_feed::tests::test_parse_rss ... ok [INFO] [stdout] test fetchers::package_registry::tests::test_rejects_non_registry ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_format_qa_response ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::rss_feed::tests::test_strip_html ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_parse_stackoverflow_url ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_parse_stackexchange_url ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_parse_stackoverflow_url_no_slug ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_rejects_non_numeric_id ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_rejects_non_question_paths ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_rejects_non_se_sites ... ok [INFO] [stdout] test fetchers::tests::test_empty_registry ... ok [INFO] [stdout] test fetchers::tests::test_policy_prefix_matches_same_origin_and_path_boundary ... ok [INFO] [stdout] test fetchers::tests::test_policy_prefix_normalizes_case_default_port_and_trailing_dot ... ok [INFO] [stdout] test fetchers::tests::test_policy_prefix_rejects_lookalike_hosts ... ok [INFO] [stdout] test fetchers::tests::test_registry_with_defaults ... ok [INFO] [stdout] test fetchers::tests::test_url_prefix_case_normalization ... ok [INFO] [stdout] test fetchers::tests::test_url_prefix_port_handling ... ok [INFO] [stdout] test fetchers::tests::test_url_prefix_scheme_mismatch ... ok [INFO] [stdout] test fetchers::twitter::tests::test_expand_text_urls ... ok [INFO] [stdout] test fetchers::twitter::tests::test_expand_text_urls_no_entities ... ok [INFO] [stdout] test fetchers::twitter::tests::test_fetch_syndication_with_mock ... ok [INFO] [stdout] test fetchers::twitter::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_date ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_metrics ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_oembed_minimal_fields ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_oembed_response ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_syndication_article_tweet ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_syndication_minimal_fields ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_syndication_regular_tweet ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_syndication_with_media ... ok [INFO] [stdout] test fetchers::twitter::tests::test_format_syndication_with_quoted_tweet ... ok [INFO] [stdout] test fetchers::twitter::tests::test_parse_tweet_url_rejects_non_numeric_id ... ok [INFO] [stdout] test fetchers::stackoverflow::tests::test_parse_other_se_sites ... ok [INFO] [stdout] test fetchers::twitter::tests::test_parse_tweet_url_rejects_reserved_paths ... ok [INFO] [stdout] test fetchers::twitter::tests::test_parse_tweet_url_rejects_non_tweet_paths ... ok [INFO] [stdout] test fetchers::twitter::tests::test_parse_tweet_url_twitter_com ... ok [INFO] [stdout] test fetchers::twitter::tests::test_strip_html_tags ... ok [INFO] [stdout] test fetchers::wikipedia::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::wikipedia::tests::test_format_wikipedia_response ... ok [INFO] [stdout] test fetchers::wikipedia::tests::test_parse_other_language ... ok [INFO] [stdout] test fetchers::wikipedia::tests::test_parse_wikipedia_url ... ok [INFO] [stdout] test fetchers::twitter::tests::test_parse_tweet_url_rejects_wrong_host ... ok [INFO] [stdout] test fetchers::twitter::tests::test_parse_tweet_url_x_com ... ok [INFO] [stdout] test fetchers::wikipedia::tests::test_rejects_non_wiki_path ... ok [INFO] [stdout] test fetchers::wikipedia::tests::test_rejects_non_wikipedia ... ok [INFO] [stdout] test fetchers::youtube::tests::test_parse_youtube_no_www ... ok [INFO] [stdout] test fetchers::youtube::tests::test_parse_youtube_watch ... ok [INFO] [stdout] test fetchers::youtube::tests::test_parse_youtu_be ... ok [INFO] [stdout] test fetchers::youtube::tests::test_rejects_non_watch ... ok [INFO] [stdout] test fetchers::youtube::tests::test_rejects_non_youtube ... ok [INFO] [stdout] test fetchers::youtube::tests::test_fetcher_matches ... ok [INFO] [stdout] test fetchers::youtube::tests::test_rejects_no_v_param ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_no_base_requires_absolute ... ok [INFO] [stdout] test fetchers::default::tests::test_conditional_fetch_304_not_modified ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_reject_traversal_absolute ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_resolve_relative ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_resolve_subdirectory ... ok [INFO] [stdout] test fetchers::hackernews::tests::test_fetcher_matches ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_reject_traversal ... ok [INFO] [stdout] test file_saver::tests::test_normalize_path ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_no_base_accepts_absolute ... ok [INFO] [stdout] test tool::tests::test_build_service_propagates_validation_errors ... ok [INFO] [stdout] test tool::tests::test_execution_rejects_invalid_url_before_running ... ok [INFO] [stdout] test tool::tests::test_execution_rejects_unknown_parameter ... ok [INFO] [stdout] test fetchers::default::tests::test_skip_conversion_for_plain_text_content_type ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_validate_path ... ok [INFO] [stdout] test fetchers::default::tests::test_conditional_fetch_if_modified_since ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_save_and_read ... ok [INFO] [stdout] test file_saver::tests::test_local_file_saver_creates_parent_dirs ... ok [INFO] [stdout] test fetchers::default::tests::test_plain_text_content_type_without_text_request_returns_raw ... ok [INFO] [stdout] test fetchers::default::tests::test_no_redirect_chain_for_direct_response ... ok [INFO] [stdout] test fetchers::default::tests::test_no_paywall_for_normal_content ... ok [INFO] [stdout] test fetchers::default::tests::test_skip_conversion_for_markdown_content_type ... ok [INFO] [stdout] test tool::tests::test_tool_builder_opt_out_private_ip_blocking ... ok [INFO] [stdout] test tool::tests::test_tool_builder_security_defaults ... ok [INFO] [stdout] test tool::tests::test_tool_definition_uses_contract_metadata ... ok [INFO] [stdout] test tool::tests::test_tool_llmtxt_matches_help ... ok [INFO] [stdout] test tool::tests::test_tool_schema_feature_gating ... ok [INFO] [stdout] test types::tests::test_http_method_from_str ... ok [INFO] [stdout] test types::tests::test_request_builder ... ok [INFO] [stdout] test tool::tests::test_tool_status ... ok [INFO] [stdout] test tool::tests::test_tool_metadata ... ok [INFO] [stdout] test tool::tests::test_tool_schemas ... ok [INFO] [stdout] test types::tests::test_response_serialization ... ok [INFO] [stdout] test types::tests::test_http_method_display ... ok [INFO] [stdout] test types::tests::test_request_effective_method ... ok [INFO] [stdout] test tool::tests::test_tool_builder ... ok [INFO] [stdout] test tool::tests::test_tool_builder_hardened_profile ... ok [INFO] [stdout] test types::tests::test_request_serialization ... ok [INFO] [stdout] test client::tests::test_batch_fetch_multiple_urls ... ok [INFO] [stdout] test fetchers::default::tests::test_paywall_detection ... ok [INFO] [stdout] test fetchers::default::tests::test_redirect_chain_tracked ... ok [INFO] [stdout] test fetchers::default::tests::test_manual_redirect_following ... ok [INFO] [stdout] test fetchers::default::tests::test_word_count_in_response ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 253 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.69s [INFO] [stdout] [INFO] [stderr] Running tests/fetcher_live.rs (/opt/rustwide/target/debug/deps/fetcher_live-ec1507bb8298435a) [INFO] [stdout] [INFO] [stderr] Running tests/file_saver_safety.rs (/opt/rustwide/target/debug/deps/file_saver_safety-8323c6d61088958d) [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] [stdout] [INFO] [stdout] running 28 tests [INFO] [stdout] test test_description_reflects_save_enabled ... ok [INFO] [stdout] test test_path_traversal_absolute_escape ... ok [INFO] [stdout] test test_no_base_dir_requires_absolute ... ok [INFO] [stdout] test test_path_traversal_dotdot ... ok [INFO] [stdout] test test_local_file_saver_validate_then_save ... ok [INFO] [stdout] test test_local_file_saver_empty_filename ... ok [INFO] [stdout] test test_save_no_saver_errors ... ok [INFO] [stdout] test test_save_disabled_by_default ... ok [INFO] [stdout] test test_save_schema_gating_default_hidden ... ok [INFO] [stdout] test test_save_schema_gating_enabled_visible ... ok [INFO] [stdout] test test_save_respects_allow_list ... ok [INFO] [stdout] test test_save_respects_block_list ... ok [INFO] [stdout] test test_local_file_saver_large_write ... ok [INFO] [stdout] test test_save_head_request_no_body ... ok [INFO] [stdout] test test_save_connect_timeout_does_not_hang ... ok [INFO] [stdout] test test_save_filename_with_spaces ... ok [INFO] [stdout] test test_save_filename_unicode ... ok [INFO] [stdout] test test_path_traversal_null_bytes ... ok [INFO] [stdout] test test_save_http_500 ... ok [INFO] [stdout] test test_save_empty_body ... ok [INFO] [stdout] test test_save_via_default_fetch_to_file_trait_method ... ok [INFO] [stdout] test test_save_http_404 ... ok [INFO] [stdout] test test_save_deeply_nested_path ... ok [INFO] [stdout] test test_save_overwrites_existing_file ... ok [INFO] [stdout] test test_save_various_binary_types ... ok [INFO] [stdout] test test_concurrent_saves_dont_corrupt ... ok [INFO] [stdout] test test_save_slow_server_does_not_hang ... ok [INFO] [stdout] test test_save_binary_with_slow_response_truncated ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.42s [INFO] [stdout] [INFO] [stderr] Running tests/integration.rs (/opt/rustwide/target/debug/deps/integration-a1cb81382e92dda9) [INFO] [stdout] [INFO] [stdout] running 39 tests [INFO] [stdout] test test_fetcher_registry_allow_block_lists ... ok [INFO] [stdout] test test_fetch_blocks_loopback_by_default ... ok [INFO] [stdout] test test_fetcher_registry_url_validation ... ok [INFO] [stdout] test test_filename_from_url ... ok [INFO] [stdout] test test_fetcher_registry_allow_list_rejects_lookalike_host ... ok [INFO] [stdout] test test_html_to_markdown ... ok [INFO] [stdout] test test_invalid_url_scheme ... ok [INFO] [stdout] test test_missing_url ... ok [INFO] [stdout] test test_fetch_enables_conversions_by_default ... ok [INFO] [stdout] test test_binary_content ... ok [INFO] [stdout] test test_4xx_status ... ok [INFO] [stdout] test test_save_to_file_disabled_by_default ... ok [INFO] [stdout] test test_github_fetcher_url_matching ... ok [INFO] [stdout] test test_save_to_file_schema_gating ... ok [INFO] [stdout] test test_save_to_file_rejects_path_traversal ... ok [INFO] [stdout] test test_save_to_file_without_saver_errors ... ok [INFO] [stdout] test test_custom_user_agent ... ok [INFO] [stdout] test test_5xx_status ... ok [INFO] [stdout] test test_excessive_newlines_filtered ... ok [INFO] [stdout] test test_tool_default_blocks_loopback ... ok [INFO] [stdout] test test_head_request ... ok [INFO] [stdout] test test_save_to_file_binary_content ... ok [INFO] [stdout] test test_html_to_text ... ok [INFO] [stdout] test test_url_prefix_allow_list ... ok [INFO] [stdout] test test_url_prefix_block_list ... ok [INFO] [stdout] test test_save_to_file_creates_subdirectories ... ok [INFO] [stdout] test test_size_for_text_content ... ok [INFO] [stdout] test test_tool_service_executes_json_calls ... ok [INFO] [stdout] test test_tool_execution_returns_contract_output ... ok [INFO] [stdout] test test_save_to_file_text_content ... ok [INFO] [stdout] test test_entity_decoding_in_html ... ok [INFO] [stdout] test test_text_body_truncated_at_safety_limit ... ok [INFO] [stdout] test test_content_disposition_filename ... ok [INFO] [stdout] test test_simple_get ... ok [INFO] [stdout] test test_execute_with_saver_no_save_falls_through ... ok [INFO] [stdout] test test_fetch_with_options_respects_disabled_conversion ... ok [INFO] [stdout] test test_html_detection_by_body ... ok [INFO] [stdout] test test_non_html_with_conversion_flags ... ok [INFO] [stdout] test test_fetcher_registry_with_defaults ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 39 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.90s [INFO] [stdout] [INFO] [stderr] Running tests/proxy_env.rs (/opt/rustwide/target/debug/deps/proxy_env-4cc751cafad4a28d) [INFO] [stdout] [INFO] [stdout] running 1 test [INFO] [stdout] test test_proxy_env_is_ignored_by_default_but_can_be_enabled ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s [INFO] [stdout] [INFO] [stderr] Running tests/ssrf_security.rs (/opt/rustwide/target/debug/deps/ssrf_security-404e6bbcce211e6d) [INFO] [stdout] [INFO] [stdout] running 33 tests [INFO] [stdout] test test_hardened_profile_blocks_non_standard_ports ... ok [INFO] [stdout] test test_input_001_data_scheme_blocked ... ok [INFO] [stdout] test test_hardened_profile_blocks_internal_hostname_suffixes ... ok [INFO] [stdout] test test_input_001_file_scheme_blocked ... ok [INFO] [stdout] test test_default_blocks_loopback_mock_server ... ok [INFO] [stdout] test test_input_001_gopher_scheme_blocked ... ok [INFO] [stdout] test test_input_001_ftp_scheme_blocked ... ok [INFO] [stdout] test test_leak_001_request_error_variants_are_generic ... ok [INFO] [stdout] test test_ssrf_001_private_172_blocked ... ok [INFO] [stdout] test test_prefix_block_and_dns_policy_combined ... ok [INFO] [stdout] test test_ssrf_001_loopback_ipv4_blocked ... ok [INFO] [stdout] test test_ssrf_001_private_10_blocked ... ok [INFO] [stdout] test test_leak_001_timeout_and_connect_display_are_generic ... ok [INFO] [stdout] test test_ssrf_006_ipv6_loopback_blocked ... ok [INFO] [stdout] test test_ssrf_002_localhost_blocked ... ok [INFO] [stdout] test test_ssrf_003_link_local_blocked ... ok [INFO] [stdout] test test_ssrf_004_zero_ip_blocked ... ok [INFO] [stdout] test test_ssrf_001_loopback_ipv4_alt_blocked ... ok [INFO] [stdout] test test_ssrf_001_private_192_168_blocked ... ok [INFO] [stdout] test test_ssrf_010_redirect_to_loopback_blocked ... ok [INFO] [stdout] test test_ssrf_003_cloud_metadata_blocked ... ok [INFO] [stdout] test test_net_004_env_proxy_can_be_opted_in ... ok [INFO] [stdout] test test_ssrf_010_redirect_scheme_validation ... ok [INFO] [stdout] test test_dos_001_body_within_limit_not_truncated ... ok [INFO] [stdout] test test_conv_001_script_stripped_in_markdown ... ok [INFO] [stdout] test test_ssrf_010_same_host_redirect_policy_blocks_cross_host_redirect ... ok [INFO] [stdout] test test_explicit_opt_out_allows_loopback ... ok [INFO] [stdout] test test_input_007_subdomain_not_matched_by_host_prefix ... ok [INFO] [stdout] test test_conv_001_script_stripped_in_text ... ok [INFO] [stdout] test test_dos_001_body_size_limit ... ok [INFO] [stdout] test test_ssrf_010_redirect_followed_when_safe ... ok [INFO] [stdout] test test_ssrf_010_redirect_to_private_ip_blocked ... ok [INFO] [stdout] test test_net_004_env_proxy_ignored_by_default ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.71s [INFO] [stdout] [INFO] [stderr] Doc-tests fetchkit [INFO] [stdout] [INFO] [stdout] running 18 tests [INFO] [stdout] test src/client.rs - client::batch_fetch (line 171) - compile ... ok [INFO] [stdout] test src/client.rs - client::fetch (line 124) - compile ... ok [INFO] [stdout] test src/lib.rs - (line 23) - compile ... ok [INFO] [stdout] test src/lib.rs - (line 8) - compile ... ok [INFO] [stdout] test src/file_saver.rs - file_saver::LocalFileSaver (line 69) ... ok [INFO] [stdout] test src/types.rs - types::FetchRequest (line 55) ... ok [INFO] [stdout] test src/types.rs - types::FetchResponse (line 269) ... ok [INFO] [stdout] test src/dns.rs - dns::DnsPolicy (line 19) ... ok [INFO] [stdout] test src/convert.rs - convert::strip_boilerplate (line 890) ... ok [INFO] [stdout] test src/types.rs - types::HttpMethod (line 11) ... ok [INFO] [stdout] test src/error.rs - error::FetchError (line 9) ... ok [INFO] [stdout] test src/fetchers/mod.rs - fetchers::FetcherRegistry (line 103) ... ok [INFO] [stdout] test src/tool.rs - tool::ToolBuilder (line 105) ... ok [INFO] [stdout] test src/types.rs - types::PageLink (line 188) ... ok [INFO] [stdout] test src/convert.rs - convert::extract_metadata (line 605) ... ok [INFO] [stdout] test src/lib.rs - (line 43) ... ok [INFO] [stdout] test src/convert.rs - convert::html_to_markdown (line 47) ... ok [INFO] [stdout] test src/convert.rs - convert::html_to_text (line 346) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.49s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "93f94cd981d92ce4d4e0d4e7036572b37d6333ba4e52267d96a02cb71e27d8e8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "93f94cd981d92ce4d4e0d4e7036572b37d6333ba4e52267d96a02cb71e27d8e8", kill_on_drop: false }` [INFO] [stdout] 93f94cd981d92ce4d4e0d4e7036572b37d6333ba4e52267d96a02cb71e27d8e8