[INFO] cloning repository https://github.com/akiselev/handprint [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/akiselev/handprint" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fakiselev%2Fhandprint", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fakiselev%2Fhandprint'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] bc7653c425a02afb6f2558bc4c8ff29b7880698f [INFO] testing akiselev/handprint against 1.99.0-beta.8 for beta-1.100-4 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fakiselev%2Fhandprint" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/akiselev/handprint [INFO] finished tweaking git repo https://github.com/akiselev/handprint [INFO] tweaked toml for git repo https://github.com/akiselev/handprint written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/akiselev/handprint on toolchain 1.99.0-beta.8 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/akiselev/handprint 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] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [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] b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13 [INFO] running `Command { std: "docker" "start" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", 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" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13" "/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" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", 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" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling zerocopy v0.8.55 [INFO] [stderr] Compiling serde_json v1.0.151 [INFO] [stderr] Compiling thiserror v2.0.19 [INFO] [stderr] Compiling tinyvec v1.12.0 [INFO] [stderr] Compiling memchr v2.8.3 [INFO] [stderr] Compiling winnow v0.7.15 [INFO] [stderr] Compiling syn v3.0.3 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling toml_write v0.1.2 [INFO] [stderr] Compiling unicode-segmentation v1.13.3 [INFO] [stderr] Compiling clap_builder v4.6.2 [INFO] [stderr] Compiling anyhow v1.0.104 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling unicode-normalization v0.1.25 [INFO] [stderr] Compiling serde_derive v1.0.229 [INFO] [stderr] Compiling thiserror-impl v2.0.19 [INFO] [stderr] Compiling clap_derive v4.6.4 [INFO] [stderr] Compiling clap v4.6.4 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling serde v1.0.229 [INFO] [stderr] Compiling rand v0.8.7 [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 handprint-core v0.1.0 (/opt/rustwide/workdir/crates/handprint-core) [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling handprint-data v0.1.0 (/opt/rustwide/workdir/crates/handprint-data) [INFO] [stderr] Compiling handprint-cli v0.1.0 (/opt/rustwide/workdir/crates/handprint-cli) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 36.46s [INFO] running `Command { std: "docker" "inspect" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", 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" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling serde_core v1.0.229 [INFO] [stderr] Compiling zerocopy v0.8.55 [INFO] [stderr] Compiling zerocopy-derive v0.8.55 [INFO] [stderr] Compiling regex-syntax v0.8.11 [INFO] [stderr] Compiling either v1.17.0 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling ciborium-io v0.2.2 [INFO] [stderr] Compiling cast v0.3.0 [INFO] [stderr] Compiling is-terminal v0.4.17 [INFO] [stderr] Compiling anes v0.1.6 [INFO] [stderr] Compiling oorandom v11.1.5 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling itertools v0.10.5 [INFO] [stderr] Compiling criterion-plot v0.5.0 [INFO] [stderr] Compiling regex-automata v0.4.16 [INFO] [stderr] Compiling serde v1.0.229 [INFO] [stderr] Compiling serde_json v1.0.151 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling regex v1.13.1 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling tinytemplate v1.2.1 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling half v2.7.1 [INFO] [stderr] Compiling ciborium-ll v0.2.2 [INFO] [stderr] Compiling ciborium v0.2.2 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling rand v0.8.7 [INFO] [stderr] Compiling criterion v0.5.1 [INFO] [stderr] Compiling handprint-core v0.1.0 (/opt/rustwide/workdir/crates/handprint-core) [INFO] [stderr] Compiling handprint-data v0.1.0 (/opt/rustwide/workdir/crates/handprint-data) [INFO] [stderr] Compiling handprint-cli v0.1.0 (/opt/rustwide/workdir/crates/handprint-cli) [INFO] [stdout] warning: function `spacing_is_missing_rather_than_zero_below_the_hit_floor` is never used [INFO] [stdout] --> crates/handprint-core/src/feature/device.rs:1226:8 [INFO] [stdout] | [INFO] [stdout] 1226 | fn spacing_is_missing_rather_than_zero_below_the_hit_floor() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 55.02s [INFO] running `Command { std: "docker" "inspect" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", 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" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }` [INFO] [stderr] warning: function `spacing_is_missing_rather_than_zero_below_the_hit_floor` is never used [INFO] [stderr] --> crates/handprint-core/src/feature/device.rs:1226:8 [INFO] [stderr] | [INFO] [stderr] 1226 | fn spacing_is_missing_rather_than_zero_below_the_hit_floor() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: `handprint-core` (lib test) generated 1 warning [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.16s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/handprint-fad09fa1c086f276) [INFO] [stdout] [INFO] [stdout] running 18 tests [INFO] [stdout] test commands::tests::severity_and_profile_names_parse ... ok [INFO] [stdout] test commands::tests::universe_specs_parse ... ok [INFO] [stdout] test commands::tests::html_rendering_escapes_and_marks ... ok [INFO] [stdout] test config::tests::parses_a_project_file ... ok [INFO] [stdout] test config::tests::an_empty_config_is_valid ... ok [INFO] [stdout] test config::tests::discovery_walks_up_the_tree ... ok [INFO] [stdout] test config::tests::unknown_keys_are_rejected_rather_than_ignored ... ok [INFO] [stdout] test tests::critique_defaults_to_json_and_corpus_mode ... ok [INFO] [stdout] test io::tests::author_per_subdirectory ... ok [INFO] [stdout] test tests::fit_defaults_to_the_short_text_families ... ok [INFO] [stdout] test tests::fit_takes_a_comma_separated_feature_list ... ok [INFO] [stdout] test io::tests::missing_and_empty_paths_are_errors ... ok [INFO] [stdout] test tests::unknown_subcommands_are_rejected ... ok [INFO] [stdout] test io::tests::jsonl_records_group_by_model ... ok [INFO] [stdout] test tests::the_cli_definition_is_valid ... ok [INFO] [stdout] test io::tests::private_flag_propagates ... ok [INFO] [stdout] test io::tests::references_round_trip_on_disk ... ok [INFO] [stdout] test io::tests::flat_directory_is_one_author_per_file ... ok [INFO] [stderr] Running tests/loop.rs (/opt/rustwide/target/debug/deps/loop-a61f8a81254501dd) [INFO] [stdout] [INFO] [stdout] test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 9 tests [INFO] [stdout] test a_declared_pack_yields_category_findings_on_a_hedge_stripped_draft ... ok [INFO] [stdout] test the_discover_fit_critique_loop_closes ... ok [INFO] [stdout] test the_register_family_reaches_the_contract_as_an_open_set_value ... ok [INFO] [stdout] test spans_are_byte_exact_so_patches_apply_cleanly ... ok [INFO] [stdout] test a_scripted_agent_converges_on_a_salted_draft ... ok [INFO] [stdout] test exit_codes_follow_vale ... ok [INFO] [stdout] test the_project_config_supplies_defaults ... ok [INFO] [stdout] test verify_runs_general_imposters ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/handprint_core-87efe5fbe739d1cf) [INFO] [stdout] test forensic_commands_run ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.15s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 377 tests [INFO] [stdout] test compare::tests::decomposition_sums_to_distance_for_every_metric ... ok [INFO] [stdout] test compare::tests::burrows_delta_is_mean_absolute_difference ... ok [INFO] [stdout] test compare::tests::cosine_delta_matches_the_textbook_formula ... ok [INFO] [stdout] test compare::tests::cosine_offset_is_documented_and_exact ... ok [INFO] [stdout] test compare::tests::eder_weights_earlier_dimensions_more ... ok [INFO] [stdout] test compare::tests::identical_profiles_are_at_distance_zero ... ok [INFO] [stdout] test compare::tests::metric_names_round_trip ... ok [INFO] [stdout] test compare::tests::scaling_space_is_a_metric_property ... ok [INFO] [stdout] test contrast::tests::matches_a_hand_computed_three_term_example ... ok [INFO] [stdout] test compare::tests::zero_vectors_do_not_produce_nan ... ok [INFO] [stdout] test compare::tests::minmax_is_bounded_in_unit_interval ... ok [INFO] [stdout] test contrast::tests::alpha0_is_reported_because_it_moves_with_the_vocabulary ... ok [INFO] [stdout] test contrast::tests::model_round_trips_through_serde ... ok [INFO] [stdout] test compare::tests::minmax_equals_one_minus_ruzicka_similarity ... ok [INFO] [stdout] test contrast::tests::discovered_terms_become_a_feature ... ok [INFO] [stdout] test corpus::tests::add_merges_repeated_authors ... ok [INFO] [stdout] test corpus::tests::split_halves_skips_single_document_authors ... ok [INFO] [stdout] test corpus::tests::aggregation_joins_with_blank_lines ... ok [INFO] [stdout] test corpus::tests::grouping_and_counts ... ok [INFO] [stdout] test contrast::tests::the_function_word_filter_requires_every_token_of_a_phrase ... ok [INFO] [stdout] test contrast::tests::reduced_variance_inflates_the_z_score ... ok [INFO] [stdout] test contrast::tests::privacy_culling_removes_rare_identifiers ... ok [INFO] [stdout] test contrast::tests::background_prior_alphas_sum_to_alpha0 ... ok [INFO] [stdout] test contrast::tests::universes_are_fitted_separately_and_never_pooled ... ok [INFO] [stdout] test contrast::tests::the_function_word_filter_removes_topic ... ok [INFO] [stdout] test contrast::tests::empty_side_is_rejected ... ok [INFO] [stdout] test critique::tests::capping_stops_one_dimension_from_dominating ... ok [INFO] [stdout] test contrast::tests::larger_alpha0_shrinks_every_z_toward_zero ... ok [INFO] [stdout] test critique::tests::artifacts_are_flagged_in_the_guards ... ok [INFO] [stdout] test critique::tests::an_under_firing_draft_is_told_to_increase_the_signature_lexis ... ok [INFO] [stdout] test critique::tests::an_over_fired_marketing_fixture_trips_upper_bands ... ok [INFO] [stdout] test contrast::tests::salted_markers_surface_and_z_is_monotone_in_salting_rate ... ok [INFO] [stdout] test critique::tests::a_device_free_draft_is_told_to_increase_not_left_alone ... ok [INFO] [stdout] test critique::tests::a_pre_change_contrast_artifact_fails_the_loop_with_a_refit_error ... ok [INFO] [stdout] test critique::tests::an_absent_canary_family_falls_back_and_says_so ... ok [INFO] [stdout] test critique::tests::relative_deviation_is_floored_by_unit ... ok [INFO] [stdout] test critique::tests::cosine_is_the_wrong_metric_for_one_class_membership ... ok [INFO] [stdout] test critique::tests::severity_respects_direction ... ok [INFO] [stdout] test critique::tests::severity_uses_relative_deviation_when_the_z_score_cannot_help ... ok [INFO] [stdout] test critique::tests::only_the_top_k_are_reported_but_everything_is_scored ... ok [INFO] [stdout] test critique::tests::contrast_vocabulary_dimensions_fire_in_both_directions ... ok [INFO] [stdout] test critique::tests::contrast_mode_targets_the_toward_side ... ok [INFO] [stdout] test critique::tests::a_matching_draft_produces_far_fewer_findings ... ok [INFO] [stdout] test critique::tests::threshold_profiles_differ ... ok [INFO] [stdout] test critique::tests::contrast_mode_without_an_away_profile_is_an_error ... ok [INFO] [stdout] test critique::tests::the_canary_family_is_never_reported ... ok [INFO] [stdout] test explain::tests::classification_picks_the_right_side ... ok [INFO] [stdout] test critique::tests::confidence_is_reported_per_family ... ok [INFO] [stdout] test critique::tests::a_slopped_draft_produces_actionable_findings ... ok [INFO] [stdout] test critique::tests::the_canary_trips_when_reported_features_improve_while_it_worsens ... ok [INFO] [stdout] test critique::tests::an_over_fired_dimension_is_told_to_reduce_and_the_message_shows_both_edges ... ok [INFO] [stdout] test critique::tests::drift_is_measured_against_the_first_draft ... ok [INFO] [stdout] test feature::biber::tests::closed_class_hits_carry_spans ... ok [INFO] [stdout] test feature::biber::tests::closed_class_rates_are_exact_per_thousand ... ok [INFO] [stdout] test feature::biber::tests::composites_are_rollups_and_never_reportable ... ok [INFO] [stdout] test feature::biber::tests::empty_text_marks_everything_missing_rather_than_zero ... ok [INFO] [stdout] test feature::biber::tests::involved_prose_scores_above_informational_prose_on_d1 ... ok [INFO] [stdout] test feature::biber::tests::mean_word_length_is_characters_per_lexical_token ... ok [INFO] [stdout] test feature::biber::tests::negation_is_split_into_analytic_and_synthetic ... ok [INFO] [stdout] test feature::biber::tests::participial_spans_cover_the_clause ... ok [INFO] [stdout] test feature::biber::tests::switching_the_participial_proxy_off_removes_its_dimension ... ok [INFO] [stdout] test explain::tests::pulls_sum_to_the_margin ... ok [INFO] [stdout] test feature::biber::tests::the_nominalization_suffix_rule_handles_its_stoplist ... ok [INFO] [stdout] test feature::biber::tests::the_participial_proxy_fires_on_sentence_final_ing_clauses ... ok [INFO] [stdout] test feature::biber::tests::the_spec_round_trips_through_serde ... ok [INFO] [stdout] test feature::char_ngram::tests::affix_punct_mode_drops_mid_word ... ok [INFO] [stdout] test feature::char_ngram::tests::all_types_mode_keeps_mid_word ... ok [INFO] [stdout] test feature::char_ngram::tests::punctuation_typing ... ok [INFO] [stdout] test feature::char_ngram::tests::spans_map_back_to_source ... ok [INFO] [stdout] test feature::char_ngram::tests::transform_emits_relative_frequencies_within_order ... ok [INFO] [stdout] test feature::char_ngram::tests::typing_at_word_boundaries ... ok [INFO] [stdout] test feature::char_ngram::tests::untyped_mode_merges_positions ... ok [INFO] [stdout] test feature::device::tests::a_background_pack_changes_the_number_and_both_stay_deterministic ... ok [INFO] [stdout] test feature::device::tests::a_fitting_document_still_scores_its_own_coinages_as_novel ... ok [INFO] [stdout] test feature::device::tests::a_pair_the_corpus_never_used_counts_as_novel ... ok [INFO] [stdout] test feature::device::tests::absurd_precision_needs_both_halves ... ok [INFO] [stdout] test feature::device::tests::a_device_in_every_paragraph_shows_a_higher_paragraph_share ... ok [INFO] [stdout] test feature::device::tests::alliteration_needs_a_run_of_three ... ok [INFO] [stdout] test feature::device::tests::antonym_pairs_and_ambiguity_come_from_the_wordnet_tables ... ok [INFO] [stdout] test explain::tests::rolling_finds_the_odd_window ... ok [INFO] [stdout] test explain::tests::delta_to_reports_the_move_needed ... ok [INFO] [stdout] test feature::device::tests::burstiness_ranks_a_drumbeat_below_a_clump ... ok [INFO] [stdout] test feature::device::tests::empty_text_marks_everything_missing ... ok [INFO] [stdout] test explain::tests::rolling_rejects_a_zero_window ... ok [INFO] [stdout] test feature::device::tests::headline_shapes_are_separated ... ok [INFO] [stdout] test feature::device::tests::switching_wordnet_off_removes_its_dimensions ... ok [INFO] [stdout] test feature::device::tests::litotes_fires_on_both_of_its_shapes ... ok [INFO] [stdout] test feature::device::tests::adjective_detection_has_a_documented_stoplist ... ok [INFO] [stdout] test feature::device::tests::rhyme_is_missing_under_the_vowel_group_method ... ok [INFO] [stdout] test feature::device::tests::the_novel_bigram_set_is_deterministic_and_sorted ... ok [INFO] [stdout] test feature::device::tests::the_spec_round_trips_and_defaults_sensibly ... ok [INFO] [stdout] test feature::formality::tests::a_loader_only_norm_pack_makes_the_reference_non_redistributable ... ok [INFO] [stdout] test feature::formality::tests::bimodality_separates_two_clumps_from_one_spread ... ok [INFO] [stdout] test feature::device::tests::triplets_are_counted_per_thousand_tokens ... ok [INFO] [stdout] test feature::formality::tests::clash_spans_cover_the_clashing_pair ... ok [INFO] [stdout] test feature::formality::tests::distribution_stats_are_missing_on_a_document_with_too_few_scored_words ... ok [INFO] [stdout] test feature::device::tests::the_transferred_epithet_needs_concreteness_norms ... ok [INFO] [stdout] test feature::device::tests::imperatives_are_counted_but_negated_ones_are_not ... ok [INFO] [stdout] test feature::formality::tests::formal_prose_scores_a_higher_mean_than_informal_prose ... ok [INFO] [stdout] test feature::device::tests::the_not_x_not_y_just_z_block_is_detected ... ok [INFO] [stdout] test feature::formality::tests::interleaved_registers_score_higher_variance_than_either_pure_one ... ok [INFO] [stdout] test feature::formality::tests::the_bundled_proxy_needs_no_external_data ... ok [INFO] [stdout] test feature::formality::tests::the_latinate_profanity_clash_needs_a_pack_and_says_so_without_one ... ok [INFO] [stdout] test feature::formality::tests::the_clash_rate_separates_interleaved_from_uniform_prose ... ok [INFO] [stdout] test feature::frames::tests::every_frame_shape_is_found_exactly_once ... ok [INFO] [stdout] test feature::formality::tests::the_latinate_suffix_heuristic_has_a_documented_stoplist ... ok [INFO] [stdout] test feature::formality::tests::the_spec_round_trips_through_serde ... ok [INFO] [stdout] test feature::frames::tests::a_document_with_no_frames_reports_zero_rates_and_unknown_shape ... ok [INFO] [stdout] test feature::frames::tests::frame_spans_are_byte_exact ... ok [INFO] [stdout] test feature::frames::tests::rates_are_exact_per_thousand_tokens ... ok [INFO] [stdout] test feature::frames::tests::figure_spacing_separates_a_metronome_from_a_burst ... ok [INFO] [stdout] test feature::frames::tests::the_negated_vehicle_is_distinguished_from_a_plain_simile ... ok [INFO] [stdout] test critique::tests::rollup_dimensions_never_become_findings ... ok [INFO] [stdout] test feature::frames::tests::vehicle_length_separates_a_one_word_vehicle_from_a_clause ... ok [INFO] [stdout] test feature::frames::tests::the_frozen_pack_license_rolls_up_into_the_reference ... ok [INFO] [stdout] test feature::frames::tests::the_verb_like_and_the_discourse_particle_are_not_similes ... ok [INFO] [stdout] test feature::frames::tests::the_spec_round_trips_through_serde ... ok [INFO] [stdout] test feature::frames::tests::the_frozen_share_needs_a_pack_and_says_so_without_one ... ok [INFO] [stdout] test feature::lexicon::tests::category_rates_still_count_hits_when_per_term_is_off ... ok [INFO] [stdout] test feature::lexicon::tests::alternatives_are_available_for_findings ... ok [INFO] [stdout] test feature::lexicon::tests::custom_pack_namespaces_dimensions ... ok [INFO] [stdout] test feature::lexicon::tests::category_and_total_rollups ... ok [INFO] [stdout] test feature::lexicon::tests::clean_text_scores_zero ... ok [INFO] [stdout] test feature::lexicon::tests::category_findings_makes_the_category_rates_reportable ... ok [INFO] [stdout] test critique::tests::lexicon_findings_carry_alternatives ... ok [INFO] [stdout] test feature::lexicon::tests::the_number_wildcard_matches_a_numeric_token_only ... ok [INFO] [stdout] test feature::lexicon::tests::seed_pack_is_well_formed ... ok [INFO] [stdout] test feature::lexicon::tests::pack_round_trips_through_json ... ok [INFO] [stdout] test feature::lexicon::tests::phrase_spans_cover_the_whole_match ... ok [INFO] [stdout] test feature::lexicon::tests::word_hits_carry_spans ... ok [INFO] [stdout] test feature::lexicon::tests::phrase_patterns_match_with_gaps_and_alternatives ... ok [INFO] [stdout] test feature::mfw::tests::culling_drops_document_specific_words ... ok [INFO] [stdout] test feature::mfw::tests::empty_vocabulary_is_an_error ... ok [INFO] [stdout] test feature::mfw::tests::selects_top_k_by_frequency ... ok [INFO] [stdout] test feature::mfw::tests::transform_emits_relative_frequencies ... ok [INFO] [stdout] test feature::mfw::tests::hand_computed_fixture_matches ... ok [INFO] [stdout] test feature::norms::tests::an_empty_pack_is_rejected_at_fit ... ok [INFO] [stdout] test feature::norms::tests::a_document_with_too_few_scored_tokens_is_missing_not_zero ... ok [INFO] [stdout] test feature::lexicon::tests::the_spec_flag_serde_defaults_so_old_artifacts_load_unchanged ... ok [INFO] [stdout] test feature::norms::tests::the_pack_license_rolls_up ... ok [INFO] [stdout] test feature::pack::tests::count_pack_round_trips_and_computes_frequencies ... ok [INFO] [stdout] test feature::pack::tests::count_pack_total_falls_back_to_the_entry_sum ... ok [INFO] [stdout] test feature::pack::tests::empty_packs_are_rejected ... ok [INFO] [stdout] test feature::pack::tests::non_finite_values_are_rejected ... ok [INFO] [stdout] test feature::norms::tests::a_concrete_document_scores_above_an_abstract_one ... ok [INFO] [stdout] test feature::pack::tests::norm_lookups_and_quantiles ... ok [INFO] [stdout] test feature::frames::tests::as_far_as_style_idioms_do_not_chain_into_a_simile ... ok [INFO] [stdout] test feature::pack::tests::norm_pack_round_trips_through_json ... ok [INFO] [stdout] test feature::norms::tests::one_feature_covers_every_norm_pack ... ok [INFO] [stdout] test feature::packs::cliche_similes::tests::every_entry_is_a_literal_token_sequence ... ok [INFO] [stdout] test feature::norms::tests::the_high_share_and_p90_separate_the_tail_from_the_mean ... ok [INFO] [stdout] test feature::packs::cliche_similes::tests::entries_open_with_a_comparison_frame ... ok [INFO] [stdout] test feature::packs::doc_style::tests::the_categories_are_the_five_documented_ones ... ok [INFO] [stdout] test feature::packs::hyland::tests::all_ten_hyland_categories_are_present ... ok [INFO] [stdout] test feature::packs::hyland::tests::no_word_appears_in_two_categories ... ok [INFO] [stdout] test feature::packs::hyland::tests::the_pack_is_the_size_the_taxonomy_implies ... ok [INFO] [stdout] test feature::packs::marketing::tests::the_two_packs_do_not_overlap ... ok [INFO] [stdout] test feature::packs::misc::tests::every_pack_here_validates_its_patterns ... ok [INFO] [stdout] test feature::packs::misc::tests::the_epistemic_pack_is_about_the_size_the_plan_called_for ... ok [INFO] [stdout] test feature::packs::cliche_similes::tests::the_pack_is_big_enough_for_a_share_to_mean_something ... ok [INFO] [stdout] test feature::packs::misc::tests::the_other_packs_do_not_inherit_share_alike ... ok [INFO] [stdout] test feature::packs::marketing::tests::the_eval_categories_are_the_five_leech_families ... ok [INFO] [stdout] test feature::packs::norms::tests::every_entry_is_lowercase_so_the_tokenizer_can_match_it ... ok [INFO] [stdout] test feature::packs::doc_style::tests::wordy_terms_carry_the_replacement_the_fix_block_needs ... ok [INFO] [stdout] test critique::tests::the_salted_markers_are_surfaced_with_their_spans ... ok [INFO] [stdout] test feature::mfw::tests::function_word_mode_excludes_content_words ... ok [INFO] [stdout] test feature::packs::misc::tests::the_wikipedia_derivation_declares_share_alike ... ok [INFO] [stdout] test feature::lexicon::tests::structural_rules_fire ... ok [INFO] [stdout] test feature::packs::marketing::tests::the_numeric_slots_use_the_hash_wildcard ... ok [INFO] [stdout] test feature::packs::norms::tests::the_concreteness_stub_is_labelled_as_a_stub ... ok [INFO] [stdout] test feature::packs::profanity::tests::no_entry_suggests_a_replacement ... ok [INFO] [stdout] test feature::packs::profanity::tests::the_three_strength_bands_are_present_and_ordered ... ok [INFO] [stdout] test feature::packs::tech_voice::tests::the_five_categories_are_present ... ok [INFO] [stdout] test feature::packs::norms::tests::no_term_is_scored_twice ... ok [INFO] [stdout] test feature::packs::norms::tests::the_booster_pack_splits_amplifiers_from_dampeners ... ok [INFO] [stdout] test feature::packs::norms::tests::the_scale_spans_both_registers ... ok [INFO] [stdout] test feature::packs::tech_voice::tests::the_pack_is_phrases_only ... ok [INFO] [stdout] test feature::packs::wordnet::tests::antonym_pairs_are_ordered_within_the_pair ... ok [INFO] [stdout] test explain::tests::highlights_need_a_tracked_profile ... ok [INFO] [stdout] test feature::packs::tests::terms_are_lowercase_so_the_tokenizer_can_match_them ... ok [INFO] [stdout] test feature::packs::wordnet::tests::the_sense_table_spans_both_ends_of_polysemy ... ok [INFO] [stdout] test feature::packs::wordnet::tests::the_tables_are_sorted_for_binary_search ... ok [INFO] [stdout] test feature::punct::tests::allcaps_and_contractions ... ok [INFO] [stdout] test feature::punct::tests::dash_style_ratios ... ok [INFO] [stdout] test feature::packs::tests::pack_rule_ids_are_unique_and_patterns_parse ... ok [INFO] [stdout] test feature::packs::wordnet::tests::the_attribution_is_present ... ok [INFO] [stdout] test feature::punct::tests::letter_frequencies_normalize ... ok [INFO] [stdout] test feature::punct::tests::quote_and_ellipsis_style ... ok [INFO] [stdout] test feature::punct::tests::informality_markers_fire ... ok [INFO] [stdout] test feature::packs::tests::every_listed_pack_resolves ... ok [INFO] [stdout] test feature::packs::tests::share_alike_obligations_never_reach_a_sibling_pack ... ok [INFO] [stdout] test feature::punct::tests::empty_document_marks_everything_missing ... ok [INFO] [stdout] test feature::readability::tests::grades_match_hand_computed_values ... ok [INFO] [stdout] test feature::punct::tests::spans_are_recorded_for_actionable_markers ... ok [INFO] [stdout] test feature::readability::tests::acronyms_are_counted_off_the_source_case ... ok [INFO] [stdout] test feature::readability::tests::syllable_counting_handles_the_usual_traps ... ok [INFO] [stdout] test feature::readability::tests::the_documented_adjectival_false_positive_is_reproducible ... ok [INFO] [stdout] test feature::readability::tests::the_passive_proxy_finds_be_plus_participle ... ok [INFO] [stdout] test feature::readability::tests::passive_spans_cover_the_construction ... ok [INFO] [stdout] test feature::readability::tests::the_spec_round_trips_and_defaults_to_vowel_group ... ok [INFO] [stdout] test feature::readability::tests::long_latinate_prose_grades_above_short_plain_prose ... ok [INFO] [stdout] test feature::richness::tests::mattr_matches_a_hand_computed_case ... ok [INFO] [stdout] test feature::punct::tests::em_dash_rate_is_per_thousand_lexical_tokens ... ok [INFO] [stdout] test feature::punct::tests::word_length_distribution_sums_to_one ... ok [INFO] [stdout] test feature::richness::tests::mtld_is_roughly_length_invariant ... ok [INFO] [stdout] test feature::readability::tests::empty_text_marks_everything_missing ... ok [INFO] [stdout] test feature::readability::tests::grades_are_missing_below_the_sentence_floor ... ok [INFO] [stdout] test feature::richness::tests::mtld_ranks_repetitive_text_lower ... ok [INFO] [stdout] test feature::richness::tests::yule_and_simpson_match_hand_computed_values ... ok [INFO] [stdout] test feature::richness::tests::mattr_is_missing_below_its_window ... ok [INFO] [stdout] test feature::richness::tests::everything_is_missing_below_the_floor ... ok [INFO] [stdout] test feature::sentence::tests::a_short_sentence_after_a_long_one_is_a_punch ... ok [INFO] [stdout] test feature::sentence::tests::an_unpaired_dash_is_an_interruption_not_an_aside ... ok [INFO] [stdout] test feature::sentence::tests::dispersion_is_missing_below_the_floor ... ok [INFO] [stdout] test feature::sentence::tests::discourse_markers_are_rates_per_thousand ... ok [INFO] [stdout] test feature::sentence::tests::asides_are_counted_with_their_length_and_share ... ok [INFO] [stdout] test feature::sentence::tests::link_and_footnote_densities_are_exact_per_thousand ... ok [INFO] [stdout] test feature::sentence::tests::a_document_with_no_clause_marks_has_no_final_clause_ratio ... ok [INFO] [stdout] test feature::sentence::tests::link_spans_survive_multi_byte_characters ... ok [INFO] [stdout] test feature::sentence::tests::link_spans_cover_the_whole_markup ... ok [INFO] [stdout] test feature::sentence::tests::punch_spans_point_at_the_short_sentence ... ok [INFO] [stdout] test feature::sentence::tests::markdown_affinity_shows_up ... ok [INFO] [stdout] test feature::sentence::tests::formulaic_openers_are_counted_per_hundred_sentences ... ok [INFO] [stdout] test feature::sentence::tests::the_new_dimensions_are_absent_unless_asked_for ... ok [INFO] [stdout] test feature::sentence::tests::the_rhythm_and_aside_dims_stay_in_the_sentence_family ... ok [INFO] [stdout] test feature::sentence::tests::rhetorical_questions_are_separated_from_real_ones ... ok [INFO] [stdout] test feature::sentence::tests::the_final_clause_ratio_falls_when_the_punch_is_short ... ok [INFO] [stdout] test feature::surprisal::tests::autocorrelation_of_a_constant_series_is_zero ... ok [INFO] [stdout] test feature::sentence::tests::uniform_sentence_lengths_have_low_dispersion ... ok [INFO] [stdout] test feature::packs::norms::tests::the_proxy_validates_and_round_trips ... ok [INFO] [stdout] test feature::sentence::tests::opener_spans_point_at_the_sentence ... ok [INFO] [stdout] test feature::surprisal::tests::a_short_body_is_not_a_setup ... ok [INFO] [stdout] test feature::packs::tests::every_pack_round_trips_through_json ... ok [INFO] [stdout] test feature::surprisal::tests::repetitive_text_has_flatter_surprisal ... ok [INFO] [stdout] test feature::surprisal::tests::short_corpus_is_rejected ... ok [INFO] [stdout] test feature::surprisal::tests::model_serializes_and_reproduces_scores ... ok [INFO] [stdout] test feature::surprisal::tests::splits_take_the_last_boundary_not_the_first ... ok [INFO] [stdout] test feature::surprisal::tests::a_reference_without_the_flag_deserializes_and_profiles_identically ... ok [INFO] [stdout] test feature::surprisal::tests::a_planted_final_clause_raises_the_punch_ratio ... ok [INFO] [stdout] test critique::tests::without_calibration_the_gate_is_unevaluated_not_failed ... ok [INFO] [stdout] test feature::syntax::tests::a_present_tense_verb_after_its_subject_is_finite ... ok [INFO] [stdout] test feature::syntax::tests::booster_chains_are_measured_and_missing_when_there_are_none ... ok [INFO] [stdout] test feature::syntax::tests::catalog_spans_point_at_the_sentence ... ok [INFO] [stdout] test feature::syntax::tests::concreteness_needs_its_norms ... ok [INFO] [stdout] test feature::surprisal::tests::in_corpus_text_is_less_surprising_than_out_of_corpus_text ... ok [INFO] [stdout] test feature::syntax::tests::empty_text_marks_everything_missing ... ok [INFO] [stdout] test feature::syntax::tests::escalation_rhythm_reads_the_shape_of_the_series ... ok [INFO] [stdout] test feature::syntax::tests::escalation_dims_are_missing_on_a_short_document ... ok [INFO] [stdout] test feature::surprisal::tests::punch_dims_carry_the_rhythm_family_not_the_surprisal_family ... ok [INFO] [stdout] test feature::syntax::tests::parataxis_shows_up_as_a_low_subordinator_ratio ... ok [INFO] [stdout] test feature::syntax::tests::fragment_spans_point_at_the_sentence ... ok [INFO] [stdout] test feature::syntax::tests::fragments_are_counted_exactly_on_the_fixture ... ok [INFO] [stdout] test feature::surprisal::tests::a_document_with_no_clause_splits_marks_the_punch_dims_missing ... ok [INFO] [stdout] test feature::syntax::tests::person_deixis_is_split_three_ways ... ok [INFO] [stdout] test critique::tests::more_adams_than_adams_trips_the_upper_band ... ok [INFO] [stdout] test feature::syntax::tests::polysyndeton_and_asyndeton_are_distinguished ... ok [INFO] [stdout] test feature::syntax::tests::the_ly_adverb_rule_has_a_documented_stoplist ... ok [INFO] [stdout] test feature::syntax::tests::sentence_initial_conjunctions_are_counted_per_hundred ... ok [INFO] [stdout] test feature::tests::confidence_tiers_are_ordered ... ok [INFO] [stdout] test feature::tests::feature_spec_round_trips_through_serde ... ok [INFO] [stdout] test feature::verse::tests::a_short_document_is_not_scanned_either ... ok [INFO] [stdout] test feature::syntax::tests::the_spec_round_trips_and_defaults_to_the_bundled_boosters ... ok [INFO] [stdout] test feature::syntax::tests::the_rare_word_tail_needs_a_background_and_says_so_without_one ... ok [INFO] [stdout] test feature::verse::tests::anaphora_and_epistrophe_are_counted_per_hundred_lines ... ok [INFO] [stdout] test feature::verse::tests::antithesis_uses_the_antonym_table ... ok [INFO] [stdout] test feature::verse::tests::feminine_endings_separate_the_two_fixtures ... ok [INFO] [stdout] test feature::surprisal::tests::punch_dims_need_the_word_model_and_say_so ... ok [INFO] [stdout] test feature::verse::tests::enjambment_and_end_stopping_are_complementary ... ok [INFO] [stdout] test feature::verse::tests::archaism_is_measured_as_a_ratio_and_two_rates ... ok [INFO] [stdout] test feature::verse::tests::prose_is_never_scanned_as_verse ... ok [INFO] [stdout] test feature::surprisal::tests::setup_entropy_is_informational_and_the_ratio_is_actionable ... ok [INFO] [stdout] test explain::tests::the_ai_pull_is_explained_by_the_expected_families ... ok [INFO] [stdout] test feature::verse::tests::line_geometry_captures_the_bukowski_axes ... ok [INFO] [stdout] test feature::syntax::tests::the_bukowski_thompson_contrast_separates_on_the_designed_axes ... ok [INFO] [stdout] test feature::verse::tests::the_doublet_proxy_is_relative_to_the_fitting_corpus ... ok [INFO] [stdout] test feature::syntax::tests::shouting_is_separated_from_acronyms ... ok [INFO] [stdout] test feature::verse::tests::vocatives_use_the_o_plus_np_rule ... ok [INFO] [stdout] test feature::vocab::tests::an_empty_document_marks_the_dims_missing_rather_than_zero ... ok [INFO] [stdout] test feature::vocab::tests::bigram_universe_spans_both_words ... ok [INFO] [stdout] test feature::vocab::tests::a_pre_change_artifact_loads_but_refuses_to_be_used ... ok [INFO] [stdout] test feature::vocab::tests::contrast_dims_are_actionable_so_they_can_become_findings ... ok [INFO] [stdout] test feature::vocab::tests::contrast_vocab_measures_a_rate_per_thousand_tokens ... ok [INFO] [stdout] test critique::tests::the_report_round_trips_as_json_and_matches_the_contract ... ok [INFO] [stdout] test feature::vocab::tests::empty_vocabulary_is_rejected ... ok [INFO] [stdout] test feature::vocab::tests::word_universe_extracts_lexical_tokens_only ... ok [INFO] [stdout] test reference::calibrate::tests::bracket_interpolates_in_log_space ... ok [INFO] [stdout] test feature::verse::tests::the_stress_profile_reports_a_fraction_per_position ... ok [INFO] [stdout] test feature::surprisal::tests::word_surprisal_attributes_spans ... ok [INFO] [stdout] test feature::verse::tests::the_spec_round_trips_and_records_the_syllable_method ... ok [INFO] [stdout] test feature::surprisal::tests::word_bigram_surprisal_attributes_the_rare_word ... ok [INFO] [stdout] test feature::verse::tests::the_spedding_split_separates_two_synthetic_corpora ... ok [INFO] [stdout] test reference::calibrate::tests::subsampling_preserves_the_ecdf ... ok [INFO] [stdout] test feature::vocab::tests::char_universe_keeps_spaces ... ok [INFO] [stdout] test feature::surprisal::tests::spike_spans_land_on_the_final_clause ... ok [INFO] [stdout] test reference::tests::empty_pipeline_is_rejected ... ok [INFO] [stdout] test feature::surprisal::tests::word_bigram_model_is_optional ... ok [INFO] [stdout] test reference::tests::em_dash_rate_dominates_the_explanation ... ok [INFO] [stdout] test reference::tests::contributions_sum_to_the_distance_for_every_metric ... ok [INFO] [stdout] test reference::tests::length_tiers_are_graded_not_a_cliff ... ok [INFO] [stdout] test reference::tests::fit_produces_named_dimensions_and_stats ... ok [INFO] [stdout] test reference::tests::missing_dimensions_are_imputed_to_the_corpus_mean ... ok [INFO] [stdout] test reference::tests::family_rollup_covers_the_distance ... ok [INFO] [stdout] test reference::tests::per_family_confidence_beats_one_document_level_number ... ok [INFO] [stdout] test reference::tests::minmax_never_sees_a_negative_value ... ok [INFO] [stdout] test reference::calibrate::tests::single_author_corpus_is_rejected ... ok [INFO] [stdout] test reference::tests::reference_round_trips_through_serde_with_identical_profiles ... ok [INFO] [stdout] test reference::tests::ranking_orders_by_distance ... ok [INFO] [stdout] test reference::tests::same_author_documents_are_closer_than_cross_author_ones ... ok [INFO] [stdout] test reference::tests::zero_variance_dimensions_still_carry_evidence ... ok [INFO] [stdout] test text::artifact::tests::detects_chatbot_residue ... ok [INFO] [stdout] test text::artifact::tests::clean_text_has_no_artifacts ... ok [INFO] [stdout] test text::artifact::tests::detects_homoglyph_word ... ok [INFO] [stdout] test reference::tests::profiles_from_different_references_cannot_be_compared ... ok [INFO] [stdout] test text::artifact::tests::detects_zero_width_characters ... ok [INFO] [stdout] test text::artifact::tests::emoji_zwj_sequences_are_not_flagged ... ok [INFO] [stdout] test text::normalize::tests::drops_zero_width_characters ... ok [INFO] [stdout] test text::normalize::tests::folds_cyrillic_homoglyphs_and_keeps_offsets ... ok [INFO] [stdout] test text::normalize::tests::folds_fullwidth_and_math_alphanumerics ... ok [INFO] [stdout] test text::normalize::tests::identity_view_for_plain_text ... ok [INFO] [stdout] test text::normalize::tests::token_normalization_borrows_when_unchanged ... ok [INFO] [stdout] test text::segment::tests::counts_markdown_structure ... ok [INFO] [stdout] test text::segment::tests::blank_before_marks_stanza_breaks ... ok [INFO] [stdout] test reference::tests::references_carry_exemplar_profiles ... ok [INFO] [stdout] test text::normalize::tests::script_classification ... ok [INFO] [stdout] test text::segment::tests::handles_quotes_after_terminator ... ok [INFO] [stdout] test text::segment::tests::every_line_span_slices_the_source_back_to_the_line ... ok [INFO] [stdout] test text::segment::tests::line_token_ranges_agree_with_the_source ... ok [INFO] [stdout] test text::segment::tests::splits_simple_sentences ... ok [INFO] [stdout] test text::segment::tests::token_ranges_cover_sentences ... ok [INFO] [stdout] test text::syllable::tests::a_dict_reference_fails_loudly_on_a_build_without_the_dictionary ... ok [INFO] [stdout] test text::syllable::tests::a_word_is_never_zero_syllables ... ok [INFO] [stdout] test text::segment::tests::numbered_list_markers_do_not_split ... ok [INFO] [stdout] test text::syllable::tests::silent_terminal_e_is_dropped_but_syllabic_le_is_not ... ok [INFO] [stdout] test text::syllable::tests::the_method_round_trips_and_defaults_to_vowel_group ... ok [INFO] [stdout] test text::segment::tests::respects_abbreviations ... ok [INFO] [stdout] test text::segment::tests::prose_still_has_lines_and_they_do_not_disturb_sentences ... ok [INFO] [stdout] test text::tests::document_round_trips_through_serde ... ok [INFO] [stdout] test text::tokenize::tests::char_ngrams_keep_spaces_and_map_back ... ok [INFO] [stdout] test text::tokenize::tests::cjk_and_emoji_do_not_panic ... ok [INFO] [stdout] test text::tokenize::tests::clitic_splitting ... ok [INFO] [stdout] test text::tokenize::tests::punctuation_can_be_dropped ... ok [INFO] [stdout] test text::tokenize::tests::punctuation_is_a_token_by_default ... ok [INFO] [stdout] test text::tokenize::tests::spans_round_trip_through_confusable_folding ... ok [INFO] [stdout] test text::syllable::tests::vowel_group_is_always_supported ... ok [INFO] [stdout] test text::tokenize::tests::spans_round_trip_to_source ... ok [INFO] [stdout] test text::tokenize::tests::tokenizer_policy_round_trips_through_serde ... ok [INFO] [stdout] test util::tests::ecdf_counts_at_or_below ... ok [INFO] [stdout] test util::tests::quantiles_interpolate ... ok [INFO] [stdout] test vector::tests::builder_produces_sorted_entries ... ok [INFO] [stdout] test vector::tests::dense_projection_fills_gaps ... ok [INFO] [stdout] test vector::tests::interner_round_trips ... ok [INFO] [stdout] test vector::tests::merge_walk_matches_hashmap_reference ... ok [INFO] [stdout] test vector::tests::span_tracking_is_opt_in ... ok [INFO] [stdout] test verify::tests::abstention_covers_the_middle ... ok [INFO] [stdout] test verify::tests::c_at_1_rewards_a_well_placed_grey_zone ... ok [INFO] [stdout] test util::tests::moments ... ok [INFO] [stdout] test text::tests::analysis_is_consistent ... ok [INFO] [stdout] test text::syllable::tests::ordinary_words_count_correctly ... ok [INFO] [stdout] test reference::tests::spans_survive_into_the_profile_when_tracked ... ok [INFO] [stdout] test reference::calibrate::tests::p_values_are_probabilities_and_monotone ... ok [INFO] [stdout] test reference::calibrate::tests::assessment_flows_through_compare ... ok [INFO] [stdout] test verify::tests::threshold_optimization_prefers_abstaining_over_guessing ... ok [INFO] [stdout] test reference::calibrate::tests::same_author_distances_sit_below_different_author_ones ... ok [INFO] [stdout] test reference::calibrate::tests::extrapolation_is_flagged ... ok [INFO] [stdout] test reference::calibrate::tests::fits_both_distributions_per_bin ... ok [INFO] [stdout] test critique::tests::a_calibrated_reference_evaluates_the_holistic_gate ... ok [INFO] [stdout] test critique::tests::a_calibration_for_the_wrong_metric_says_so ... ok [INFO] [stdout] test reference::calibrate::tests::calibration_round_trips_and_is_reproducible ... ok [INFO] [stdout] test verify::tests::the_same_seed_reproduces_the_same_score ... ok [INFO] [stdout] test verify::tests::degenerate_inputs_are_rejected ... ok [INFO] [stdout] test critique::tests::punch_dims_are_reportable_under_the_default_surprisal_canary ... ok [INFO] [stdout] test verify::tests::impostor_pool_excludes_named_authors ... ok [INFO] [stdout] test verify::tests::the_true_author_wins_and_a_stranger_does_not ... ok [INFO] [stdout] test verify::tests::feature_subsampling_actually_happens ... ok [INFO] [stdout] test verify::tests::scores_are_stable_across_seeds ... ok [INFO] [stdout] test reference::calibrate::tests::interpolation_lands_between_the_bracketing_bins ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/handprint_data-d64d77c799af1fa3) [INFO] [stdout] test reference::calibrate::tests::the_same_distance_reads_differently_at_different_lengths ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 377 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.66s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 51 tests [INFO] [stdout] test agent::tests::a_missing_directory_is_an_error_not_a_panic ... ok [INFO] [stdout] test agent::tests::an_empty_transcript_is_not_an_error ... ok [INFO] [stdout] test agent::tests::codex_ignores_user_turns_and_survives_truncation ... ok [INFO] [stdout] test agent::tests::claude_code_skips_short_messages_tool_calls_and_truncated_lines ... ok [INFO] [stdout] test agent::tests::claude_code_extracts_assistant_prose_with_per_message_models ... ok [INFO] [stdout] test agent::tests::extraction_summarizes_itself ... ok [INFO] [stdout] test gutenberg::tests::a_run_of_plate_captions_goes_and_a_lone_numbered_line_stays ... ok [INFO] [stdout] test gutenberg::tests::prose_that_merely_mentions_a_transcriber_is_left_alone ... ok [INFO] [stdout] test gutenberg::tests::a_book_with_no_headings_becomes_one_chapter_rather_than_none ... ok [INFO] [stdout] test gutenberg::tests::a_bracketed_note_is_removed_span_for_span ... ok [INFO] [stdout] test gutenberg::tests::a_note_in_a_dos_file_is_found_too ... ok [INFO] [stdout] test gutenberg::tests::a_note_near_the_front_loses_its_paragraph_and_not_the_book ... ok [INFO] [stdout] test gutenberg::tests::records_carry_the_book_and_chapter_in_provenance ... ok [INFO] [stdout] test agent::tests::codex_reasoning_is_opt_in ... ok [INFO] [stdout] test gutenberg::tests::boilerplate_would_dominate_a_profile_if_it_survived ... ok [INFO] [stdout] test agent::tests::reasoning_is_opt_in_and_labelled_separately ... ok [INFO] [stdout] test gutenberg::tests::chapterize_splits_on_headings_and_drops_front_matter ... ok [INFO] [stdout] test gutenberg::tests::a_publication_slug_goes_but_a_sentence_about_publishing_stays ... ok [INFO] [stdout] test gutenberg::tests::short_chapters_merge_into_their_predecessor ... ok [INFO] [stdout] test gutenberg::tests::slugs_are_filesystem_safe ... ok [INFO] [stdout] test gutenberg::tests::chapter_headings_are_recognized_in_their_usual_forms ... ok [INFO] [stdout] test agent::tests::files_are_discovered_recursively_and_sorted ... ok [INFO] [stdout] test gutenberg::tests::the_legacy_variant_is_handled_by_the_fallback_scanner ... ok [INFO] [stdout] test gutenberg::tests::the_modern_markers_are_stripped_from_both_ends ... ok [INFO] [stdout] test gutenberg::tests::the_older_sign_off_inside_the_modern_markers_is_cut ... ok [INFO] [stdout] test gutenberg::tests::an_unrecognized_file_is_returned_whole_and_flagged ... ok [INFO] [stdout] test gutenberg::tests::watsons_list_of_holmess_limits_is_not_a_plate_index ... ok [INFO] [stdout] test gutenberg::tests::the_etexts_own_provenance_page_is_not_the_author ... ok [INFO] [stdout] test hn::tests::parses_hits_into_records ... ok [INFO] [stdout] test hn::tests::the_cutoff_constant_is_november_2022 ... ok [INFO] [stdout] test hn::tests::the_cutoff_drops_post_chatgpt_comments ... ok [INFO] [stdout] test hn::tests::entity_decoding_covers_the_common_cases ... ok [INFO] [stdout] test hn::tests::urls_are_built_correctly ... ok [INFO] [stdout] test record::tests::round_trips_through_json ... ok [INFO] [stdout] test strip::tests::diff_bodies_are_dropped ... ok [INFO] [stdout] test strip::tests::inline_spans_leave_an_empty_shell ... ok [INFO] [stdout] test record::tests::grouping_prefers_the_model_label ... ok [INFO] [stdout] test jsonl::tests::truncated_lines_are_counted_not_fatal ... ok [INFO] [stdout] test record::tests::corpus_groups_by_label ... ok [INFO] [stdout] test strip::tests::fenced_blocks_leave_an_empty_shell ... ok [INFO] [stdout] test jsonl::tests::round_trips_through_a_file ... ok [INFO] [stdout] test strip::tests::unterminated_fences_do_not_swallow_the_rest ... ok [INFO] [stdout] test strip::tests::mostly_code_messages_are_rejected ... ok [INFO] [stdout] test strip::tests::urls_and_paths_are_dropped_but_ordinary_prose_survives ... ok [INFO] [stdout] test agent::tests::codex_tracks_the_model_across_turn_contexts ... ok [INFO] [stdout] test gutenberg::tests::a_trailing_transcribers_note_is_truncated_whole ... ok [INFO] [stdout] test gutenberg::tests::the_jurisdiction_split_is_data_not_folklore ... ok [INFO] [stdout] test hn::tests::malformed_responses_are_errors ... ok [INFO] [stdout] test strip::tests::prose_survival_rate_is_high_on_a_realistic_message ... ok [INFO] [stdout] test strip::tests::short_messages_are_rejected ... ok [INFO] [stdout] test hn::tests::html_is_decoded_not_counted_as_style ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 51 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s [INFO] [stdout] [INFO] [stderr] Doc-tests handprint_core [INFO] [stdout] [INFO] [stdout] running 3 tests [INFO] [stdout] test crates/handprint-core/src/lib.rs - (line 126) ... ok [INFO] [stdout] test crates/handprint-core/src/feature/char_ngram.rs - feature::char_ngram::CharNgrams::new (line 157) ... ok [INFO] [stdout] test crates/handprint-core/src/lib.rs - (line 91) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.86s [INFO] [stdout] [INFO] [stderr] Doc-tests handprint_data [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" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13", kill_on_drop: false }` [INFO] [stdout] b0dae4786ba419497125c7392894d452087d8018849942ffc83afff80b2f1a13