[INFO] fetching crate devboy-storage 0.35.0...
[INFO] testing devboy-storage-0.35.0 against 1.99.0-beta.8+cargoflags=--release for beta-release-1.100-2
[INFO] extracting crate devboy-storage 0.35.0 into /workspace/builds/worker-5-tc1/source
[INFO] started tweaking crates.io crate devboy-storage 0.35.0
[INFO] finished tweaking crates.io crate devboy-storage 0.35.0
[INFO] tweaked toml for crates.io crate devboy-storage 0.35.0 written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate devboy-storage 0.35.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 devboy-storage 0.35.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 secret-service v4.0.0
[INFO] [stderr]   Downloaded zvariant_derive v4.2.0
[INFO] [stderr]   Downloaded zvariant_utils v2.1.0
[INFO] [stderr]   Downloaded xdg-home v1.3.0
[INFO] [stderr]   Downloaded zbus v4.4.0
[INFO] [stderr]   Downloaded zbus_names v3.0.0
[INFO] [stderr]   Downloaded libredox v0.1.21
[INFO] [stderr]   Downloaded zvariant v4.2.0
[INFO] [stderr]   Downloaded which v8.0.6
[INFO] [stderr]   Downloaded zbus_macros v4.4.0
[INFO] [stderr]   Downloaded dbus-secret-service v4.1.0
[INFO] [stderr]   Downloaded devboy-secret-patterns v0.35.0
[INFO] [stderr]   Downloaded dbus v0.9.12
[INFO] [stderr]   Downloaded devboy-core v0.35.0
[INFO] [stderr]   Downloaded quinn-proto v0.11.17
[INFO] [stderr]   Downloaded libdbus-sys v0.2.7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] 6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596
[INFO] running `Command { std: "docker" "start" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", 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" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596" "/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" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", 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" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v3.0.4
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling zeroize_derive v1.5.0
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling futures-core v0.3.34
[INFO] [stderr]    Compiling find-msvc-tools v0.1.11
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling cc v1.4.4
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling http v1.5.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling futures-task v0.3.34
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling num-integer v0.1.47
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling block-padding v0.3.3
[INFO] [stderr]    Compiling pkg-config v0.3.34
[INFO] [stderr]    Compiling http-body v1.1.0
[INFO] [stderr]    Compiling rustls v0.23.43
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling libdbus-sys v0.2.7
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling indexmap v2.14.1
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling num-bigint v0.4.8
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling ipnet v2.12.1
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling webpki-roots v1.0.9
[INFO] [stderr]    Compiling num-iter v0.1.46
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling num-complex v0.4.6
[INFO] [stderr]    Compiling log v0.4.34
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling anyhow v1.0.104
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling num-rational v0.4.2
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling num v0.4.3
[INFO] [stderr]    Compiling dbus v0.9.12
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling icu_provider v2.3.1
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling icu_properties v2.3.0
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling aes v0.8.4
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling cbc v0.1.2
[INFO] [stderr]    Compiling http-body-util v0.1.5
[INFO] [stderr]    Compiling fastrand v2.5.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling dbus-secret-service v4.1.0
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling regex v1.13.1
[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 secrecy v0.10.3
[INFO] [stderr]    Compiling async-trait v0.1.92
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling which v8.0.6
[INFO] [stderr]    Compiling devboy-secret-patterns v0.35.0
[INFO] [stderr]    Compiling keyring v3.6.3
[INFO] [stderr]    Compiling devboy-core v0.35.0
[INFO] [stderr]    Compiling devboy-storage v0.35.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 4m 56s
[INFO] running `Command { std: "docker" "inspect" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", 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" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596" "/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 futures-channel v0.3.34
[INFO] [stderr]    Compiling futures-macro v0.3.34
[INFO] [stderr]    Compiling bitflags v2.13.1
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling hyper v1.11.1
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling temp-env v0.3.6
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling devboy-secret-patterns v0.35.0
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling devboy-core v0.35.0
[INFO] [stderr]    Compiling devboy-storage v0.35.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 2m 19s
[INFO] running `Command { std: "docker" "inspect" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", 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" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596" "/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.33s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/devboy_storage-fe2ffc368c617683)
[INFO] [stdout] 
[INFO] [stdout] running 282 tests
[INFO] [stdout] test cache::tests::test_writable_and_available_delegate_to_inner ... ok
[INFO] [stdout] test cache::tests::test_cache_zero_ttl_disables_caching ... ok
[INFO] [stdout] test cache::tests::test_cache_hit_returns_value_without_hitting_inner ... ok
[INFO] [stdout] test cache::tests::test_store_invalidates_cache_entry ... ok
[INFO] [stdout] test cache::tests::test_delete_invalidates_cache_entry ... ok
[INFO] [stdout] test ci::tests::ci_eq_false_does_not_count_as_signal ... ok
[INFO] [stdout] test ci::tests::ci_eq_true_alone_is_heuristic_signal_only ... ok
[INFO] [stdout] test ci::tests::ci_policy_active_flips_every_rule ... ok
[INFO] [stdout] test ci::tests::ci_policy_from_detection_picks_active_when_active ... ok
[INFO] [stdout] test ci::tests::ci_policy_from_detection_picks_inactive_when_inactive ... ok
[INFO] [stdout] test ci::tests::ci_policy_inactive_is_all_off ... ok
[INFO] [stdout] test ci::tests::context_config_activates ... ok
[INFO] [stdout] test ci::tests::context_config_false_does_not_activate ... ok
[INFO] [stdout] test ci::tests::devboy_ci_eq_0_or_false_does_not_activate ... ok
[INFO] [stdout] test ci::tests::devboy_ci_eq_true_case_insensitive_activates ... ok
[INFO] [stdout] test cache::tests::test_invalidate_all_drops_every_entry ... ok
[INFO] [stdout] test cache::tests::test_missing_keys_not_cached ... ok
[INFO] [stdout] test ci::tests::cli_flag_activates ... ok
[INFO] [stdout] test ci::tests::cli_flag_wins_over_env_var ... ok
[INFO] [stdout] test ci::tests::devboy_ci_eq_1_activates ... ok
[INFO] [stdout] test ci::tests::each_heuristic_var_is_recognised ... ok
[INFO] [stdout] test expiry::tests::expires_at_in_the_past_emits_expired_with_days_overdue ... ok
[INFO] [stdout] test ci::tests::empty_environment_is_inactive_with_no_heuristics ... ok
[INFO] [stdout] test ci::tests::env_var_wins_over_context ... ok
[INFO] [stdout] test expiry::tests::both_timers_within_window_emit_two_warnings ... ok
[INFO] [stdout] test expiry::tests::expires_at_one_day_past_window_no_warning ... ok
[INFO] [stdout] test expiry::tests::no_rotation_metadata_no_warning ... ok
[INFO] [stdout] test expiry::tests::record_expiry_missing_path_returns_false ... ok
[INFO] [stdout] test expiry::tests::expires_at_within_warning_window_emits_expiring_soon ... ok
[INFO] [stdout] test ci::tests::explicit_trigger_silences_doctor_notice_even_with_heuristics ... ok
[INFO] [stdout] test expiry::tests::record_expiry_unchanged_returns_false ... ok
[INFO] [stdout] test expiry::tests::record_rotation_updates_existing_entry ... ok
[INFO] [stdout] test expiry::tests::rotation_due_soon_emits_warning ... ok
[INFO] [stdout] test expiry::tests::no_expires_at_no_warning ... ok
[INFO] [stdout] test expiry::tests::rotation_far_in_future_no_warning ... ok
[INFO] [stdout] test expiry::tests::expires_at_at_exact_window_boundary_emits_expiring_soon ... ok
[INFO] [stdout] test expiry::tests::record_expiry_updates_existing_entry_returns_true ... ok
[INFO] [stdout] test expiry::tests::expires_at_far_future_no_warning ... ok
[INFO] [stdout] test expiry::tests::unparseable_expires_at_yields_no_warning ... ok
[INFO] [stdout] test index::tests::approve_on_use_round_trips_through_toml ... ok
[INFO] [stdout] test index::tests::default_path_includes_secrets_subdir_and_index_filename ... ok
[INFO] [stdout] test expiry::tests::save_to_round_trip_preserves_entries ... ok
[INFO] [stdout] test expiry::tests::rotation_overdue_emits_warning ... ok
[INFO] [stdout] test index::tests::load_from_io_error_surfaces_path ... ok
[INFO] [stdout] test index::tests::empty_string_yields_empty_index ... ok
[INFO] [stdout] test index::tests::insert_remove_get ... ok
[INFO] [stdout] test index::tests::parses_each_rotation_method_value ... ok
[INFO] [stdout] test index::tests::parses_minimal_entry_with_defaults ... ok
[INFO] [stdout] test index::tests::rejects_invalid_path_in_key ... ok
[INFO] [stdout] test index::tests::load_from_returns_empty_when_file_missing ... ok
[INFO] [stdout] test index::tests::parses_full_entry ... ok
[INFO] [stdout] test index::tests::parses_each_gate_value ... ok
[INFO] [stdout] test index::tests::parses_multiple_entries_sorted ... ok
[INFO] [stdout] test index::tests::round_trip_full_entry ... ok
[INFO] [stdout] test index::tests::secret_path_serde_roundtrip_via_index ... ok
[INFO] [stdout] test manifest::tests::load_from_returns_empty_when_dot_devboy_dir_missing ... ok
[INFO] [stdout] test index::tests::load_from_real_file ... ok
[INFO] [stdout] test manifest::tests::empty_string_yields_empty_manifest ... ok
[INFO] [stdout] test index::tests::rejects_reserved_prefix_in_key ... ok
[INFO] [stdout] test index::tests::rejects_unknown_field ... ok
[INFO] [stdout] test manifest::tests::load_from_returns_empty_when_file_missing ... ok
[INFO] [stdout] test manifest::tests::load_io_error_surfaces_path ... ok
[INFO] [stdout] test manifest::tests::load_from_project_root_resolves_dot_devboy_path ... ok
[INFO] [stdout] test manifest::tests::load_from_real_file ... ok
[INFO] [stdout] test manifest::tests::parses_full_manifest ... ok
[INFO] [stdout] test manifest::tests::referenced_paths_yields_each_role ... ok
[INFO] [stdout] test manifest::tests::override_entry_is_not_empty_when_any_field_set ... ok
[INFO] [stdout] test manifest::tests::parses_only_required ... ok
[INFO] [stdout] test manifest::tests::rejects_disallowed_override_field ... ok
[INFO] [stdout] test manifest::tests::parses_only_overrides ... ok
[INFO] [stdout] test manifest::tests::path_role_display ... ok
[INFO] [stdout] test manifest::tests::rejects_invalid_path_in_optional ... ok
[INFO] [stdout] test manifest::tests::rejects_unknown_top_level_field ... ok
[INFO] [stdout] test manifest::tests::rejects_invalid_path_in_required ... ok
[INFO] [stdout] test manifest::tests::rejects_invalid_path_in_override_key ... ok
[INFO] [stdout] test merge::tests::applies_overrides_on_global_entry ... ok
[INFO] [stdout] test manifest::tests::rejects_invalid_path_in_secret_key ... ok
[INFO] [stdout] test merge::tests::optional_path_resolved_with_required_false ... ok
[INFO] [stdout] test merge::tests::override_applies_approve_on_use_over_global_index ... ok
[INFO] [stdout] test merge::tests::override_approve_on_use_matching_global_emits_noop_warning ... ok
[INFO] [stdout] test merge::tests::empty_manifest_yields_empty_output ... ok
[INFO] [stdout] test merge::tests::override_for_undeclared_path_emits_warning ... ok
[INFO] [stdout] test merge::tests::no_op_override_emits_warning_per_field ... ok
[INFO] [stdout] test merge::tests::override_on_project_local_path_errors ... ok
[INFO] [stdout] test merge::tests::output_secrets_iter_sorted_by_path ... ok
[INFO] [stdout] test merge::tests::resolves_global_entry_without_overrides ... ok
[INFO] [stdout] test merge::tests::unknown_optional_path_errors_with_optional_role ... ok
[INFO] [stdout] test merge::tests::project_local_wins_over_absent_global ... ok
[INFO] [stdout] test merge::tests::unknown_required_path_errors ... ok
[INFO] [stdout] test merge::tests::path_in_both_required_and_optional_resolves_as_required ... ok
[INFO] [stdout] test merge::tests::project_local_wins_over_global_when_both_present ... ok
[INFO] [stdout] test merge::tests::project_local_for_undeclared_path_emits_warning ... ok
[INFO] [stdout] test pattern_resolution::tests::entry_without_pattern_id_passes_through_unchanged ... ok
[INFO] [stdout] test pattern_resolution::tests::explicit_format_regex_is_not_overridden ... ok
[INFO] [stdout] test manifest::tests::override_entry_is_empty_when_all_fields_missing ... ok
[INFO] [stdout] test merge::tests::empty_global_with_only_project_local_required_works ... ok
[INFO] [stdout] test pattern_resolution::tests::explicit_retrieval_url_is_not_overridden ... ok
[INFO] [stdout] test pattern_resolution::tests::explicit_rotate_every_days_is_not_overridden ... ok
[INFO] [stdout] test pattern_resolution::tests::known_pattern_inherits_format_regex ... ok
[INFO] [stdout] test pattern_resolution::tests::known_pattern_inherits_retrieval_url ... ok
[INFO] [stdout] test pattern_resolution::tests::known_pattern_inherits_rotate_every_days ... ok
[INFO] [stdout] test pattern_resolution::tests::map_rotation_method_covers_each_variant ... ok
[INFO] [stdout] test pattern_resolution::tests::pattern_without_metadata_only_inherits_regex ... ok
[INFO] [stdout] test pattern_resolution::tests::rotation_method_remains_none_for_v1_builtins ... ok
[INFO] [stdout] test pattern_resolution::tests::unrelated_fields_pass_through_unchanged ... ok
[INFO] [stdout] test pattern_resolution::tests::unknown_pattern_id_returns_entry_and_warning ... ok
[INFO] [stdout] test plugin_manifest::tests::checksum_comparison_is_case_insensitive ... ok
[INFO] [stdout] test plugin_manifest::tests::default_discovery_dir_resolves_under_dot_devboy ... ok
[INFO] [stdout] test plugin_manifest::tests::manifest_rejects_filename_without_proper_prefix ... ok
[INFO] [stdout] test plugin_manifest::tests::manifest_parses_minimal_fields ... ok
[INFO] [stdout] test plugin_manifest::tests::manifest_rejects_name_filename_mismatch ... ok
[INFO] [stdout] test plugin_manifest::tests::manifest_rejects_unknown_fields ... ok
[INFO] [stdout] test plugin_manifest::tests::verify_executable_fails_when_binary_missing ... ok
[INFO] [stdout] test plugin_manifest::tests::discovery_returns_each_valid_plugin ... ok
[INFO] [stdout] test plugin_manifest::tests::verify_executable_fails_when_bytes_change ... ok
[INFO] [stdout] test plugin_manifest::tests::discovery_returns_empty_for_missing_dir ... ok
[INFO] [stdout] test plugin_protocol::tests::get_request_carries_reference_only ... ok
[INFO] [stdout] test plugin_protocol::tests::get_result_round_trips_with_lease ... ok
[INFO] [stdout] test plugin_protocol::tests::init_result_round_trips ... ok
[INFO] [stdout] test plugin_manifest::tests::verify_executable_passes_for_matching_checksum ... ok
[INFO] [stdout] test plugin_manifest::tests::discovery_ignores_unrelated_files ... ok
[INFO] [stdout] test plugin_protocol::tests::is_available_request_has_no_params ... ok
[INFO] [stdout] test plugin_protocol::tests::init_request_round_trips_through_json ... ok
[INFO] [stdout] test plugin_protocol::tests::is_available_status_strings_are_pinned ... ok
[INFO] [stdout] test plugin_protocol::tests::jsonrpc_version_constant_is_v2 ... ok
[INFO] [stdout] test plugin_protocol::tests::error_response_round_trips_each_kind ... ok
[INFO] [stdout] test plugin_protocol::tests::list_result_round_trips_empty_and_populated ... ok
[INFO] [stdout] test plugin_protocol::tests::rpc_outcome_distinguishes_result_from_error_at_parse_time ... ok
[INFO] [stdout] test router_cache::tests::debug_does_not_leak_plaintext ... ok
[INFO] [stdout] test plugin_manifest::tests::discovery_isolates_per_manifest_errors ... ok
[INFO] [stdout] test router_cache::tests::drop_clears_entries_and_releases_secret_strings ... ok
[INFO] [stdout] test plugin_protocol::tests::jsonrpc_version_rejects_anything_other_than_v2 ... ok
[INFO] [stdout] test plugin_protocol::tests::validate_request_round_trips ... ok
[INFO] [stdout] test router_cache::tests::default_base_ttl_matches_adr_021_900_seconds ... ok
[INFO] [stdout] test router_cache::tests::distinct_paths_do_not_collide ... ok
[INFO] [stdout] test plugin_protocol::tests::list_request_has_no_params ... ok
[INFO] [stdout] test router_cache::tests::expired_entry_returns_none_and_is_evicted ... ok
[INFO] [stdout] test router_cache::tests::invalidate_unknown_path_is_a_noop ... ok
[INFO] [stdout] test router_cache::tests::invalidate_drops_one_entry ... ok
[INFO] [stdout] test router_cache::tests::lease_above_base_does_not_extend_ttl ... ok
[INFO] [stdout] test router_cache::tests::lease_and_max_ttl_both_lower_taken_jointly ... ok
[INFO] [stdout] test router_cache::tests::lease_below_base_lowers_effective_ttl ... ok
[INFO] [stdout] test router_cache::tests::max_ttl_cap_does_not_raise_above_base ... ok
[INFO] [stdout] test router_cache::tests::max_ttl_cap_lowers_below_base ... ok
[INFO] [stdout] test router_cache::tests::lease_duration_zero_disables_caching ... ok
[INFO] [stdout] test router_cache::tests::base_ttl_accessor_returns_constructor_value ... ok
[INFO] [stdout] test router_cache::tests::len_counts_inserted_entries ... ok
[INFO] [stdout] test router_cache::tests::put_then_get_returns_value_within_ttl ... ok
[INFO] [stdout] test router_config::tests::default_fallback_referencing_undefined_source_rejected ... ok
[INFO] [stdout] test router_config::tests::default_referencing_undefined_source_rejected ... ok
[INFO] [stdout] test router_cache::tests::entry_at_exact_expiry_is_treated_as_expired ... ok
[INFO] [stdout] test router_cache::tests::invalidate_all_drops_everything ... ok
[INFO] [stdout] test router_cache::tests::missing_key_returns_none ... ok
[INFO] [stdout] test router_cache::tests::put_overwrites_previous_value ... ok
[INFO] [stdout] test router_config::tests::bad_access_value_is_a_parse_error ... ok
[INFO] [stdout] test router_config::tests::default_path_lives_under_devboy_tools_secrets_sources_toml ... ok
[INFO] [stdout] test router_config::tests::load_from_missing_file_returns_default_empty_config ... ok
[INFO] [stdout] test router_config::tests::duplicate_source_name_rejected ... ok
[INFO] [stdout] test router_config::tests::duplicate_route_prefix_rejected ... ok
[INFO] [stdout] test router_config::tests::effective_capabilities_routes_through_the_access_mode ... ok
[INFO] [stdout] test router_config::tests::parse_full_adr_021_example ... ok
[INFO] [stdout] test router_config::tests::load_from_valid_file_round_trips_through_parse ... ok
[INFO] [stdout] test router_config::tests::route_prefix_without_trailing_slash_rejected ... ok
[INFO] [stdout] test router_config::tests::route_with_undefined_source_rejected ... ok
[INFO] [stdout] test router_config::tests::parse_minimal_config_with_only_sources ... ok
[INFO] [stdout] test router_config::tests::read_access_cannot_grant_a_capability_the_plugin_lacks ... ok
[INFO] [stdout] test router_config::tests::empty_source_name_rejected ... ok
[INFO] [stdout] test router_config::tests::load_from_invalid_toml_surfaces_path ... ok
[INFO] [stdout] test router_config::tests::read_access_masks_off_write_and_rotate ... ok
[INFO] [stdout] test router_config::tests::source_access_readwrite_parses_explicitly ... ok
[INFO] [stdout] test router_config::tests::readwrite_access_passes_the_declared_set_through_unchanged ... ok
[INFO] [stdout] test router_config::tests::source_name_starting_with_dash_rejected ... ok
[INFO] [stdout] test router_config::tests::secret_override_with_invalid_path_rejected ... ok
[INFO] [stdout] test router_config::tests::uppercase_source_name_rejected ... ok
[INFO] [stdout] test router_credentials::tests::no_source_with_credential_is_ok ... ok
[INFO] [stdout] test router_credentials::tests::one_hop_chain_through_keychain_is_valid ... ok
[INFO] [stdout] test router_credentials::tests::one_hop_chain_via_default_route_is_valid ... ok
[INFO] [stdout] test router_config::tests::secret_override_with_undefined_source_rejected ... ok
[INFO] [stdout] test router_config::tests::source_name_with_digit_first_accepted ... ok
[INFO] [stdout] test router_config::tests::source_access_defaults_to_readwrite_when_omitted ... ok
[INFO] [stdout] test router_credentials::tests::credential_path_outside_internal_namespace_rejected ... ok
[INFO] [stdout] test router_config::tests::source_access_read_parses_and_does_not_leak_into_settings ... ok
[INFO] [stdout] test router_credentials::tests::three_hop_chain_without_cycle_is_deep ... ok
[INFO] [stdout] test router_resolve::tests::default_fallback_is_carried_through ... ok
[INFO] [stdout] test router_credentials::tests::self_loop_is_a_cycle ... ok
[INFO] [stdout] test router_credentials::tests::two_node_cycle_detected ... ok
[INFO] [stdout] test router_credentials::tests::unroutable_credential_path_surfaces_resolve_error ... ok
[INFO] [stdout] test router_resolve::tests::earlier_route_wins_when_prefixes_have_different_length_but_one_starts_the_other_short ... ok
[INFO] [stdout] test router_resolve::tests::matching_prefix_returns_route_with_settings ... ok
[INFO] [stdout] test router_credentials::tests::sentinel_credential_is_terminal ... ok
[INFO] [stdout] test router_resolve::tests::no_secret_no_prefix_no_default_returns_no_route_error ... ok
[INFO] [stdout] test router_resolve::tests::fixture_table_exercises_every_branch ... ok
[INFO] [stdout] test router_resolve::tests::duplicate_prefix_is_rejected_at_config_load_so_resolver_never_sees_it ... ok
[INFO] [stdout] test router_resolve::tests::prefix_must_match_at_segment_boundary ... ok
[INFO] [stdout] test router_resolve::tests::longest_matching_prefix_wins_over_shorter ... ok
[INFO] [stdout] test router_resolve::tests::explicit_secret_override_wins_over_prefix_and_default ... ok
[INFO] [stdout] test router_resolve::tests::route_decision_source_helper_returns_the_dispatch_target ... ok
[INFO] [stdout] test secret_path::tests::accepts_paths_longer_than_three_segments_in_purpose ... ok
[INFO] [stdout] test secret_path::tests::accepts_three_segment_path ... ok
[INFO] [stdout] test secret_path::tests::as_ref_str_works ... ok
[INFO] [stdout] test router_resolve::tests::unmatched_path_falls_back_to_default ... ok
[INFO] [stdout] test secret_path::tests::accepts_canonical_examples_from_adr_020 ... ok
[INFO] [stdout] test secret_path::tests::parse_internal_accepts_test_prefix ... ok
[INFO] [stdout] test secret_path::tests::rejects_empty_leading_segment ... ok
[INFO] [stdout] test secret_path::tests::display_returns_full_path ... ok
[INFO] [stdout] test secret_path::tests::parse_internal_accepts_double_underscore_prefix ... ok
[INFO] [stdout] test secret_path::tests::rejects_empty_trailing_segment ... ok
[INFO] [stdout] test secret_path::tests::rejects_kebab_starting_with_dash ... ok
[INFO] [stdout] test secret_path::tests::parse_internal_still_rejects_bad_segments ... ok
[INFO] [stdout] test secret_path::tests::parse_via_fromstr_trait ... ok
[INFO] [stdout] test secret_path::tests::rejects_segment_with_underscore ... ok
[INFO] [stdout] test secret_path::tests::rejects_kebab_starting_with_digit ... ok
[INFO] [stdout] test secret_path::tests::rejects_two_segments ... ok
[INFO] [stdout] test secret_path::tests::rejects_dot_separator_as_too_few_segments ... ok
[INFO] [stdout] test secret_path::tests::rejects_double_underscore_prefix ... ok
[INFO] [stdout] test secret_path::tests::rejects_empty_middle_segment ... ok
[INFO] [stdout] test secret_path::tests::rejects_segment_with_dot ... ok
[INFO] [stdout] test source::tests::capabilities_bit_values_match_adr_021 ... ok
[INFO] [stdout] test secret_path::tests::rejects_single_segment ... ok
[INFO] [stdout] test source::tests::credential_ref_can_be_a_sentinel ... ok
[INFO] [stdout] test source::tests::credential_ref_can_be_a_sources_path ... ok
[INFO] [stdout] test source::tests::default_list_reports_unsupported_capability ... ok
[INFO] [stdout] test source::tests::default_requires_credential_returns_none ... ok
[INFO] [stdout] test source::tests::default_validate_reports_unsupported_capability ... ok
[INFO] [stdout] test secret_path::tests::rejects_underscore_test_prefix ... ok
[INFO] [stdout] test source::tests::source_error_display_includes_name_and_context ... ok
[INFO] [stdout] test source::tests::source_error_io_preserves_underlying ... ok
[INFO] [stdout] test tests::test_build_default_store_positive_ttl_delegates_writable ... ok
[INFO] [stdout] test tests::test_build_default_store_zero_ttl_returns_writable_chain ... ok
[INFO] [stdout] test tests::test_chain_store_ci_chain ... ok
[INFO] [stdout] test tests::test_chain_store_debug_impl ... ok
[INFO] [stdout] test tests::test_chain_store_default_chain ... ok
[INFO] [stdout] test tests::test_chain_store_delete_from_all_writable ... ok
[INFO] [stdout] test tests::test_chain_store_env_var_priority ... ok
[INFO] [stdout] test tests::test_chain_store_fallback_to_memory_when_env_empty ... ok
[INFO] [stdout] test source::tests::capabilities_default_is_empty ... ok
[INFO] [stdout] test source::tests::capabilities_compose_via_bitor ... ok
[INFO] [stdout] test source::tests::source_works_through_dyn_box ... ok
[INFO] [stdout] test tests::test_chain_store_get_first_match_wins ... ok
[INFO] [stdout] test secret_path::tests::segments_iter_returns_each_part ... ok
[INFO] [stdout] test source::tests::source_status_is_available_only_for_available_variant ... ok
[INFO] [stdout] test secret_path::tests::rejects_uppercase_segment ... ok
[INFO] [stdout] test tests::test_chain_store_is_available ... ok
[INFO] [stdout] test tests::test_chain_store_is_writable ... ok
[INFO] [stdout] test tests::test_env_var_store_get_prefixed ... ok
[INFO] [stdout] test tests::test_chain_store_new ... ok
[INFO] [stdout] test tests::test_env_var_store_default ... ok
[INFO] [stdout] test tests::test_chain_store_no_writable_store_error ... ok
[INFO] [stdout] test tests::test_chain_store_store_to_first_writable ... ok
[INFO] [stdout] test tests::test_env_var_store_key_to_env_name ... ok
[INFO] [stdout] test tests::test_env_var_store_get_unprefixed_fallback ... ok
[INFO] [stdout] test tests::test_env_var_store_new ... ok
[INFO] [stdout] test tests::test_env_var_store_is_read_only ... ok
[INFO] [stdout] test tests::test_env_var_store_no_fallback ... ok
[INFO] [stdout] test tests::test_email_key ... ok
[INFO] [stdout] test tests::test_env_var_store_not_found ... ok
[INFO] [stdout] test tests::test_keychain_store_new ... ok
[INFO] [stdout] test tests::test_credential_store_exists_default_impl ... ok
[INFO] [stdout] test tests::test_keychain_store_default ... ok
[INFO] [stdout] test tests::test_env_var_store_prefixed_env_name ... ok
[INFO] [stdout] test tests::test_env_var_store_with_prefix ... ok
[INFO] [stdout] test tests::test_env_var_store_without_fallback ... ok
[INFO] [stdout] test tests::test_env_var_store_prefixed_takes_priority ... ok
[INFO] [stdout] test tests::test_memory_store_delete_nonexistent ... ok
[INFO] [stdout] test tests::test_memory_store_exists ... ok
[INFO] [stdout] test tests::test_wrap_with_cache_populated_ttl_caches_lookups ... ok
[INFO] [stdout] test tests::test_wrap_with_cache_zero_ttl_is_passthrough ... ok
[INFO] [stdout] test tests::test_token_key ... ok
[INFO] [stdout] test tests::test_memory_store_overwrite ... ok
[INFO] [stdout] test tests::test_memory_store_with_credentials ... ok
[INFO] [stdout] test validation::tests::inline_format_regex_wins_over_pattern_id ... ok
[INFO] [stdout] test validation::tests::inline_regex_mismatching_value_returns_mismatch_with_pattern_echoed ... ok
[INFO] [stdout] test validation::tests::inline_regex_matching_value_returns_ok_with_inline_source ... ok
[INFO] [stdout] test validation::tests::known_pattern_id_rejects_gibberish ... ok
[INFO] [stdout] test validation::tests::known_pattern_id_matches_a_real_token ... ok
[INFO] [stdout] test validation::tests::invalid_inline_regex_surfaces_compile_error ... ok
[INFO] [stdout] test tests::test_keychain_store_with_service_name ... ok
[INFO] [stdout] test tests::test_memory_store_basic ... ok
[INFO] [stdout] test validation::tests::no_rule_when_neither_field_is_set ... ok
[INFO] [stdout] test cache::tests::test_cache_respects_ttl_and_refetches ... ok
[INFO] [stdout] test validation::tests::user_pattern_via_catalogue_is_used ... ok
[INFO] [stdout] test validation::tests::unknown_pattern_id_treated_as_no_rule ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 282 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests devboy_storage
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test src/lib.rs - (line 20) ... ignored
[INFO] [stdout] test src/lib.rs - ChainStore (line 542) ... ignored
[INFO] [stdout] test src/lib.rs - EnvReader (line 378) ... ignored
[INFO] [stdout] test src/lib.rs - EnvVarStore::with_prefix (line 424) ... ignored
[INFO] [stdout] test src/secret_path.rs - secret_path (line 16) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 0.71s; merged doctests compilation took 0.69s
[INFO] running `Command { std: "docker" "inspect" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596", kill_on_drop: false }`
[INFO] [stdout] 6818471d16f5509c535b40c97cfdc3437787aff817b0e50da645ef36238bd596
