[INFO] cloning repository https://github.com/guitaripod/hinta
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/guitaripod/hinta" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fguitaripod%2Fhinta", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fguitaripod%2Fhinta'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 061678488bf54c1ab9d713388d87979762e68857
[INFO] testing guitaripod/hinta against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fguitaripod%2Fhinta" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/guitaripod/hinta
[INFO] finished tweaking git repo https://github.com/guitaripod/hinta
[INFO] tweaked toml for git repo https://github.com/guitaripod/hinta written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/guitaripod/hinta on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/guitaripod/hinta 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.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/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] 7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374
[INFO] running `Command { std: "docker" "start" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", 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" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", 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" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling siphasher v1.0.3
[INFO] [stderr]    Compiling rand v0.8.7
[INFO] [stderr]    Compiling cc v1.2.67
[INFO] [stderr]    Compiling mio v1.2.2
[INFO] [stderr]    Compiling new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling rustls-pki-types v1.15.0
[INFO] [stderr]    Compiling simd-adler32 v0.3.10
[INFO] [stderr]    Compiling brotli-decompressor v5.0.3
[INFO] [stderr]    Compiling zerocopy v0.8.54
[INFO] [stderr]    Compiling precomputed-hash v0.1.1
[INFO] [stderr]    Compiling rustls v0.23.42
[INFO] [stderr]    Compiling mac v0.1.1
[INFO] [stderr]    Compiling dtoa v1.0.11
[INFO] [stderr]    Compiling futf v0.1.5
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling compression-core v0.4.32
[INFO] [stderr]    Compiling tendril v0.4.3
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling dtoa-short v0.3.5
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]    Compiling psl-types v2.0.11
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling foldhash v0.1.5
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling fxhash v0.2.1
[INFO] [stderr]    Compiling webpki-roots v1.0.8
[INFO] [stderr]    Compiling cookie v0.18.1
[INFO] [stderr]    Compiling servo_arc v0.4.3
[INFO] [stderr]    Compiling http-body-util v0.1.4
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling anyhow v1.0.103
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]    Compiling string_cache_codegen v0.5.4
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling selectors v0.26.0
[INFO] [stderr]    Compiling brotli v8.0.4
[INFO] [stderr]    Compiling clap_builder v4.6.2
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling markup5ever v0.14.1
[INFO] [stderr]    Compiling hashlink v0.10.0
[INFO] [stderr]    Compiling thread_local v1.1.10
[INFO] [stderr]    Compiling ego-tree v0.10.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling libsqlite3-sys v0.32.0
[INFO] [stderr]    Compiling regex-automata v0.4.16
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling compression-codecs v0.4.38
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling tokio-macros v2.7.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling phf_macros v0.11.3
[INFO] [stderr]    Compiling cssparser-macros v0.6.1
[INFO] [stderr]    Compiling tokio v1.53.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling match_token v0.1.0
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling phf v0.11.3
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling cssparser v0.34.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling clap v4.6.2
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling string_cache v0.8.9
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling html5ever v0.29.1
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling publicsuffix v2.3.0
[INFO] [stderr]    Compiling scraper v0.22.0
[INFO] [stderr]    Compiling cookie_store v0.22.1
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling async-compression v0.4.42
[INFO] [stderr]    Compiling h2 v0.4.15
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling rusqlite v0.34.0
[INFO] [stderr]    Compiling hinta v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> Cargo.toml:16:1
[INFO] [stderr]    |
[INFO] [stderr] 16 | thiserror = "2"
[INFO] [stderr]    | ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: `hinta` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 3m 44s
[INFO] running `Command { std: "docker" "inspect" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", 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" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling hinta v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> Cargo.toml:16:1
[INFO] [stderr]    |
[INFO] [stderr] 16 | thiserror = "2"
[INFO] [stderr]    | ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: `hinta` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 23.36s
[INFO] running `Command { std: "docker" "inspect" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", 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" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> Cargo.toml:16:1
[INFO] [stderr]    |
[INFO] [stderr] 16 | thiserror = "2"
[INFO] [stderr]    | ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: `hinta` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.38s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/hinta/ed73e589c7db528f/out/hinta-ed73e589c7db528f)
[INFO] [stdout] 
[INFO] [stdout] running 183 tests
[INFO] [stdout] test http::tests::backoff_grows_exponentially ... ok
[INFO] [stdout] test http::tests::backoff_is_clamped_to_max_delay ... ok
[INFO] [stdout] test http::tests::retryable_covers_rate_limiting_but_not_challenges ... ok
[INFO] [stdout] test matching::tests::a_merge_pass_never_joins_clusters_that_conflict ... ok
[INFO] [stdout] test matching::tests::a_matching_ean_still_wins_over_the_variant_heuristic ... ok
[INFO] [stdout] test http::tests::backoff_jitter_halves_the_delay_at_the_low_end ... ok
[INFO] [stdout] test http::tests::parse_retry_after_reads_delay_seconds ... ok
[INFO] [stdout] test http::tests::retry_after_overrides_computed_backoff_but_respects_the_cap ... ok
[INFO] [stdout] test matching::tests::a_lone_listing_still_forms_a_group ... ok
[INFO] [stdout] test matching::tests::a_noop_filter_keeps_everything_untouched ... ok
[INFO] [stdout] test matching::tests::a_shared_placeholder_ean_does_not_force_a_merge ... ok
[INFO] [stdout] test http::tests::browser_headers_carry_client_hints ... ok
[INFO] [stdout] test matching::tests::a_shared_platform_code_alone_does_not_merge_different_product_types ... ok
[INFO] [stdout] test matching::tests::actual_televisions_are_classified_as_devices ... ok
[INFO] [stdout] test matching::tests::a_terabyte_never_merges_with_a_differently_sized_drive_across_languages ... ok
[INFO] [stdout] test matching::tests::a_size_filter_excludes_listings_that_state_no_size ... ok
[INFO] [stdout] test matching::tests::bus_and_form_factor_noise_does_not_split_one_drive_across_retailers ... ok
[INFO] [stdout] test matching::tests::different_capacities_never_merge ... ok
[INFO] [stdout] test matching::tests::different_models_of_one_line_never_merge ... ok
[INFO] [stdout] test matching::tests::different_product_lines_of_one_family_never_merge ... ok
[INFO] [stdout] test matching::tests::differing_eans_are_incompatible_even_with_identical_names ... ok
[INFO] [stdout] test matching::tests::finnish_capacity_units_normalize_onto_the_english_scale ... ok
[INFO] [stdout] test matching::tests::filters_narrow_by_price_stock_size_and_kind ... ok
[INFO] [stdout] test matching::tests::fold_text_normalizes_finnish_diacritics ... ok
[INFO] [stdout] test matching::tests::graphics_card_tiers_never_merge ... ok
[INFO] [stdout] test matching::tests::grouping_does_not_depend_on_the_order_retailers_reply_in ... ok
[INFO] [stdout] test matching::tests::installation_offerings_are_classified_as_services ... ok
[INFO] [stdout] test matching::tests::a_verbose_listing_still_matches_a_terse_one ... ok
[INFO] [stdout] test matching::tests::grouping_keeps_capacity_variants_apart ... ok
[INFO] [stdout] test matching::tests::a_finnish_capacity_matches_the_same_size_written_in_english ... ok
[INFO] [stdout] test matching::tests::model_and_spec_tokens_are_separated ... ok
[INFO] [stdout] test matching::tests::normalize_ean_rejects_checksum_valid_placeholder_gtins ... ok
[INFO] [stdout] test matching::tests::normalize_ean_strips_formatting_and_rejects_short_junk ... ok
[INFO] [stdout] test matching::tests::identical_eans_match_regardless_of_naming ... ok
[INFO] [stdout] test matching::tests::stated_speeds_do_not_defeat_the_capacity_veto ... ok
[INFO] [stdout] test http::tests::parse_retry_after_ignores_unparseable_values ... ok
[INFO] [stdout] test matching::tests::unknown_stock_does_not_satisfy_an_in_stock_filter ... ok
[INFO] [stdout] test matching::tests::televisions_of_different_screen_sizes_never_merge ... ok
[INFO] [stdout] test matching::tests::attributes_expose_what_the_matcher_already_worked_out ... ok
[INFO] [stdout] test matching::tests::the_same_television_still_matches_across_notations ... ok
[INFO] [stdout] test matching::tests::the_heatsink_variant_is_kept_apart_from_the_plain_one ... ok
[INFO] [stdout] test matching::tests::tokenize_rejoins_spaced_capacities ... ok
[INFO] [stdout] test matching::tests::the_same_product_named_differently_matches_on_model_tokens ... ok
[INFO] [stdout] test matching::tests::unrelated_products_do_not_match ... ok
[INFO] [stdout] test matching::tests::grouping_an_empty_list_yields_nothing ... ok
[INFO] [stdout] test matching::tests::wall_mounts_and_cables_are_classified_as_accessories ... ok
[INFO] [stdout] test matching::tests::grouping_collapses_one_product_across_retailers ... ok
[INFO] [stdout] test matching::tests::grouping_does_not_chain_through_a_contradicting_ean ... ok
[INFO] [stdout] test matching::tests::groups_carry_the_richest_attributes_of_their_members ... ok
[INFO] [stdout] test matching::tests::heatsink_wording_is_recognised_whichever_compound_a_retailer_uses ... ok
[INFO] [stdout] test matching::tests::normalize_ean_validates_the_check_digit ... ok
[INFO] [stdout] test matching::tests::screen_sizes_normalize_across_every_notation_a_retailer_uses ... ok
[INFO] [stdout] test matching::tests::tokenize_splits_hyphenated_model_numbers ... ok
[INFO] [stdout] test mcp::tests::a_missing_required_argument_is_reported ... ok
[INFO] [stdout] test mcp::tests::an_unknown_method_returns_method_not_found ... ok
[INFO] [stdout] test sources::datatronic::tests::a_card_without_a_price_is_skipped ... ok
[INFO] [stdout] test mcp::tests::initialize_reports_the_protocol_and_server ... ok
[INFO] [stdout] test sources::datatronic::tests::an_empty_listing_yields_nothing ... ok
[INFO] [stdout] test sources::datatronic::tests::extracts_the_id_from_both_url_shapes ... ok
[INFO] [stdout] test sources::datatronic::tests::falls_back_to_microdata_when_json_ld_is_absent ... ok
[INFO] [stdout] test mcp::tests::an_alert_needs_a_positive_target_price ... ok
[INFO] [stdout] test sources::datatronic::tests::parses_a_search_card ... ok
[INFO] [stdout] test sources::datatronic::tests::ignores_breadcrumb_itemprop_name_and_reads_the_product_title ... ok
[INFO] [stdout] test mcp::tests::a_failing_tool_is_marked_as_an_error_in_the_content ... ok
[INFO] [stdout] test sources::datatronic::tests::reads_an_out_of_stock_phrase ... ok
[INFO] [stdout] test sources::datatronic::tests::limit_truncates_the_card_list ... ok
[INFO] [stdout] test sources::gigantti::tests::a_page_without_json_ld_yields_nothing ... ok
[INFO] [stdout] test sources::datatronic::tests::stores_the_canonical_slug_url_rather_than_the_id_lookup_url ... ok
[INFO] [stdout] test mcp::tests::refresh_reports_alerts_that_have_been_reached ... ok
[INFO] [stdout] test mcp::tests::sources_tool_reports_capabilities_and_robots_status ... ok
[INFO] [stdout] test sources::gigantti::tests::extracts_the_id_from_a_product_url ... ok
[INFO] [stdout] test sources::gigantti::tests::detects_the_vercel_challenge ... ok
[INFO] [stdout] test sources::gigantti::tests::parses_the_product_page_json_ld ... ok
[INFO] [stdout] test mcp::tests::price_history_returns_recorded_points ... ok
[INFO] [stdout] test sources::gigantti::tests::search_reports_why_it_cannot_work ... ok
[INFO] [stdout] test sources::jimms::tests::a_missing_image_id_yields_no_image ... ok
[INFO] [stdout] test sources::jimms::tests::a_product_missing_its_id_is_skipped_rather_than_fatal ... ok
[INFO] [stdout] test sources::jimms::tests::an_empty_result_set_is_not_an_error ... ok
[INFO] [stdout] test mcp::tests::tools_list_advertises_every_tool_with_a_schema ... ok
[INFO] [stdout] test sources::jimms::tests::brand_is_not_prepended_twice ... ok
[INFO] [stdout] test sources::gigantti::tests::tolerates_a_non_numeric_sku_and_a_null_price ... ok
[INFO] [stdout] test sources::jimms::tests::an_error_payload_surfaces_the_message ... ok
[INFO] [stdout] test sources::jimms::tests::falls_back_to_the_h1_when_microdata_is_absent ... ok
[INFO] [stdout] test sources::jimms::tests::limit_is_honoured_client_side ... ok
[INFO] [stdout] test mcp::tests::alerts_round_trip_through_tool_calls ... ok
[INFO] [stdout] test mcp::tests::an_unknown_tool_is_rejected ... ok
[INFO] [stdout] test sources::jimms::tests::parses_the_search_payload ... ok
[INFO] [stdout] test mcp::tests::an_unknown_source_is_rejected ... ok
[INFO] [stdout] test sources::jimms::tests::parses_the_product_page_microdata_for_the_ean ... ok
[INFO] [stdout] test mcp::tests::stats_tool_summarises_the_database ... ok
[INFO] [stdout] test mcp::tests::tracking_round_trips_through_tool_calls ... ok
[INFO] [stdout] test sources::jimms::tests::extracts_the_id_from_a_product_url ... ok
[INFO] [stdout] test sources::jsonld::tests::extracts_a_product_from_a_graph_container ... ok
[INFO] [stdout] test sources::gigantti::tests::prefers_the_consumer_price_over_the_business_price ... ok
[INFO] [stdout] test sources::gigantti::tests::stores_the_canonical_url_from_the_payload ... ok
[INFO] [stdout] test mcp::tests::a_notification_is_never_answered ... ok
[INFO] [stdout] test mcp::tests::malformed_json_returns_a_parse_error ... ok
[INFO] [stdout] test sources::jimms::tests::uses_the_vat_inclusive_price ... ok
[INFO] [stdout] test sources::jsonld::tests::reads_a_single_offer_object_and_out_of_stock ... ok
[INFO] [stdout] test sources::jimms::tests::reads_the_real_page_shape_link_href_stock_img_src_and_h1_name ... ok
[INFO] [stdout] test sources::jsonld::tests::accepts_an_array_valued_type_and_brand_string ... ok
[INFO] [stdout] test sources::multitronic::tests::an_empty_result_fragment_yields_nothing ... ok
[INFO] [stdout] test sources::jsonld::tests::a_product_without_gtin_still_parses ... ok
[INFO] [stdout] test sources::multitronic::tests::a_card_without_a_machine_readable_price_is_skipped ... ok
[INFO] [stdout] test sources::jsonld::tests::reads_an_aggregate_offer_wrapper ... ok
[INFO] [stdout] test sources::multitronic::tests::extracts_the_id_from_a_product_url ... ok
[INFO] [stdout] test sources::jsonld::tests::survives_malformed_json_and_keeps_looking ... ok
[INFO] [stdout] test sources::jimms::tests::orderable_from_supplier_is_not_in_stock ... ok
[INFO] [stdout] test sources::multitronic::tests::a_product_without_a_gtin_still_parses ... ok
[INFO] [stdout] test sources::jsonld::tests::ignores_pages_without_a_product_node ... ok
[INFO] [stdout] test sources::multitronic::tests::limit_truncates_the_card_list ... ok
[INFO] [stdout] test sources::power::tests::extracts_the_id_from_a_product_url ... ok
[INFO] [stdout] test sources::multitronic::tests::reads_the_discounted_price_not_the_struck_through_one ... ok
[INFO] [stdout] test sources::power::tests::limit_truncates_the_result_set ... ok
[INFO] [stdout] test sources::power::tests::an_empty_product_array_is_not_found ... ok
[INFO] [stdout] test sources::power::tests::reads_the_stock_meta ... ok
[INFO] [stdout] test mcp::tests::refresh_with_nothing_tracked_does_no_work ... ok
[INFO] [stdout] test sources::power::tests::a_variantless_image_yields_no_url ... ok
[INFO] [stdout] test sources::multitronic::tests::parses_a_search_card ... ok
[INFO] [stdout] test sources::power::tests::parses_the_search_payload ... ok
[INFO] [stdout] test sources::power::tests::parses_the_single_product_array ... ok
[INFO] [stdout] test sources::proshop::tests::a_card_without_a_price_is_skipped ... ok
[INFO] [stdout] test sources::proshop::tests::reads_a_lazy_loaded_image ... ok
[INFO] [stdout] test sources::proshop::tests::reads_incoming_stock_as_out_of_stock ... ok
[INFO] [stdout] test sources::power::tests::picks_the_widest_image_variant ... ok
[INFO] [stdout] test sources::proshop::tests::parses_the_detail_page_json_ld_and_prefers_the_og_image ... ok
[INFO] [stdout] test sources::multitronic::tests::parses_the_detail_page_json_ld_for_the_ean ... ok
[INFO] [stdout] test sources::proshop::tests::an_empty_result_page_yields_nothing ... ok
[INFO] [stdout] test sources::multitronic::tests::reads_supplier_availability_as_out_of_stock ... ok
[INFO] [stdout] test sources::proshop::tests::reads_the_vat_inclusive_price_not_the_parenthesised_one ... ok
[INFO] [stdout] test sources::power::tests::an_empty_catalogue_response_is_not_an_error ... ok
[INFO] [stdout] test sources::proshop::tests::extracts_the_id_from_a_product_url ... ok
[INFO] [stdout] test sources::tests::sources_disallowed_by_robots_say_so_prominently ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::an_empty_product_array_is_not_found ... ok
[INFO] [stdout] test sources::proshop::tests::handles_a_non_breaking_space_thousands_separator ... ok
[INFO] [stdout] test sources::tests::every_info_entry_matches_its_source_metadata ... ok
[INFO] [stdout] test sources::proshop::tests::keeps_the_redirected_url_when_json_ld_omits_it ... ok
[INFO] [stdout] test sources::proshop::tests::parses_a_search_card ... ok
[INFO] [stdout] test sources::tests::searchable_sources_exclude_gigantti ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::extracts_the_id_from_a_product_url ... ok
[INFO] [stdout] test sources::tests::source_for_round_trips_every_variant ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::malformed_availability_degrades_to_unknown_rather_than_failing ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::limit_truncates_the_result_set ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::parses_the_availability_payload ... ok
[INFO] [stdout] test sources::tests::every_source_variant_is_registered ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::parses_the_single_product_payload ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::a_null_price_becomes_zero_rather_than_failing ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::resolves_the_brand_through_the_included_section ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::search_leaves_stock_unknown_until_availability_is_merged ... ok
[INFO] [stdout] test sources::verkkokauppa::tests::parses_the_json_api_search_payload ... ok
[INFO] [stdout] test store::tests::an_alert_on_a_product_with_no_price_yet_is_not_triggered ... ok
[INFO] [stdout] test sources::datatronic::tests::prefers_json_ld_on_the_product_page ... ok
[INFO] [stdout] test store::tests::setting_an_alert_twice_updates_the_target_rather_than_duplicating ... ok
[INFO] [stdout] test store::tests::a_price_change_appends_history ... ok
[INFO] [stdout] test sources::gigantti::tests::falls_back_to_the_requested_id_when_the_payload_has_no_sku ... ok
[INFO] [stdout] test store::tests::an_alert_triggers_once_the_price_reaches_the_target ... ok
[INFO] [stdout] test sources::proshop::tests::falls_back_to_the_url_id_when_the_basket_input_is_absent ... ok
[INFO] [stdout] test store::tests::a_stock_change_alone_appends_history ... ok
[INFO] [stdout] test store::tests::an_alert_triggers_exactly_at_the_target_price ... ok
[INFO] [stdout] test util::tests::absolute_url_resolves_every_href_shape ... ok
[INFO] [stdout] test transform::types::tests::every_source_round_trips_through_its_own_name ... ok
[INFO] [stdout] test store::tests::products_read_back_with_their_latest_price ... ok
[INFO] [stdout] test util::tests::parse_price_handles_english_formatting ... ok
[INFO] [stdout] test util::tests::parse_price_handles_finnish_formatting ... ok
[INFO] [stdout] test store::tests::a_repeated_sighting_at_the_same_price_adds_no_history ... ok
[INFO] [stdout] test util::tests::parse_price_keeps_single_and_double_decimals ... ok
[INFO] [stdout] test store::tests::setting_an_alert_also_starts_tracking_the_product ... ok
[INFO] [stdout] test util::tests::parse_price_reads_a_lone_separator_before_three_digits_as_thousands ... ok
[INFO] [stdout] test transform::types::tests::source_from_str_accepts_ids_domains_and_casing ... ok
[INFO] [stdout] test util::tests::duration_from_secs_rejects_non_finite_and_clamps ... ok
[INFO] [stdout] test transform::types::tests::source_from_str_rejects_unknown_names ... ok
[INFO] [stdout] test store::tests::search_matches_name_id_ean_and_sku ... ok
[INFO] [stdout] test store::tests::each_source_keeps_its_own_row_for_the_same_id ... ok
[INFO] [stdout] test util::tests::parse_price_rejects_junk ... ok
[INFO] [stdout] test store::tests::stats_break_down_by_source ... ok
[INFO] [stdout] test store::tests::clearing_an_alert_reports_whether_it_existed ... ok
[INFO] [stdout] test util::tests::parse_stock_phrase_reads_finnish_availability ... ok
[INFO] [stdout] test util::tests::urlencode_roundtrips_through_a_real_decoder ... ok
[INFO] [stdout] test util::tests::squeeze_whitespace_normalizes_nbsp_and_newlines ... ok
[INFO] [stdout] test util::tests::urlencode_preserves_finnish_characters_as_utf8_bytes ... ok
[INFO] [stdout] test store::tests::tracking_round_trips_and_reports_removal ... ok
[INFO] [stdout] test store::tests::upsert_keeps_previously_learned_identifiers ... ok
[INFO] [stdout] test store::tests::migrating_a_legacy_database_adds_the_sku_column ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 183 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/build/hinta/250d88cf780ebf81/out/hinta-250d88cf780ebf81)
[INFO] [stderr]      Running unittests src/mcp_bin.rs (/opt/rustwide/target/release/build/hinta/a4f9969830c7e576/out/hinta_mcp-a4f9969830c7e576)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests hinta
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374", kill_on_drop: false }`
[INFO] [stdout] 7dce9be0ad962b21ef86461e456b12b08700ce7d904573fd05f89ca0bf39b374
