[INFO] cloning repository https://github.com/xwings/kerness
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/xwings/kerness" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxwings%2Fkerness", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxwings%2Fkerness'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 446b56376e0de89c75b028531e4aa860e1dd9a27
[INFO] testing xwings/kerness against 1.100.0-beta.1 for beta-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxwings%2Fkerness" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/xwings/kerness
[INFO] finished tweaking git repo https://github.com/xwings/kerness
[INFO] tweaked toml for git repo https://github.com/xwings/kerness written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/xwings/kerness 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/xwings/kerness 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-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef
[INFO] running `Command { std: "docker" "start" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", 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" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef" "/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" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", 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" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling target-lexicon v0.12.16
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling find-msvc-tools v0.1.11
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling shlex v2.0.1
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling cc v1.4.4
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling zmij v1.0.23
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling pyo3-build-config v0.23.5
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling syn v3.0.4
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling rustls v0.23.43
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling pyo3-macros-backend v0.23.5
[INFO] [stderr]    Compiling pyo3-ffi v0.23.5
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]    Compiling webpki-roots v1.0.9
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling log v0.4.34
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling hashlink v0.11.1
[INFO] [stderr]    Compiling pyo3 v0.23.5
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling arraydeque v0.5.1
[INFO] [stderr]    Compiling yaml-rust2 v0.11.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling unindent v0.2.4
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling rustls-webpki v0.103.15
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling fancy-regex v0.14.0
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling icu_provider v2.3.1
[INFO] [stderr]    Compiling pyo3-macros v0.23.5
[INFO] [stderr]    Compiling icu_properties v2.3.0
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling ureq v2.12.1
[INFO] [stderr]    Compiling kerness v0.1.2 (/opt/rustwide/workdir/crates/kerness)
[INFO] [stderr]    Compiling kerness-py v0.1.2 (/opt/rustwide/workdir/bindings/python)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 46s
[INFO] running `Command { std: "docker" "inspect" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", 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" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling kerness v0.1.2 (/opt/rustwide/workdir/crates/kerness)
[INFO] [stderr]    Compiling kerness-py v0.1.2 (/opt/rustwide/workdir/bindings/python)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 46.69s
[INFO] running `Command { std: "docker" "inspect" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", 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" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.20s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/kerness/e2d36e550cade66b/out/kerness-e2d36e550cade66b)
[INFO] [stdout] 
[INFO] [stdout] running 415 tests
[INFO] [stdout] test access::tests::a_bare_star_allows_every_command ... ok
[INFO] [stdout] test access::tests::a_command_glob_is_anchored_at_both_ends ... ok
[INFO] [stdout] test access::tests::a_command_pattern_searches_rather_than_matches ... ok
[INFO] [stdout] test access::tests::a_home_relative_allowlist_is_expanded ... ok
[INFO] [stdout] test access::tests::a_command_naming_no_url_is_not_narrowed_by_the_host_list ... ok
[INFO] [stdout] test access::tests::a_host_list_narrows_an_auto_approved_prefix_too ... ok
[INFO] [stdout] test access::tests::a_bare_policy_allows_nothing_but_trusts_skill_bundles ... ok
[INFO] [stdout] test access::tests::a_host_list_narrows_a_command_that_was_otherwise_allowed ... ok
[INFO] [stdout] test access::tests::a_refused_path_is_named_by_where_it_lands_not_by_what_was_typed ... ok
[INFO] [stdout] test access::tests::a_host_pattern_is_an_anchored_glob_over_the_hostname ... ok
[INFO] [stdout] test access::tests::a_workspace_grants_its_contents_and_names_itself_when_it_refuses ... ok
[INFO] [stdout] test access::tests::an_allowed_dir_covers_itself_and_everything_under_it ... ok
[INFO] [stdout] test access::tests::a_symlink_out_of_an_allowed_dir_is_denied ... ok
[INFO] [stdout] test access::tests::an_empty_host_list_leaves_a_permitted_command_alone ... ok
[INFO] [stdout] test access::tests::an_allowed_file_grants_that_file_and_no_sibling ... ok
[INFO] [stdout] test access::tests::a_yes_saying_approver_cannot_widen_the_path_boundary ... ok
[INFO] [stdout] test access::tests::an_unmatched_command_rests_entirely_on_the_prompt ... ok
[INFO] [stdout] test access::tests::an_allowlist_reaches_outside_the_workspace ... ok
[INFO] [stdout] test access::tests::an_approval_authorizes_one_request_and_not_the_next ... ok
[INFO] [stdout] test access::tests::an_unset_workspace_is_the_current_directory_not_the_filesystem ... ok
[INFO] [stdout] test access::tests::each_command_mechanism_admits_on_its_own ... ok
[INFO] [stdout] test access::tests::the_console_prompt_takes_yes_an_empty_line_and_nothing_else ... ok
[INFO] [stdout] test access::tests::no_prompt_at_all_still_denies_and_names_the_way_back_in ... ok
[INFO] [stdout] test access::tests::the_host_is_read_past_userinfo_a_port_and_a_path ... ok
[INFO] [stdout] test access::tests::allow_dirs_widens_a_live_manager_and_the_policy_behind_it ... ok
[INFO] [stdout] test access::tests::every_url_on_the_line_is_checked_not_only_the_first ... ok
[INFO] [stdout] test access::tests::the_console_prompt_names_the_agent_and_denies_without_a_terminal ... ok
[INFO] [stdout] test access::tests::an_agent_workspace_narrows_the_sessions_and_cannot_widen_it ... ok
[INFO] [stdout] test access::tests::an_invalid_pattern_is_skipped_not_raised ... ok
[INFO] [stdout] test access::tests::an_empty_command_is_denied_before_any_allowlist ... ok
[INFO] [stdout] test agent::tests::a_missing_persona_file_fails_and_names_what_it_tried ... ok
[INFO] [stdout] test agent::tests::a_named_role_is_kept_verbatim_until_the_session_reads_it ... ok
[INFO] [stdout] test access::tests::the_prompt_is_told_what_it_is_approving ... ok
[INFO] [stdout] test access::tests::the_sessions_own_files_are_confined_by_the_same_check ... ok
[INFO] [stdout] test agent::tests::a_model_named_nowhere_is_an_error_that_says_both_places_to_set_it ... ok
[INFO] [stdout] test agent::tests::a_plain_prose_persona_is_untouched ... ok
[INFO] [stdout] test agent::tests::an_agent_with_its_own_provider_must_bring_its_own_model ... ok
[INFO] [stdout] test agent::tests::a_session_that_pins_nothing_leaves_the_agent_pinning_nothing ... ok
[INFO] [stdout] test agent::tests::every_decoration_is_appended_to_the_base ... ok
[INFO] [stdout] test access::tests::traversal_and_symlinks_cannot_step_out_of_the_root ... ok
[INFO] [stdout] test agent::tests::show_reasoning_says_yes_no_or_nothing_at_all ... ok
[INFO] [stdout] test agent::tests::an_undecorated_agent_gets_the_prompt_it_was_given ... ok
[INFO] [stdout] test access::tests::traversal_out_of_an_allowed_dir_is_denied ... ok
[INFO] [stdout] test agent::tests::the_system_prompt_leads_and_history_follows_in_order ... ok
[INFO] [stdout] test agent::tests::a_persona_file_is_loaded_and_formatted ... ok
[INFO] [stdout] test agent_runtime::tests::a_failed_opening_call_returns_a_placeholder ... ok
[INFO] [stdout] test agent::tests::an_unset_option_takes_the_sessions_and_a_set_one_keeps_its_own ... ok
[INFO] [stdout] test agent::tests::placeholders_carry_the_agents_own_identity ... ok
[INFO] [stdout] test agent::tests::the_two_positions_are_exclusive_and_participant_is_the_default ... ok
[INFO] [stdout] test agent_runtime::tests::a_failed_followup_returns_a_placeholder ... ok
[INFO] [stdout] test agent_runtime::tests::a_recovering_model_is_not_penalised_for_an_earlier_bad_block ... ok
[INFO] [stdout] test agent_runtime::tests::a_model_stuck_on_invalid_json_does_not_loop_forever ... ok
[INFO] [stdout] test agent_runtime::tests::a_failing_call_the_model_varies_is_left_alone ... ok
[INFO] [stdout] test agent_runtime::tests::a_native_call_round_trips_through_the_response_not_the_text ... ok
[INFO] [stdout] test agent_runtime::tests::a_tool_that_keeps_succeeding_is_never_cut_off ... ok
[INFO] [stdout] test agent_runtime::tests::an_error_result_is_fed_back_rather_than_re_prompted ... ok
[INFO] [stdout] test agent_runtime::tests::schemas_are_sent_natively_and_never_under_text ... ok
[INFO] [stdout] test agent_runtime::tests::a_model_repeating_one_failing_call_does_not_loop_forever ... ok
[INFO] [stdout] test agent_runtime::tests::the_instruction_is_appended_after_the_history ... ok
[INFO] [stdout] test agent_runtime::tests::a_reply_without_tool_calls_is_returned_as_is ... ok
[INFO] [stdout] test agent_runtime::tests::a_fenced_call_still_works_under_a_native_dialect ... ok
[INFO] [stdout] test agent_runtime::tests::anthropic_results_ride_in_a_user_message ... ok
[INFO] [stdout] test agent_runtime::tests::recording_captures_the_whole_exchange_when_asked ... ok
[INFO] [stdout] test agent_runtime::tests::the_agents_own_effort_rides_along_on_every_call_of_the_turn ... ok
[INFO] [stdout] test channel::tests::a_failing_channel_does_not_starve_the_others ... ok
[INFO] [stdout] test agent_runtime::tests::tool_output_is_fed_back_and_the_final_text_returned ... ok
[INFO] [stdout] test channel::tests::console_lines_are_composed_here_and_delivered_through_the_writer ... ok
[INFO] [stdout] test assets::tests::the_repository_copy_is_found_without_any_wiring ... ok
[INFO] [stdout] test channel::tests::leap_days_and_century_boundaries_land_on_the_right_date ... ok
[INFO] [stdout] test channel::tests::the_file_channel_appends_a_line_per_message ... ok
[INFO] [stdout] test channel::tests::timestamps_render_the_way_python_renders_them ... ok
[INFO] [stdout] test compaction::tests::a_conversation_that_fits_is_left_alone ... ok
[INFO] [stdout] test assets::tests::a_directory_that_is_not_there_lists_as_empty ... ok
[INFO] [stdout] test assets::tests::stems_are_listed_from_disk_and_sorted ... ok
[INFO] [stdout] test channel::tests::the_log_channel_writes_one_typed_event_per_line ... ok
[INFO] [stdout] test compaction::tests::estimates_count_the_rendered_form ... ok
[INFO] [stdout] test compaction::tests::the_topic_and_the_latest_turn_always_survive ... ok
[INFO] [stdout] test agent_runtime::tests::the_loop_runs_more_than_one_round ... ok
[INFO] [stdout] test compaction::tests::a_single_oversized_turn_is_left_alone ... ok
[INFO] [stdout] test compaction::tests::the_summary_request_carries_the_prompt_and_the_dropped_prose ... ok
[INFO] [stdout] test conversation::tests::replacing_turns_leaves_the_transcript_whole ... ok
[INFO] [stdout] test context::tests::a_closure_is_a_context_source ... ok
[INFO] [stdout] test conversation::tests::a_directive_is_rendered_unchanged ... ok
[INFO] [stdout] test compaction::tests::an_empty_summary_leaves_the_conversation_intact ... ok
[INFO] [stdout] test conversation::tests::an_agent_turn_regains_its_speaker_prefix ... ok
[INFO] [stdout] test conversation::tests::directives_never_reach_the_transcript_and_notes_never_reach_the_model ... ok
[INFO] [stdout] test error::tests::a_refusal_about_length_is_told_apart_from_every_other_refusal ... ok
[INFO] [stdout] test error::tests::an_overflow_is_still_a_provider_error ... ok
[INFO] [stdout] test agent_runtime::tests::concurrent_fallback_preserves_an_in_flight_native_tool_response ... ok
[INFO] [stdout] test agent_runtime::tests::the_tool_iteration_bound_stops_the_loop ... ok
[INFO] [stdout] test exec::tests::reads_and_listings_go_through_the_policy ... ok
[INFO] [stdout] test exec::tests::a_command_that_splits_to_no_program_is_refused_rather_than_panicking ... ok
[INFO] [stdout] test exec::tests::listing_a_file_says_so_rather_than_returning_nothing ... ok
[INFO] [stdout] test exec::tests::the_policy_is_consulted_before_anything_is_spawned ... ok
[INFO] [stdout] test exec::tests::unbalanced_quoting_is_refused_before_the_policy_check ... ok
[INFO] [stdout] test exec::tests::a_failing_command_reports_its_code_and_stderr ... ok
[INFO] [stdout] test exec::tests::there_is_no_shell_so_metacharacters_are_arguments ... ok
[INFO] [stdout] test exec::tests::an_allowed_command_returns_its_stdout ... ok
[INFO] [stdout] test gameplan::tests::a_missing_gameplan_is_named_in_the_error ... ok
[INFO] [stdout] test gameplan::tests::a_file_with_no_frontmatter_loads_on_harness_defaults ... ok
[INFO] [stdout] test gameplan::tests::an_undeclared_name_falls_back_to_the_filename ... ok
[INFO] [stdout] test gameplan::tests::a_custom_gameplan_loads_from_an_absolute_path ... ok
[INFO] [stdout] test gameplan::tests::debates_bounds_terminators_and_result_shape_are_read ... ok
[INFO] [stdout] test gameplan::tests::invalid_yaml_reports_the_file ... ok
[INFO] [stdout] test gameplan::tests::every_discovered_gameplan_loads_under_its_own_name ... ok
[INFO] [stdout] test gameplan::tests::discussion_has_no_consensus_terminator ... ok
[INFO] [stdout] test harness::tests::a_malformed_phase_list_is_rejected ... ok
[INFO] [stdout] test harness::tests::a_name_clash_with_the_orchestrator_is_a_problem_too ... ok
[INFO] [stdout] test harness::tests::a_passing_session_returns_what_it_may_use ... ok
[INFO] [stdout] test gameplan::tests::the_body_is_the_prose_and_raw_text_is_the_whole_file ... ok
[INFO] [stdout] test harness::tests::a_reserved_tool_name_is_rejected_at_load ... ok
[INFO] [stdout] test harness::tests::a_result_field_takes_the_shorthand_or_the_long_form ... ok
[INFO] [stdout] test harness::tests::a_scalar_of_the_wrong_type_is_rejected_not_coerced ... ok
[INFO] [stdout] test harness::tests::a_single_terminator_is_wrapped_and_none_at_all_is_refused ... ok
[INFO] [stdout] test harness::tests::an_unknown_context_source_is_an_error_and_says_how_to_register_one ... ok
[INFO] [stdout] test harness::tests::an_unknown_tool_is_an_error_not_a_silent_drop ... ok
[INFO] [stdout] test harness::tests::a_bare_spec_is_usable ... ok
[INFO] [stdout] test harness::tests::participant_bounds_default_open_and_parse_when_given ... ok
[INFO] [stdout] test harness::tests::a_name_is_optional_but_must_be_a_slug_when_given ... ok
[INFO] [stdout] test exec::tests::cwd_is_where_the_command_runs ... ok
[INFO] [stdout] test harness::tests::the_context_key_narrows_what_was_registered ... ok
[INFO] [stdout] test harness::tests::the_orchestrator_key_takes_two_shapes_and_refuses_a_third ... ok
[INFO] [stdout] test harness::tests::phase_fields_default_to_one_round_and_no_rethink ... ok
[INFO] [stdout] test harness::tests::the_consensus_keyword_is_recognised_only_when_declared ... ok
[INFO] [stdout] test harness::tests::every_problem_with_the_roster_is_reported_at_once ... ok
[INFO] [stdout] test harness::tests::the_skills_key_unions_with_the_session_and_dedupes ... ok
[INFO] [stdout] test harness::tests::the_roster_must_fit_the_declared_bounds ... ok
[INFO] [stdout] test harness::tests::loop_defaults_include_the_judges_rethink ... ok
[INFO] [stdout] test harness::tests::unsatisfiable_bounds_are_rejected ... ok
[INFO] [stdout] test harness::tests::the_tools_key_narrows_what_was_registered ... ok
[INFO] [stdout] test jsonschema::tests::a_closed_empty_object_rejects_every_argument ... ok
[INFO] [stdout] test jsonschema::tests::a_boolean_is_not_a_number ... ok
[INFO] [stdout] test jsonschema::tests::a_non_object_schema_is_refused ... ok
[INFO] [stdout] test jsonschema::tests::a_ref_with_siblings_is_inlined_and_the_siblings_win ... ok
[INFO] [stdout] test jsonschema::tests::enum_failures_quote_the_choices_the_way_python_would ... ok
[INFO] [stdout] test jsonschema::tests::required_and_type_failures_read_as_instructions ... ok
[INFO] [stdout] test jsonschema::tests::a_single_element_all_of_is_inlined ... ok
[INFO] [stdout] test jsonschema::tests::strict_closes_objects_and_requires_every_property ... ok
[INFO] [stdout] test gameplan::tests::every_gameplan_has_think_and_rethink ... ok
[INFO] [stdout] test memory::tests::a_curated_scope_is_dated_by_its_file_and_undated_before_there_is_one ... ok
[INFO] [stdout] test memory::tests::a_blank_entry_writes_nothing ... ok
[INFO] [stdout] test memory::tests::a_curated_scope_is_a_key_and_never_a_path_out_of_the_root ... ok
[INFO] [stdout] test memory::tests::a_curated_scope_survives_the_store_that_wrote_it ... ok
[INFO] [stdout] test memory::tests::a_failed_consolidation_keeps_the_notes_as_they_were_written ... ok
[INFO] [stdout] test memory::tests::a_file_written_now_is_zero_days_old_and_an_absent_one_has_no_age ... ok
[INFO] [stdout] test memory::tests::a_hand_edited_file_loads_as_the_entries_it_visibly_holds ... ok
[INFO] [stdout] test http::tests::response_errors_are_distinct_from_network_failures ... ok
[INFO] [stdout] test memory::tests::a_note_already_stored_word_for_word_is_accepted_and_not_stored_twice ... ok
[INFO] [stdout] test memory::tests::a_reload_sees_what_was_written ... ok
[INFO] [stdout] test memory::tests::a_scope_is_a_key_and_never_a_path_out_of_the_root ... ok
[INFO] [stdout] test memory::tests::a_scope_is_dated_by_its_file_and_undated_before_there_is_one ... ok
[INFO] [stdout] test memory::tests::a_scope_never_opened_still_reads_what_is_on_disk ... ok
[INFO] [stdout] test memory::tests::a_store_writing_no_file_answers_the_defaults_and_leaves_no_trace ... ok
[INFO] [stdout] test memory::tests::a_revision_past_the_ceiling_is_refused_and_the_entry_survives ... ok
[INFO] [stdout] test memory::tests::a_store_with_no_ceiling_refuses_to_revise_and_says_so ... ok
[INFO] [stdout] test memory::tests::an_append_past_the_ceiling_is_refused_and_says_what_is_stored ... ok
[INFO] [stdout] test memory::tests::a_scope_survives_the_store_that_wrote_it ... ok
[INFO] [stdout] test memory::tests::a_second_consolidation_is_given_the_first_one_to_build_on ... ok
[INFO] [stdout] test memory::tests::entries_read_back_behind_a_line_saying_how_full_the_scope_is ... ok
[INFO] [stdout] test memory::tests::entries_are_separated_by_a_blank_line_and_nothing_else_is_added ... ok
[INFO] [stdout] test memory::tests::loading_an_absent_file_reads_empty_and_creates_nothing ... ok
[INFO] [stdout] test memory::tests::revising_to_nothing_removes_the_entry ... ok
[INFO] [stdout] test memory::tests::the_default_store_reports_its_path_and_the_age_of_the_file ... ok
[INFO] [stdout] test memory::tests::a_fragment_matching_none_or_several_changes_nothing_and_names_which ... ok
[INFO] [stdout] test memory::tests::writing_creates_the_parent_directory ... ok
[INFO] [stdout] test orchestrator::tests::a_headless_loop_takes_no_turns ... ok
[INFO] [stdout] test memory::tests::revising_replaces_the_whole_entry_a_fragment_addresses ... ok
[INFO] [stdout] test memory::tests::the_default_store_keeps_one_file_per_scope ... ok
[INFO] [stdout] test memory::tests::entries_read_back_verbatim_until_something_consolidates_them ... ok
[INFO] [stdout] test orchestrator::tests::a_harness_that_declares_no_keyword_ignores_the_word ... ok
[INFO] [stdout] test orchestrator::tests::a_phase_less_harness_is_briefed_nothing_and_reports_no_phase ... ok
[INFO] [stdout] test orchestrator::tests::a_recovering_retry_continues_the_session ... ok
[INFO] [stdout] test orchestrator::tests::a_rethink_phase_says_so_in_the_turn_itself ... ok
[INFO] [stdout] test orchestrator::tests::a_phase_less_run_briefs_nobody ... ok
[INFO] [stdout] test orchestrator::tests::a_saved_index_past_the_end_of_an_edited_gameplan_is_clamped ... ok
[INFO] [stdout] test orchestrator::tests::a_resumed_run_carries_its_predecessors_turn_count_and_phase ... ok
[INFO] [stdout] test orchestrator::tests::advancing_past_the_last_phase_ends_the_run ... ok
[INFO] [stdout] test orchestrator::tests::a_terminator_still_exits_early ... ok
[INFO] [stdout] test orchestrator::tests::an_at_mention_routes_only_to_a_participant_the_loop_knows ... ok
[INFO] [stdout] test orchestrator::tests::declared_fields_are_named_in_the_prompt_and_nothing_else_is ... ok
[INFO] [stdout] test orchestrator::tests::hitting_max_turns_during_retries_is_not_a_forced_end ... ok
[INFO] [stdout] test orchestrator::tests::interrupted_and_host_batches_keep_only_completed_durable_replies ... ok
[INFO] [stdout] test memory::tests::closing_folds_everything_past_the_kept_entries_into_one_summary ... ok
[INFO] [stdout] test orchestrator::tests::every_declared_type_and_alias_is_coerced ... ok
[INFO] [stdout] test orchestrator::tests::every_orchestrator_turn_carries_the_briefing_as_it_stands ... ok
[INFO] [stdout] test orchestrator::tests::invalid_batches_retry_without_executing_embedded_text_controls ... ok
[INFO] [stdout] test orchestrator::tests::explicit_batches_preserve_instructions_and_order_across_checkpoints ... ok
[INFO] [stdout] test orchestrator::tests::max_rounds_is_not_a_total_across_phases ... ok
[INFO] [stdout] test orchestrator::tests::max_rounds_caps_a_single_phase ... ok
[INFO] [stdout] test orchestrator::tests::max_rounds_bounds_a_phase_less_harness ... ok
[INFO] [stdout] test orchestrator::tests::only_the_consensus_keyword_sets_the_consensus_flag ... ok
[INFO] [stdout] test orchestrator::tests::max_turns_still_outranks_max_rounds ... ok
[INFO] [stdout] test orchestrator::tests::retries_answer_to_max_turns_too ... ok
[INFO] [stdout] test orchestrator::tests::result_fields_are_asked_for_again_and_taken_from_the_second_pass ... ok
[INFO] [stdout] test orchestrator::tests::phases_arrive_in_declared_order ... ok
[INFO] [stdout] test orchestrator::tests::it_runs_the_declared_number_of_rounds_and_stops ... ok
[INFO] [stdout] test orchestrator::tests::the_declared_fields_alone_decide_what_comes_back ... ok
[INFO] [stdout] test exec::tests::output_larger_than_a_pipe_buffer_still_completes ... ok
[INFO] [stdout] test orchestrator::tests::the_briefing_names_who_still_owes_a_turn_and_is_reissued ... ok
[INFO] [stdout] test orchestrator::tests::the_declared_keyword_ends_it_and_an_undeclared_one_does_not ... ok
[INFO] [stdout] test orchestrator::tests::it_takes_the_last_straggler_and_not_a_repeat_to_close_one ... ok
[INFO] [stdout] test orchestrator::tests::the_hint_quotes_the_declared_keywords ... ok
[INFO] [stdout] test orchestrator::tests::retries_exhaust_into_a_forced_end_and_zero_means_none ... ok
[INFO] [stdout] test orchestrator::tests::the_last_phase_running_out_stops_the_loop_and_still_closes ... ok
[INFO] [stdout] test orchestrator::tests::the_loop_uses_the_declared_shape ... ok
[INFO] [stdout] test orchestrator::tests::the_json_block_is_stripped_from_the_summary ... ok
[INFO] [stdout] test orchestrator::tests::the_object_is_read_fenced_or_bare ... ok
[INFO] [stdout] test orchestrator::tests::the_rethink_prompt_carries_the_draft_and_asks_for_exactly_what_is_declared ... ok
[INFO] [stdout] test orchestrator::tests::max_turns_stops_a_loop_that_never_ends ... ok
[INFO] [stdout] test orchestrator::tests::the_retry_budget_comes_from_the_harness ... ok
[INFO] [stdout] test orchestrator::tests::the_loop_records_the_stripped_text ... ok
[INFO] [stdout] test orchestrator::tests::the_verdict_rethink_is_on_by_default_and_a_harness_can_turn_it_off ... ok
[INFO] [stdout] test persona::tests::a_bare_name_resolves_to_the_built_ins ... ok
[INFO] [stdout] test orchestrator::tests::the_draft_is_revised_and_only_the_revision_is_kept ... ok
[INFO] [stdout] test persona::tests::a_file_with_no_title_is_named_for_itself ... ok
[INFO] [stdout] test orchestrator::tests::the_keyword_advances_the_phase_whether_or_not_it_routes ... ok
[INFO] [stdout] test persona::tests::a_search_directory_is_tried_before_the_built_ins ... ok
[INFO] [stdout] test prompting::tests::a_native_dialect_drops_the_prose_tools_block ... ok
[INFO] [stdout] test orchestrator::tests::the_phase_rides_every_routed_turn_without_displacing_the_ask ... ok
[INFO] [stdout] test persona::tests::every_section_is_parsed_and_the_title_wins_over_the_stem ... ok
[INFO] [stdout] test persona::tests::only_the_sections_that_are_set_reach_the_prompt ... ok
[INFO] [stdout] test prompting::tests::a_participants_persona_and_language_survive ... ok
[INFO] [stdout] test orchestrator::tests::the_re_ask_names_the_participant_still_owed_a_turn ... ok
[INFO] [stdout] test prompting::tests::a_stale_file_carries_a_caveat_and_a_fresh_one_does_not ... ok
[INFO] [stdout] test prompting::tests::context_precedes_the_skills_it_is_background_for ... ok
[INFO] [stdout] test prompting::tests::history_follows_the_system_message_and_is_not_mutated ... ok
[INFO] [stdout] test prompting::tests::an_agents_own_system_prompt_overrides_the_default ... ok
[INFO] [stdout] test prompting::tests::context_with_nothing_in_it_renders_nothing ... ok
[INFO] [stdout] test prompting::tests::every_context_block_arrives_under_its_own_name ... ok
[INFO] [stdout] test persona::tests::the_not_found_error_names_every_directory_tried ... ok
[INFO] [stdout] test prompting::tests::a_participants_memory_rides_with_its_skills_before_the_tools ... ok
[INFO] [stdout] test prompting::tests::memory_is_quoted_as_participant_notes_and_not_as_instruction ... ok
[INFO] [stdout] test prompting::tests::memory_with_nothing_in_it_renders_nothing ... ok
[INFO] [stdout] test prompting::tests::show_reasoning_reaches_the_participant_prompt ... ok
[INFO] [stdout] test prompting::tests::the_dialect_is_resolved_per_agent ... ok
[INFO] [stdout] test prompting::tests::only_a_writable_session_invites_notes ... ok
[INFO] [stdout] test prompting::tests::the_freshness_caveat_rides_with_the_memory_age_source ... ok
[INFO] [stdout] test prompting::tests::messages_for_routes_by_position ... ok
[INFO] [stdout] test prompting::tests::no_resolver_means_text ... ok
[INFO] [stdout] test prompting::tests::the_tools_block_reflects_the_currently_permitted_set ... ok
[INFO] [stdout] test persona::tests::the_built_ins_are_enumerated_from_disk ... ok
[INFO] [stdout] test provider::tests::a_400_naming_tools_latches_down_to_text_for_good ... ok
[INFO] [stdout] test prompting::tests::no_skills_no_tools_and_no_memory_is_just_the_base ... ok
[INFO] [stdout] test prompting::tests::the_orchestrator_order_is_base_skills_tools_memory ... ok
[INFO] [stdout] test provider::tests::a_declared_dialect_wins_when_chat_can_carry_tools ... ok
[INFO] [stdout] test provider::tests::a_failure_that_is_not_about_the_effort_parameter_does_not_latch ... ok
[INFO] [stdout] test provider::tests::a_model_with_no_reasoning_mode_retries_once_without_the_level ... ok
[INFO] [stdout] test provider::tests::a_chat_that_cannot_carry_tools_falls_back_to_text ... ok
[INFO] [stdout] test provider::tests::a_custom_endpoint_is_a_bearer_token_and_a_joined_url ... ok
[INFO] [stdout] test provider::tests::a_failure_that_is_not_about_tools_does_not_latch ... ok
[INFO] [stdout] test provider::tests::a_reply_that_is_not_json_is_reported_with_the_response_shape ... ok
[INFO] [stdout] test provider::tests::a_plain_openai_turn_is_untouched ... ok
[INFO] [stdout] test provider::tests::a_rejected_endpoint_retries_once_without_tools ... ok
[INFO] [stdout] test provider::tests::a_second_refusal_is_reported_rather_than_retried ... ok
[INFO] [stdout] test provider::tests::an_explicit_max_tokens_outranks_the_model_config ... ok
[INFO] [stdout] test provider::tests::an_extra_body_outranks_the_effort_key_it_shares_a_name_with ... ok
[INFO] [stdout] test provider::tests::an_oauth_credential_replaces_the_api_key_header ... ok
[INFO] [stdout] test provider::tests::claude_reads_every_block_in_the_content_list ... ok
[INFO] [stdout] test provider::tests::claude_takes_the_system_prompt_as_its_own_field ... ok
[INFO] [stdout] test provider::tests::each_dialect_sends_its_own_schema_shape ... ok
[INFO] [stdout] test provider::tests::each_backend_spells_the_effort_level_its_own_way ... ok
[INFO] [stdout] test provider::tests::an_unnamed_schema_is_still_named ... ok
[INFO] [stdout] test provider::tests::every_system_message_is_lifted_out_and_none_is_lost ... ok
[INFO] [stdout] test provider::tests::a_400_naming_the_effort_parameter_latches_it_off_for_good ... ok
[INFO] [stdout] test provider::tests::a_tool_call_with_null_content_is_a_turn ... ok
[INFO] [stdout] test provider::tests::a_valid_reply_is_parsed_and_the_text_is_kept_beside_it ... ok
[INFO] [stdout] test provider::tests::extra_headers_and_body_are_merged_not_replaced ... ok
[INFO] [stdout] test provider::tests::it_is_the_tool_call_and_not_the_text_that_makes_a_turn_real ... ok
[INFO] [stdout] test provider::tests::every_provider_refuses_a_body_it_cannot_read ... ok
[INFO] [stdout] test provider::tests::only_content_is_required ... ok
[INFO] [stdout] test provider::tests::openrouter_sends_its_attribution_and_reports_the_model_that_answered ... ok
[INFO] [stdout] test provider::tests::structured_output_is_skipped_on_a_tool_calling_turn ... ok
[INFO] [stdout] test pyfmt::tests::dumps_escapes_non_ascii ... ok
[INFO] [stdout] test pyfmt::tests::dumps_uses_python_separators ... ok
[INFO] [stdout] test pyfmt::tests::repr_matches_python ... ok
[INFO] [stdout] test provider::tests::strict_mode_is_what_rewrites_the_schema ... ok
[INFO] [stdout] test role::tests::a_bare_name_finds_a_file_and_prose_does_not ... ok
[INFO] [stdout] test pyfmt::tests::str_unwraps_only_strings ... ok
[INFO] [stdout] test pyfmt::tests::truthiness_follows_python ... ok
[INFO] [stdout] test role::tests::a_file_with_no_frontmatter_is_a_participant_named_for_itself ... ok
[INFO] [stdout] test role::tests::a_missing_path_is_an_error_rather_than_prose ... ok
[INFO] [stdout] test role::tests::a_position_that_is_nearly_right_is_still_rejected ... ok
[INFO] [stdout] test provider::tests::explicit_refusals_and_filters_are_errors_even_beside_content_or_tools ... ok
[INFO] [stdout] test role::tests::both_built_ins_load_by_bare_name ... ok
[INFO] [stdout] test role::tests::frontmatter_and_body_are_both_read ... ok
[INFO] [stdout] test provider::tests::structured_output_builds_a_response_format ... ok
[INFO] [stdout] test provider::tests::no_tools_key_when_there_is_nothing_to_send ... ok
[INFO] [stdout] test role::tests::the_built_ins_are_enumerated_from_disk ... ok
[INFO] [stdout] test role::tests::a_position_round_trips_through_its_written_name ... ok
[INFO] [stdout] test role::tests::a_search_directory_is_tried_before_the_built_ins ... ok
[INFO] [stdout] test role::tests::an_unknown_position_names_the_file_it_came_from ... ok
[INFO] [stdout] test session::tests::a_gameplan_naming_an_unregistered_tool_fails_the_session ... ok
[INFO] [stdout] test session::tests::a_missing_persona_stops_the_run_before_it_costs_anything ... ok
[INFO] [stdout] test session::tests::a_phase_less_gameplan_keeps_the_orchestrator_in_charge_of_the_flow ... ok
[INFO] [stdout] test provider::tests::the_budget_is_spent_only_on_failure_and_then_reported ... ok
[INFO] [stdout] test session::tests::a_prompt_over_the_limit_before_any_turns_fails_loudly ... ok
[INFO] [stdout] test session::tests::a_filter_rewrites_or_drops_what_an_agent_writes ... ok
[INFO] [stdout] test session::tests::a_provider_that_names_no_window_leaves_the_session_figure_alone ... ok
[INFO] [stdout] test session::tests::a_request_the_provider_calls_too_long_is_compacted_and_sent_again ... ok
[INFO] [stdout] test session::tests::a_second_orchestrator_is_refused_by_name ... ok
[INFO] [stdout] test session::tests::a_second_refusal_reaches_the_caller ... ok
[INFO] [stdout] test session::tests::a_generous_limit_leaves_the_conversation_alone ... ok
[INFO] [stdout] test session::tests::add_tool_refuses_a_name_it_could_not_honour ... ok
[INFO] [stdout] test session::tests::a_store_that_cannot_open_stops_the_run_before_the_first_turn ... ok
[INFO] [stdout] test session::tests::a_store_that_names_no_file_is_checked_against_no_workspace ... ok
[INFO] [stdout] test session::tests::a_named_actor_puts_both_verdicts_on_the_channel ... ok
[INFO] [stdout] test session::tests::a_marker_is_always_stripped_and_only_sometimes_saved ... ok
[INFO] [stdout] test session::tests::edit_memory_revises_through_the_filter_and_removes_without_it ... ok
[INFO] [stdout] test session::tests::an_explicit_orchestrator_prompt_replaces_the_gameplan_one ... ok
[INFO] [stdout] test session::tests::edit_memory_is_offered_only_where_the_store_sets_a_ceiling ... ok
[INFO] [stdout] test session::tests::no_session_file_writes_nothing ... ok
[INFO] [stdout] test session::tests::read_memory_returns_the_file_or_says_there_is_none ... ok
[INFO] [stdout] test session::tests::either_half_alone_is_fine ... ok
[INFO] [stdout] test session::tests::each_missing_piece_of_a_run_is_named_by_the_error ... ok
[INFO] [stdout] test session::tests::the_closing_keyword_decides_how_the_session_ends ... ok
[INFO] [stdout] test session::tests::the_counters_carry_what_their_names_say ... ok
[INFO] [stdout] test session::tests::the_filter_runs_before_an_installed_store_sees_a_note ... ok
[INFO] [stdout] test session::tests::max_turns_stops_the_session ... ok
[INFO] [stdout] test session::tests::the_orchestrator_prompt_is_built_from_the_gameplan ... ok
[INFO] [stdout] test session::tests::the_tools_key_decides_what_the_prompt_advertises ... ok
[INFO] [stdout] test session::tests::the_roster_names_the_character_never_the_path ... ok
[INFO] [stdout] test session::tests::the_exec_setter_replaces_the_command_patterns ... ok
[INFO] [stdout] test session::tests::tool_history_is_refused_against_a_native_provider ... ok
[INFO] [stdout] test exec::tests::a_command_that_overruns_its_deadline_is_killed ... ok
[INFO] [stdout] test session::tests::write_memory_is_offered_only_to_a_writing_session ... ok
[INFO] [stdout] test session::tests::the_smaller_of_the_session_and_the_provider_window_is_the_ceiling ... ok
[INFO] [stdout] test sessionfile::tests::a_mismatch_is_refused_named_and_recoverable ... ok
[INFO] [stdout] test sessionfile::tests::a_missing_file_is_not_an_error_and_is_not_created ... ok
[INFO] [stdout] test sessionfile::tests::an_unknown_schema_version_is_refused_naming_both ... ok
[INFO] [stdout] test session::tests::an_installed_store_is_opened_read_written_and_closed ... ok
[INFO] [stdout] test session::tests::unparseable_output_is_retried_and_then_forced_to_an_end ... ok
[INFO] [stdout] test sessionfile::tests::the_same_run_passes_however_it_was_registered ... ok
[INFO] [stdout] test session::tests::zero_is_a_max_rounds_the_caller_can_set_and_omitting_it_is_not ... ok
[INFO] [stdout] test sessionfile::tests::it_writes_readable_json ... ok
[INFO] [stdout] test skill::loader::tests::a_comma_separated_string_is_split ... ok
[INFO] [stdout] test skill::loader::tests::a_builtin_loads_by_bare_name_or_by_file ... ok
[INFO] [stdout] test skill::loader::tests::a_missing_skill_is_a_file_not_found_either_way ... ok
[INFO] [stdout] test skill::loader::tests::a_custom_skill_loads_from_a_path ... ok
[INFO] [stdout] test sessionfile::tests::every_kind_of_record_survives ... ok
[INFO] [stdout] test skill::loader::tests::a_pathless_skill_has_no_bundles ... ok
[INFO] [stdout] test skill::loader::tests::a_non_list_and_malformed_yaml_are_both_reported ... ok
[INFO] [stdout] test skill::loader::tests::both_name_and_description_are_required ... ok
[INFO] [stdout] test skill::loader::tests::absent_narrows_nothing_and_an_empty_list_narrows_to_nothing ... ok
[INFO] [stdout] test skill::loader::tests::inline_and_block_lists_both_parse ... ok
[INFO] [stdout] test sessionfile::tests::a_save_lands_at_the_path_it_was_given_and_leaves_nothing_else ... ok
[INFO] [stdout] test session::tests::tool_exchanges_are_private_unless_the_switch_reverses_it ... ok
[INFO] [stdout] test skill::loader::tests::a_name_must_be_a_slug_and_must_match_its_directory ... ok
[INFO] [stdout] test skill::loader::tests::only_existing_bundle_dirs_are_reported ... ok
[INFO] [stdout] test skill::loader::tests::the_builtins_are_enumerated_from_disk_and_sorted ... ok
[INFO] [stdout] test skill::runtime::tests::a_required_tool_comes_back_past_both_narrowings ... ok
[INFO] [stdout] test skill::runtime::tests::a_required_tool_nobody_registered_is_not_invented_here ... ok
[INFO] [stdout] test skill::runtime::tests::an_explicit_empty_list_permits_nothing ... ok
[INFO] [stdout] test skill::runtime::tests::an_unavailable_skill_names_what_is_available ... ok
[INFO] [stdout] test skill::loader::tests::only_builtin_skills_are_marked_builtin ... ok
[INFO] [stdout] test skill::runtime::tests::a_builtin_bundle_is_listed_and_granted ... ok
[INFO] [stdout] test skill::loader::tests::requires_tools_reads_the_same_shapes_and_defaults_to_none_required ... ok
[INFO] [stdout] test skill::runtime::tests::no_skills_renders_nothing ... ok
[INFO] [stdout] test skill::runtime::tests::no_tool_when_the_agent_has_no_skills ... ok
[INFO] [stdout] test skill::runtime::tests::apply_gate_is_restrictive_only ... ok
[INFO] [stdout] test skill::runtime::tests::only_a_skill_declaring_allowed_tools_narrows ... ok
[INFO] [stdout] test skill::runtime::tests::the_body_is_served_once_per_turn ... ok
[INFO] [stdout] test skill::runtime::tests::the_enum_is_this_agents_skills_and_the_handler_loads_them ... ok
[INFO] [stdout] test skill::runtime::tests::an_untrusted_bundle_is_listed_but_not_granted ... ok
[INFO] [stdout] test skill::runtime::tests::no_manifest_when_there_is_no_bundle ... ok
[INFO] [stdout] test skill::runtime::tests::the_index_names_the_bodies_without_carrying_them ... ok
[INFO] [stdout] test skill::runtime::tests::two_skills_union_rather_than_intersect ... ok
[INFO] [stdout] test skill::runtime::tests::the_registry_resolves_per_agent ... ok
[INFO] [stdout] test tooling::tests::an_empty_toolkit_produces_no_prompt_block ... ok
[INFO] [stdout] test skill::runtime::tests::the_skill_tool_is_never_gated_out ... ok
[INFO] [stdout] test tooling::tests::unparseable_arguments_are_preserved_under_raw ... ok
[INFO] [stdout] test toolkit::tests::a_successful_call_returns_the_handler_text ... ok
[INFO] [stdout] test tooling::tests::a_tool_calls_fence_is_parsed ... ok
[INFO] [stdout] test tooling::tests::malformed_batches_come_back_as_readable_errors ... ok
[INFO] [stdout] test toolkit::tests::absent_is_everything_empty_is_nothing_and_order_is_registration ... ok
[INFO] [stdout] test toolkit::tests::arguments_are_checked_against_the_schema ... ok
[INFO] [stdout] test toolkit::tests::every_failure_is_a_result_the_model_can_read ... ok
[INFO] [stdout] test toolschema::tests::a_content_free_tool_turn_sends_null_rather_than_an_empty_string ... ok
[INFO] [stdout] test toolkit::tests::the_actor_reaches_only_handlers_that_asked_for_it ... ok
[INFO] [stdout] test tooling::tests::a_bare_object_counts_only_with_the_exact_key ... ok
[INFO] [stdout] test toolschema::tests::each_dialect_puts_the_schema_where_its_api_expects_it ... ok
[INFO] [stdout] test tooling::tests::a_mislabeled_json_fence_counts_only_when_it_mentions_tool_calls ... ok
[INFO] [stdout] test toolschema::tests::malformed_openai_arguments_are_preserved_rather_than_dropped ... ok
[INFO] [stdout] test toolschema::tests::only_the_dialects_without_an_error_flag_mark_failures_inline ... ok
[INFO] [stdout] test toolschema::tests::openai_arguments_arrive_as_a_json_string ... ok
[INFO] [stdout] test toolschema::tests::the_assistant_turn_is_replayed_in_each_apis_own_shape ... ok
[INFO] [stdout] test toolschema::tests::a_request_with_no_tools_to_send_carries_no_tools_key ... ok
[INFO] [stdout] test toolschema::tests::anthropic_arguments_arrive_as_an_object_and_other_blocks_are_ignored ... ok
[INFO] [stdout] test usage::tests::collector_attributes_compaction_closing_and_opaque_overrides ... ok
[INFO] [stdout] test usage::tests::normalization_preserves_unknown_zero_and_vendor_subsets ... ok
[INFO] [stdout] test usage::tests::prices_are_host_supplied_checked_and_rounded_up ... ok
[INFO] [stdout] test usage::tests::unknown_measurements_stop_metered_runs_and_checkpoints_keep_budget_spent ... ok
[INFO] [stdout] test utils::tests::keyword_matches_only_as_a_standalone_token ... ok
[INFO] [stdout] test utils::tests::memory_markers_are_stripped_and_collected ... ok
[INFO] [stdout] test utils::tests::mention_parsing_strips_leading_punctuation ... ok
[INFO] [stdout] test utils::tests::retry_returns_the_last_error_after_exhausting_attempts ... ok
[INFO] [stdout] test usage::tests::concurrent_calls_keep_nested_attempts_and_opaque_attribution ... ok
[INFO] [stdout] test usage::tests::concurrent_retries_reserve_capacity_and_record_in_flight_results ... ok
[INFO] [stdout] test usage::tests::budgets_gate_next_actions_and_reject_unprovable_hard_limits ... ok
[INFO] [stdout] test utils::tests::terminator_priority_follows_declaration_order ... ok
[INFO] [stdout] test yaml::tests::a_stream_with_two_documents_is_refused ... ok
[INFO] [stdout] test yaml::tests::an_empty_document_is_null ... ok
[INFO] [stdout] test yaml::tests::an_explicit_tag_overrides_the_resolver ... ok
[INFO] [stdout] test yaml::tests::malformed_yaml_reports_where_it_broke ... ok
[INFO] [stdout] test yaml::tests::nested_structures_come_through_whole ... ok
[INFO] [stdout] test yaml::tests::a_single_letter_is_not_a_boolean ... ok
[INFO] [stdout] test yaml::tests::anchors_are_reused_and_merges_lose_to_explicit_keys ... ok
[INFO] [stdout] test yaml::tests::an_unsigned_exponent_is_not_a_number ... ok
[INFO] [stdout] test yaml::tests::yaml_one_point_one_booleans_are_still_booleans ... ok
[INFO] [stdout] test yaml::tests::nulls_are_spelled_four_ways_and_an_absent_value_is_one ... ok
[INFO] [stdout] test yaml::tests::numbers_follow_the_one_point_one_rules ... ok
[INFO] [stdout] test yaml::tests::quoting_is_what_keeps_a_word_a_word ... ok
[INFO] [stdout] test sessionfile::tests::unparseable_json_names_the_file ... ok
[INFO] [stdout] test usage::tests::scopes_restore_on_return_and_unwind_without_cross_run_attribution ... ok
[INFO] [stdout] test session::tests::a_file_written_for_another_topic_refuses_to_resume ... ok
[INFO] [stdout] test session::tests::a_second_run_picks_up_where_the_first_stopped ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 415 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.48s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/access_e2e.rs (/opt/rustwide/target/debug/build/kerness/41d691de9ab3fe99/out/access_e2e-41d691de9ab3fe99)
[INFO] [stdout] 
[INFO] [stdout] running 17 tests
[INFO] [stdout] [System] [Command:denied] Alice: echo hello
[INFO] [stdout] test a_symlink_out_of_an_allowed_dir_is_denied ... ok
[INFO] [stdout] test an_allowed_dir_covers_its_files_and_nothing_above_them ... ok
[INFO] [stdout] test a_command_is_denied_by_default_and_the_refusal_says_how_to_allow_it ... ok
[INFO] [stdout] [System] [Command:approved] Alice: pwd
[INFO] [stdout] test a_workspace_confines_a_read_a_write_and_a_commands_working_directory ... ok
[INFO] [stdout] [System] [Command:denied] Alice: echo hello world
[INFO] [stdout] test an_exact_command_does_not_admit_a_longer_one ... ok
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] [System] [Command:approved] P0: echo approved
[INFO] [stdout] test a_listed_command_is_not_put_to_the_approver ... ok
[INFO] [stdout] [System] [Command:denied] P0: echo another
[INFO] [stdout] [System] [Command:denied] P0: echo approved
[INFO] [stdout] [P0] Command handled.
[INFO] [stdout] [P0] Finished tools.
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [P0] Command handled.
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [System] Orchestrator output unparseable after retries. Forcing END_SESSION.
[INFO] [stdout] [P0] Command handled.
[INFO] [stdout] test command_preflight_checks_hard_denials_and_grants_only_the_frozen_command_once ... ok
[INFO] [stdout] test listing_is_governed_by_the_same_policy_as_reading ... ok
[INFO] [stdout] [P0] Finished tools.
[INFO] [stdout] [System] [Command:denied] Alice: echo hello
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] test a_denied_tool_call_becomes_a_tool_result_and_a_channel_notice ... ok
[INFO] [stdout] test the_sessions_own_write_paths_are_confined_too ... ok
[INFO] [stdout] test external_approval_freezes_a_native_call_and_only_its_decision_can_execute_it ... ok
[INFO] [stdout] test an_agent_workspace_narrows_the_sessions_and_a_wider_one_names_the_agent ... ok
[INFO] [stdout] test traversal_out_of_an_allowed_dir_is_denied_after_resolution ... ok
[INFO] [stdout] [System] [Command:approved] Alice: echo https://ok.test/page
[INFO] [stdout] [System] [Command:denied] Alice: echo https://evil.test/
[INFO] [stdout] test an_allowed_command_is_still_held_to_the_hosts_it_names ... ok
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] [System] [Command:denied] Alice: echo hello
[INFO] [stdout] test set_exec_replaces_the_patterns_and_takes_effect_at_once ... ok
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] [System] [Command:denied] Alice: echo hello
[INFO] [stdout] test an_approver_is_consulted_for_anything_unlisted_and_its_answer_stands ... ok
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] [System] [Command:approved] Alice: echo hello
[INFO] [stdout] test each_command_allow_list_admits_its_own_shape ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/compaction_e2e.rs (/opt/rustwide/target/debug/build/kerness/fe70e8d0ce712fd9/out/compaction_e2e-fe70e8d0ce712fd9)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test the_estimate_counts_characters_rather_than_bytes ... ok
[INFO] [stdout] test a_ceiling_the_prompt_alone_exceeds_is_refused_with_the_numbers ... ok
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] test a_batch_overflow_compacts_private_history_without_replaying_tools_or_siblings ... ok
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Alice, go.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Alice] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] [Mod] @Bob, go.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test an_ordinary_run_under_the_default_ceiling_never_compacts ... ok
[INFO] [stdout] [Bob] position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position position
[INFO] [stdout] [System] Compacted conversation: 522 of 2000 estimated tokens are prompt overhead, leaving 1478 for the conversation.
[INFO] [stdout] test the_summary_replaces_the_dropped_turns_under_its_own_label ... ok
[INFO] [stdout] test the_session_file_records_how_often_it_compacted ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test an_empty_summary_leaves_the_history_alone ... ok
[INFO] [stdout] test the_topic_survives_compaction ... ok
[INFO] [stdout] test a_conversation_over_the_ceiling_is_compacted ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.49s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/harness_contract.rs (/opt/rustwide/target/debug/build/kerness/559e75aafce5490b/out/harness_contract-559e75aafce5490b)
[INFO] [stdout] 
[INFO] [stdout] running 16 tests
[INFO] [stdout] test a_gameplan_that_is_not_there_names_what_it_looked_for ... ok
[INFO] [stdout] test a_context_source_that_fails_stops_the_run_before_any_provider_call ... ok
[INFO] [stdout] test a_gameplan_claiming_a_reserved_tool_name_fails_to_load ... ok
[INFO] [stdout] test a_declared_context_source_that_is_not_registered_is_refused_with_the_list ... ok
[INFO] [stdout] test a_declared_tool_that_is_not_registered_is_refused_with_the_list ... ok
[INFO] [stdout] test every_unmet_requirement_is_reported_at_once ... ok
[INFO] [stdout] test duplicate_participant_names_are_refused ... ok
[INFO] [stdout] test the_reserved_tool_name_and_duplicates_are_refused ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [System] Session ended: DONE
[INFO] [stdout] [P0] Read it.
[INFO] [stdout] [Mod] END_SESSION
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [System] Session ended: DONE
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [System] Session ended: DONE
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] test too_many_participants_is_refused_and_they_are_named ... ok
[INFO] [stdout] [Mod] DONE
[INFO] [stdout] [System] Session ended: DONE
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test gameplan_skills_union_with_the_sessions ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_gameplan_narrows_the_registered_tools ... ok
[INFO] [stdout] test only_the_declared_terminator_ends_the_session ... ok
[INFO] [stdout] test consensus_is_only_reported_when_the_harness_declares_a_keyword ... ok
[INFO] [stdout] test a_phaseless_harness_is_bounded_by_max_rounds ... ok
[INFO] [stdout] test a_gameplan_narrows_the_registered_context_sources ... ok
[INFO] [stdout] test a_phase_cannot_outlast_max_rounds ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/public_api.rs (/opt/rustwide/target/debug/build/kerness/5426201dbe687479/out/public_api-5426201dbe687479)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test the_crate_version_is_the_one_cargo_built ... ok
[INFO] [stdout] test a_reasoning_effort_is_read_and_written_as_its_name ... ok
[INFO] [stdout] test the_documented_constants_hold_their_documented_values ... ok
[INFO] [stdout] test the_shared_request_defaults_hold ... ok
[INFO] [stdout] test a_provider_written_outside_the_crate_is_a_provider ... ok
[INFO] [stdout] test the_root_re_exports_all_resolve ... ok
[INFO] [stdout] test every_bundled_role_loads_and_carries_a_prompt ... ok
[INFO] [stdout] test a_session_assembles_from_the_public_api_alone ... ok
[INFO] [stdout] test every_bundled_persona_and_skill_loads ... ok
[INFO] [stdout] test every_bundled_gameplan_loads_and_declares_a_terminator ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/resume.rs (/opt/rustwide/target/debug/build/kerness/ddd91dc78ce6eee1/out/resume-ddd91dc78ce6eee1)
[INFO] [stdout] 
[INFO] [stdout] running 13 tests
[INFO] [stdout] test a_file_that_is_not_a_snapshot_is_refused_with_a_reason ... ok
[INFO] [stdout] test a_failed_intent_write_prevents_the_tool_side_effect ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_session_without_a_file_persists_nothing ... ok
[INFO] [stdout] [P0] Earlier committed turn.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-indeterminate-12/run.json: 0 turns, 0 recorded messages.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [P0] Recorded.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-indeterminate-12/run.json: 0 turns, 0 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 1 recorded messages.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 2 recorded messages.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-approval-resume-5/run.json: 1 turns, 2 recorded messages.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-indeterminate-15/run.json: 0 turns, 0 recorded messages.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_missing_file_is_the_first_run_and_says_nothing ... ok
[INFO] [stdout] test a_file_written_for_a_different_roster_is_refused ... ok
[INFO] [stdout] [P0] Recorded.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-indeterminate-15/run.json: 0 turns, 0 recorded messages.
[INFO] [stdout] [P0] Both recorded.
[INFO] [stdout] test an_intent_without_completion_requires_reconciliation_and_never_replays_the_handler ... ok
[INFO] [stdout] test a_saved_native_approval_resumes_after_completed_tools_without_replaying_them ... ok
[INFO] [stdout] test a_file_written_for_a_different_run_is_refused_by_name ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test no_temporary_file_is_left_behind ... ok
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test batch_approvals_and_partial_delivery_resume_without_replaying_siblings ... ok
[INFO] [stdout] test the_state_is_written_after_every_turn ... ok
[INFO] [stdout] test the_file_carries_its_version_and_the_run_it_belongs_to ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2528-resume-v1-18/run.json: 2 turns, 3 recorded messages.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_second_run_continues_where_the_first_stopped ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.13s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/session_run.rs (/opt/rustwide/target/debug/build/kerness/84f252a1a724064f/out/session_run-84f252a1a724064f)
[INFO] [stdout] 
[INFO] [stdout] running 29 tests
[INFO] [stdout] test a_role_seats_an_agent_by_declaration_and_never_by_prose ... ok
[INFO] [stdout] test a_model_named_nowhere_says_where_to_write_one ... ok
[INFO] [stdout] test a_second_orchestrator_is_refused_by_name ... ok
[INFO] [stdout] test a_run_with_no_topic_no_participants_or_no_orchestrator_is_refused ... ok
[INFO] [stdout] test a_missing_role_file_is_refused_where_it_was_named ... ok
[INFO] [stdout] test a_run_with_no_provider_names_the_agents_that_needed_one ... ok
[INFO] [stdout] test an_agent_on_a_second_provider_must_name_its_own_model ... ok
[INFO] [stdout] [Mod] @Alice, open the case.
[INFO] [stdout] [Mod] @Alice, open the case.
[INFO] [stdout] [Alice] Write-through, for the invalidation story.
[INFO] [stdout] [Alice] Write-through, obviously.
[INFO] [stdout] [Mod] END_SESSION
[INFO] [stdout] [System] Session ended: END_SESSION
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test an_agent_provider_overrides_the_session_one ... ok
[INFO] [stdout] test a_terminator_ends_the_run_and_says_so ... ok
[INFO] [stdout] test batch_prompt_memory_reads_share_the_actor_provider_budget ... ok
[INFO] [stdout] [Mod] @Bob, answer that.
[INFO] [stdout] [Bob] Write-through, for the invalidation story.
[INFO] [stdout] [Mod] CONSENSUS_REACHED
[INFO] [stdout] test a_host_selects_an_agent_and_finishes_without_a_judge_call ... ok
[INFO] [stdout] [System] Session ended: CONSENSUS_REACHED
[INFO] [stdout] test an_unroutable_orchestrator_is_retried_and_then_forced ... ok
[INFO] [stdout] [Mod] They converged on write-through.
[INFO] [stdout] test a_session_default_fills_every_agent_that_named_nothing ... ok
[INFO] [stdout] test each_phase_instruction_reaches_the_participant_it_governs ... ok
[INFO] [stdout] test independent_batches_bound_overlap_freeze_context_and_commit_in_assignment_order ... ok
[INFO] [stdout] test memory_markers_never_reach_the_transcript_or_the_channel ... ok
[INFO] [stdout] test the_gameplan_body_reaches_the_orchestrator_prompt ... ok
[INFO] [stdout] test the_non_consensus_terminator_ends_without_agreement ... ok
[INFO] [stdout] test batch_tool_exchanges_stay_private_until_optional_shared_commit ... ok
[INFO] [stdout] [System] Resumed from /tmp/kerness-test-2546-maintenance-retry-budget-17/run.json: 0 turns, 0 recorded messages.
[INFO] [stdout] test memory_maintenance_is_stepped_metered_and_skipped_during_cleanup ... ok
[INFO] [stdout] test the_declared_result_fields_come_back_typed ... ok
[INFO] [stdout] test the_transcript_and_the_channel_agree ... ok
[INFO] [stdout] [Mod] They converged on write-through.
[INFO] [stdout] test zero_rounds_goes_straight_to_the_closing_turn ... ok
[INFO] [stdout] [Mod] @Alice, open the case.
[INFO] [stdout] [Alice] My position.
[INFO] [stdout] [Mod] @Bob, answer that.
[INFO] [stdout] test the_phase_list_running_out_ends_the_session ... ok
[INFO] [stdout] test interrupted_batches_preserve_successful_peers_before_termination ... ok
[INFO] [stdout] [Mod] They converged on write-through.
[INFO] [stdout] test the_turn_budget_stops_the_loop ... ok
[INFO] [stdout] test an_unreported_result_field_defaults_rather_than_going_missing ... ok
[INFO] [stdout] test cancelled_batch_keeps_paid_replies_when_its_first_commit_checkpoint_fails ... ok
[INFO] [stdout] test terminal_failures_cancellation_and_budgets_preserve_committed_work ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.48s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/skills_e2e.rs (/opt/rustwide/target/debug/build/kerness/1863b9acd68fae74/out/skills_e2e-1863b9acd68fae74)
[INFO] [stdout] 
[INFO] [stdout] running 14 tests
[INFO] [stdout] test a_required_tool_nobody_registered_is_refused_before_the_run ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Narrowed.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [P0] Narrowed.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Read it.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [P0] Read it.
[INFO] [stdout] [P0] Quiet.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Quiet.
[INFO] [stdout] [P0] Checked.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [P0] Checked.
[INFO] [stdout] test an_agent_with_no_skills_is_offered_no_skill_tool ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_second_load_in_the_same_turn_says_so_instead_of_repeating ... ok
[INFO] [stdout] [left] left completed
[INFO] [stdout] [right] right completed
[INFO] [stdout] test batch_turns_keep_their_skills_tools_and_contextual_identity_separate ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Checked.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Still checked.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test the_body_arrives_for_the_turn_that_asked_and_no_later_one ... ok
[INFO] [stdout] [P0] Fine.
[INFO] [stdout] [P0] Read it.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Fine.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_skill_from_a_path_lists_its_bundle_without_opening_it ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Both.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Both.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test two_skills_in_one_turn_union_their_gates ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] Read it.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test an_empty_allowed_tools_leaves_only_the_skill_tool ... ok
[INFO] [stdout] test allowed_tools_narrows_what_the_rest_of_the_turn_is_offered ... ok
[INFO] [stdout] test an_agents_own_list_replaces_the_sessions ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_required_tool_comes_back_past_the_gameplans_own_list ... ok
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test the_skill_tool_is_offered_beside_the_others ... ok
[INFO] [stdout] test a_skill_the_agent_does_not_have_is_answered_with_the_ones_it_does ... ok
[INFO] [stdout] [Mod] @P0, go.
[INFO] [stdout] [P0] My position.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test only_the_name_and_the_description_reach_the_system_prompt ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/tools_e2e.rs (/opt/rustwide/target/debug/build/kerness/f7160eb61ac08db5/out/tools_e2e-f7160eb61ac08db5)
[INFO] [stdout] 
[INFO] [stdout] running 18 tests
[INFO] [stdout] test an_agent_cannot_grant_itself_a_tool_the_session_withheld ... ok
[INFO] [stdout] test an_agent_with_no_provider_anywhere_is_named ... ok
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [P0] Nothing to look up.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [P0] ```tool_calls
[INFO] [stdout] {bad
[INFO] [stdout] ```
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [P0] Fine, no.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [P0] Just talk.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test a_tool_the_agent_gave_up_is_not_callable_either ... ok
[INFO] [stdout] test a_failing_handler_is_answered_rather_than_raised ... ok
[INFO] [stdout] test an_agent_declaring_its_own_tools_is_offered_those_alone ... ok
[INFO] [stdout] test a_model_stuck_on_invalid_json_gives_up_instead_of_looping ... ok
[INFO] [stdout] test an_empty_list_leaves_an_agent_with_no_tools_at_all ... ok
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [P0] Nothing to look up.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] test a_schema_violation_is_answered_rather_than_raised ... ok
[INFO] [stdout] test a_fenced_call_is_dispatched_and_its_result_fed_back ... ok
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test the_built_in_tools_are_offered_alongside_registered_ones ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] test the_anthropic_dialect_returns_the_result_in_a_user_message ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test an_unknown_tool_is_answered_rather_than_raised ... ok
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [P0] ```tool_calls
[INFO] [stdout] {
[INFO] [stdout]   "tool_calls": [
[INFO] [stdout]     {
[INFO] [stdout]       "name": "lookup",
[INFO] [stdout]       "arguments": {
[INFO] [stdout]         "ticker": "KER"
[INFO] [stdout]       }
[INFO] [stdout]     }
[INFO] [stdout]   ]
[INFO] [stdout] }
[INFO] [stdout] ```
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [P0] Worth it.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [System] [Command:approved] P0: echo scoped
[INFO] [stdout] [P0] Done
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] [Mod] @P0, what is it worth?
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/kerness-py/e094b077885f08fe/out/_core-e094b077885f08fe)
[INFO] [stdout] test tool_results_in_history_is_refused_against_a_native_provider ... ok
[INFO] [stderr]    Doc-tests kerness
[INFO] [stdout] test the_tool_iteration_bound_stops_the_loop ... ok
[INFO] [stdout] test tool_exchanges_stay_private_to_the_turn_that_made_them ... ok
[INFO] [stdout] test tool_results_in_history_shows_the_exchange_to_the_next_agent ... ok
[INFO] [stdout] [Mod] Done.
[INFO] [stdout] test the_openai_dialect_carries_the_call_and_the_result_natively ... ok
[INFO] [stdout] [System] [Command:approved] P0: echo scoped
[INFO] [stdout] test contextual_tools_keep_actor_scope_and_expire_after_the_invocation ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
[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] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test crates/kerness/src/access.rs - access::prompt_on_console (line 131) - compile ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef", kill_on_drop: false }`
[INFO] [stdout] 89761b874b386cd3fc4e7f8b6e8c7def1b2d572fd48637e247f70f5ce2ba31ef
