[INFO] cloning repository https://github.com/dstanek/am
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/dstanek/am" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdstanek%2Fam", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdstanek%2Fam'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d7ae739908cc82ea92f29fe5ace712c8f4f9a5b2
[INFO] testing dstanek/am against 1.98.0-beta.1 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdstanek%2Fam" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/dstanek/am
[INFO] removed 0 missing tests
[INFO] finished tweaking git repo https://github.com/dstanek/am
[INFO] tweaked toml for git repo https://github.com/dstanek/am written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/dstanek/am on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/dstanek/am 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.98.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-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094
[INFO] running `Command { std: "docker" "start" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", 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" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", 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" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling which v6.0.3
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling clap_derive v4.6.0
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling am v0.5.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 39.63s
[INFO] running `Command { std: "docker" "inspect" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", 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" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling bytecount v0.6.9
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling peg-runtime v0.6.3
[INFO] [stderr]    Compiling regex-syntax v0.7.5
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling terminal_size v0.4.4
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling nom_locate v4.2.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling peg-macros v0.6.3
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling smawk v0.3.2
[INFO] [stderr]    Compiling unicode-linebreak v0.1.5
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling textwrap v0.16.2
[INFO] [stderr]    Compiling peg v0.6.3
[INFO] [stderr]    Compiling inflections v1.1.1
[INFO] [stderr]    Compiling which v6.0.3
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling sealed v0.5.0
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling synthez-core v0.3.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling clap_derive v4.6.0
[INFO] [stderr]    Compiling synthez-codegen v0.3.1
[INFO] [stderr]    Compiling typed-builder-macro v0.15.2
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling cucumber-expressions v0.3.0
[INFO] [stderr]    Compiling typed-builder v0.15.2
[INFO] [stderr]    Compiling synthez v0.3.1
[INFO] [stderr]    Compiling lazy-regex-proc_macros v3.6.0
[INFO] [stderr]    Compiling pin-project-internal v1.1.11
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling lazy-regex v3.6.0
[INFO] [stderr]    Compiling cucumber-codegen v0.21.1
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling pin-project v1.1.11
[INFO] [stderr]    Compiling smart-default v0.7.1
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling inventory v0.3.22
[INFO] [stderr]    Compiling humantime v2.3.0
[INFO] [stderr]    Compiling drain_filter_polyfill v0.1.3
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling globwalk v0.9.1
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling gherkin v0.14.0
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling cucumber v0.21.1
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling am v0.5.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 55s
[INFO] running `Command { std: "docker" "inspect" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", 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" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.25s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/am-ffb2032b36f31ee8)
[INFO] [stdout] 
[INFO] [stdout] running 127 tests
[INFO] [stdout] test cli::tests::empty_slug_rejected ... ok
[INFO] [stdout] test cli::tests::slug_must_start_with_alphanumeric ... ok
[INFO] [stdout] test cli::tests::valid_slug_accepted ... ok
[INFO] [stdout] test cli::tests::slug_too_long_rejected ... ok
[INFO] [stdout] test cli::tests::invalid_chars_rejected ... ok
[INFO] [stdout] test command::tests::run_command_error_includes_binary_name ... ok
[INFO] [stdout] test command::tests::run_built_command_failure ... ok
[INFO] [stdout] test command::tests::run_command_output_failure ... ok
[INFO] [stdout] test command::tests::run_built_command_output_success ... ok
[INFO] [stdout] test command::tests::run_command_output_success ... ok
[INFO] [stdout] test config::tests::container_user_with_path_traversal_rejected ... ok
[INFO] [stdout] test command::tests::run_command_failure ... ok
[INFO] [stdout] test config::tests::agent_image_overridden_in_project_config ... ok
[INFO] [stdout] test command::tests::run_command_success ... ok
[INFO] [stdout] test config::tests::agent_images_merged_across_global_and_project ... ok
[INFO] [stdout] test config::tests::defaults_when_no_config_files ... ok
[INFO] [stdout] test command::tests::run_built_command_output_failure ... ok
[INFO] [stdout] test config::tests::env_entry_starting_with_dash_rejected ... ok
[INFO] [stdout] test config::tests::env_entry_starting_with_digit_rejected ... ok
[INFO] [stdout] test config::tests::env_entry_with_space_in_name_rejected ... ok
[INFO] [stdout] test command::tests::run_built_command_success ... ok
[INFO] [stdout] test config::tests::env_var_can_override_container_user ... ok
[INFO] [stdout] test config::tests::global_config_path_falls_back_to_home_dot_config ... ok
[INFO] [stdout] test config::tests::env_vars_override_project_config ... ok
[INFO] [stdout] test config::tests::global_config_path_uses_xdg_config_home ... ok
[INFO] [stdout] test config::tests::load_with_global_errors_on_invalid_container_user_in_env ... ok
[INFO] [stdout] test config::tests::load_with_global_errors_on_bad_env_entry ... ok
[INFO] [stdout] test config::tests::load_with_global_errors_on_invalid_container_user_in_file ... ok
[INFO] [stdout] test config::tests::resolve_image_container_image_overrides_agent ... ok
[INFO] [stdout] test config::tests::resolve_image_returns_none_for_unknown_agent ... ok
[INFO] [stdout] test config::tests::valid_env_entries_accepted ... ok
[INFO] [stdout] test config::tests::resolve_image_uses_agent_mapping ... ok
[INFO] [stdout] test config::tests::valid_container_users_accepted ... ok
[INFO] [stdout] test config::tests::write_defaults_content_is_valid_toml ... ok
[INFO] [stdout] test config::tests::write_defaults_creates_file_and_parent_dirs ... ok
[INFO] [stdout] test config::tests::project_config_inherits_unset_global_fields ... ok
[INFO] [stdout] test container::tests::agent_auto_flags_claude_returns_skip_permissions ... ok
[INFO] [stdout] test container::tests::build_run_command_env_passthrough ... ok
[INFO] [stdout] test config::tests::project_config_overrides_global ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_all_mounts ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_required_flags ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_codex_api_key_env ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_claude_mount_when_active ... ok
[INFO] [stdout] test container::tests::build_run_command_mounts_use_host_paths ... ok
[INFO] [stdout] test container::tests::build_run_command_mounts_colocated_git_when_set ... ok
[INFO] [stdout] test container::tests::build_run_command_network_none ... ok
[INFO] [stdout] test container::tests::agent_auto_flags_non_claude_agents_return_empty ... ok
[INFO] [stdout] test container::tests::build_run_command_no_selinux_z_for_docker ... ok
[INFO] [stdout] test container::tests::build_run_command_selinux_z_on_linux_podman ... ok
[INFO] [stdout] test container::tests::detect_runtime_auto_errors_when_neither_found ... ok
[INFO] [stdout] test container::tests::detect_runtime_auto_falls_back_to_docker ... ok
[INFO] [stdout] test container::tests::detect_runtime_explicit_podman_errors_when_not_found ... ok
[INFO] [stdout] test container::tests::known_agent_parse_known_agents_ok ... ok
[INFO] [stdout] test container::tests::codex_returns_no_mount ... ok
[INFO] [stdout] test container::tests::detect_runtime_explicit_docker_errors_when_not_found ... ok
[INFO] [stdout] test container::tests::detect_runtime_explicit_docker_finds_docker ... ok
[INFO] [stdout] test container::tests::detect_runtime_auto_finds_podman ... ok
[INFO] [stdout] test container::tests::known_agent_display_matches_parse_input ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_claude_fails_when_dir_missing ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_copilot_fails_when_gh_dir_missing ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_codex_fails_when_key_empty ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_codex_ok_when_key_set ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_claude_ok_when_dir_exists ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_claude_defaults_to_dot_claude ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_codex_fails_when_key_missing ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_copilot_returns_mounts_and_env ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_gemini_fails_when_dir_missing ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_gemini_ok_when_dir_exists ... ok
[INFO] [stdout] test container::tests::remove_container_sends_rm_command ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_claude_uses_claude_config_dir_when_set ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_copilot_container_paths_match ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_copilot_returns_both_dirs ... ok
[INFO] [stdout] test error::tests::auto_requires_agent_mentions_agent ... ok
[INFO] [stdout] test error::tests::auto_requires_container_mentions_no_container ... ok
[INFO] [stdout] test error::tests::config_error_includes_message ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_gemini_returns_dot_gemini ... ok
[INFO] [stdout] test container::tests::resolve_mounts_includes_preflighted_agent_auth_for_claude ... ok
[INFO] [stdout] test error::tests::container_error_includes_message ... ok
[INFO] [stdout] test error::tests::container_image_not_configured_mentions_agent ... ok
[INFO] [stdout] test error::tests::container_runtime_not_found_mentions_podman ... ok
[INFO] [stdout] test error::tests::not_in_repo_formats_correctly ... ok
[INFO] [stdout] test error::tests::not_in_tmux_formats_correctly ... ok
[INFO] [stdout] test error::tests::io_error_converts_from_std ... ok
[INFO] [stdout] test error::tests::slug_already_exists_includes_slug ... ok
[INFO] [stdout] test container::tests::known_agent_parse_unknown_errors ... ok
[INFO] [stdout] test container::tests::resolve_mounts_git_paths ... ok
[INFO] [stdout] test container::tests::resolve_mounts_jj_colocated_sets_git_host ... ok
[INFO] [stdout] test session::tests::find_session_returns_none_for_missing_slug ... ok
[INFO] [stdout] test error::tests::slug_not_found_includes_slug ... ok
[INFO] [stdout] test container::tests::stop_container_sends_stop_command ... ok
[INFO] [stdout] test container::tests::resolve_mounts_jj_non_colocated_no_git_host ... ok
[INFO] [stdout] test session::tests::missing_sessions_file_returns_empty_list ... ok
[INFO] [stdout] test session::tests::remove_nonexistent_slug_errors ... ok
[INFO] [stdout] test error::tests::tmux_error_includes_message ... ok
[INFO] [stdout] test error::tests::worktree_error_includes_message ... ok
[INFO] [stdout] test tmux::tests::get_pane_id_formats_correctly ... ok
[INFO] [stdout] test session::tests::sessions_roundtrip_json ... ok
[INFO] [stdout] test session::tests::add_and_find_session ... ok
[INFO] [stdout] test session::tests::remove_session_success ... ok
[INFO] [stdout] test session::tests::add_duplicate_slug_errors ... ok
[INFO] [stdout] test tmux::tests::create_window_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::current_pane_path_sends_display_message ... ok
[INFO] [stdout] test tmux::tests::current_window_name_sends_display_message ... ok
[INFO] [stdout] test tmux::tests::is_in_tmux_false_when_tmux_not_set ... ok
[INFO] [stdout] test tmux::tests::is_in_tmux_true_when_tmux_set ... ok
[INFO] [stdout] test tmux::tests::kill_pane_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::kill_window_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::rename_window_with_target_passes_t_flag ... ok
[INFO] [stdout] test tmux::tests::rename_window_without_target_omits_t_flag ... ok
[INFO] [stdout] test tmux::tests::select_pane_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::send_keys_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::split_window_horizontal_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::select_window_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::split_window_passes_percent_flag ... ok
[INFO] [stdout] test tmux::tests::split_window_vertical_sends_correct_command ... ok
[INFO] [stdout] test worktree::tests::create_jj_workspace_returns_correct_path ... ok
[INFO] [stdout] test worktree::tests::create_jj_workspace_runs_correct_command ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_errors_on_unborn_branch ... ok
[INFO] [stdout] test worktree::tests::git_worktree_has_changes_returns_false_for_nonexistent_path ... ok
[INFO] [stdout] test worktree::tests::remove_jj_workspace_calls_forget_and_removes_directory ... ok
[INFO] [stdout] test worktree::tests::remove_jj_workspace_succeeds_when_directory_already_gone ... ok
[INFO] [stdout] test worktree::tests::git_worktree_has_changes_returns_false_for_clean_worktree ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_supports_non_utf8_repo_paths ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_creates_branch_and_directory ... ok
[INFO] [stdout] test worktree::tests::remove_git_worktree_removes_directory_and_branch ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_duplicate_slug_errors ... ok
[INFO] [stdout] test worktree::tests::git_worktree_has_changes_returns_true_when_file_modified ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 127 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s
[INFO] [stderr]      Running tests/cucumber.rs (/opt/rustwide/target/debug/deps/cucumber-2a7c0a88dad27bef)
[INFO] [stdout] 
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp0uTw2l/.git/
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout] Feature: container integration — session isolation with a container runtime
[INFO] [stdout]   Scenario: start with container records container metadata in the session
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And am init has been run
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔> And I am using a mock container runtime
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "container: am-my-feature"
[INFO] [stdout]    ✔  And the session file contains "container"
[INFO] [stdout]    ✔  And the mock tmux log contains "send-keys"
[INFO] [stdout]   Scenario: start with --no-container skips container setup
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpzGCAq0/.git/
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And am init has been run
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔> And I am using a mock container runtime
[INFO] [stdout]    ✔  When I run "am start my-feature --no-container"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the session file contains "my-feature"
[INFO] [stdout]    ✔  And the session file does not contain "podman"
[INFO] [stdout]   Scenario: destroy stops and removes the container
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpmUGO0b/.git/
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And am init has been run
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔> And I am using a mock container runtime
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy --force my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the mock podman log contains "stop"
[INFO] [stdout]    ✔  And the mock podman log contains "rm"
[INFO] [stdout]    ✔  And the session file does not contain "my-feature"
[INFO] [stdout] Feature: am destroy — remove a session and its worktree
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpxn2uhT/.git/
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout]   Scenario: destroy with --force removes the worktree and session record
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy --force my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Destroyed session 'my-feature'"
[INFO] [stdout]    ✔  And the worktree ".am/worktrees/my-feature" does not exist
[INFO] [stdout]    ✔  And the session file does not contain "my-feature"
[INFO] [stdout]   Scenario: destroy fails when the session does not exist
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmptEn9A2/.git/
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  When I run "am destroy --force no-such-session"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not found"
[INFO] [stdout]   Scenario: destroy without --force aborts when user says no
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpyJHryd/.git/
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy my-feature" with input "n"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Aborted"
[INFO] [stdout]    ✔  And a worktree exists at ".am/worktrees/my-feature"
[INFO] [stdout]    ✔  And the session file contains "my-feature"
[INFO] [stdout]   Scenario: destroy without --force proceeds when user confirms
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpWObmVp/.git/
[INFO] [stdout] [master (root-commit) 835e6cb] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy my-feature" with input "y"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the worktree ".am/worktrees/my-feature" does not exist
[INFO] [stdout]    ✔  And the session file does not contain "my-feature"
[INFO] [stdout] Feature: error handling — clear, early errors for invalid usage
[INFO] [stdout]   Scenario: start outside a repo fails with a clear message
[INFO] [stdout]    ✔  Given no git repository
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not in a git or jj repository"
[INFO] [stdout]   Scenario: start with an invalid slug fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpYh2WK3/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start INVALID-SLUG"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]   Scenario: start with an unknown agent fails before creating any worktree
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpWV9HJ6/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start my-feature --agent bogus-agent"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "bogus-agent"
[INFO] [stdout]    ✔  And the worktree ".am/worktrees/my-feature" does not exist
[INFO] [stdout]   Scenario: attach with an unknown session fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpV6ebL6/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am attach no-such-session"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not found"
[INFO] [stdout]   Scenario: attach when not inside tmux fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp0IZLDz/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout]    ✔  And a session "my-feature" has been started
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stdout]    ✔  When I run "am attach my-feature"
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stderr] hint: 
[INFO] [stdout]    ✔  And the output contains "tmux"
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stdout]   Scenario: run when not inside tmux fails
[INFO] [stderr] hint: 
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpL2XwAx/.git/
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  And a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am run my-feature claude"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "tmux"
[INFO] [stdout] Feature: full session lifecycle
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpcngLTd/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]   Scenario: start then list then destroy
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "my-feature"
[INFO] [stdout]    ✔  When I run "am destroy --force my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "No active sessions"
[INFO] [stdout]   Scenario: multiple sessions can coexist
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpuWxpTn/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start feature-a"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am start feature-b"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "feature-a"
[INFO] [stdout]    ✔  And the output contains "feature-b"
[INFO] [stdout] Feature: am generate-config — print global config template
[INFO] [stdout]   Scenario: prints a TOML config template with all sections
[INFO] [stdout]    ✔  When I run "am generate-config"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "[container]"
[INFO] [stdout]    ✔  And the output contains "[tmux]"
[INFO] [stdout]    ✔  And the output contains "AM_CONTAINER_USER"
[INFO] [stdout]    ✔  And the output contains "username inside the container"
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmppbvWbV/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout] Feature: am init — initialize am in a repo
[INFO] [stdout]   Scenario: init creates the .am directory and config files
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am init"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the file ".am/config.toml" exists
[INFO] [stdout]    ✔  And the file ".am/sessions.json" exists
[INFO] [stdout]    ✔  And the file ".gitignore" contains ".am/"
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpQiff2m/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]   Scenario: init is idempotent when run twice
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  And am init has been run
[INFO] [stdout]    ✔  When I run "am init"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "already exists"
[INFO] [stdout]   Scenario: init fails outside a repo
[INFO] [stdout]    ✔  Given no git repository
[INFO] [stdout]    ✔  When I run "am init"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not in a git or jj repository"
[INFO] [stdout] Feature: jj workspace support — sessions in jj repos
[INFO] [stdout]   Scenario: start creates a jj workspace and records the session
[INFO] [stdout]    ✘> Given a jj repository
[INFO] [stdout]       Step failed:
[INFO] [stdout]       Defined: tests/features/jj.feature:4:5
[INFO] [stdout]       Matched: tests/cucumber.rs:188:1
[INFO] [stdout]       Step panicked. Captured output: failed to spawn jj: Os { code: 2, kind: NotFound, message: "No such file or directory" }
[INFO] [stdout]   Scenario: destroy removes the jj workspace and session record
[INFO] [stdout]    ✘> Given a jj repository
[INFO] [stdout]       Step failed:
[INFO] [stdout]       Defined: tests/features/jj.feature:4:5
[INFO] [stdout]       Matched: tests/cucumber.rs:188:1
[INFO] [stdout]       Step panicked. Captured output: failed to spawn jj: Os { code: 2, kind: NotFound, message: "No such file or directory" }
[INFO] [stdout] Feature: am list — display active sessions
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpgNzqqx/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]   Scenario: list reports no sessions when none exist
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "No active sessions"
[INFO] [stdout]   Scenario: list shows an existing session
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpVoNJw1/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "my-feature"
[INFO] [stdout] Feature: am start — create an isolated agent session
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpA2pGnH/.git/
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]   Scenario: start a session creates a worktree and records state
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And a worktree exists at ".am/worktrees/my-feature"
[INFO] [stdout]    ✔  And the session file contains "my-feature"
[INFO] [stdout]   Scenario: starting a duplicate session fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmplcI0l6/.git/
[INFO] [stdout] [master (root-commit) 7a673f5] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "already exists"
[INFO] [stdout] Feature: am start and am attach with tmux
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpKNOjQr/.git/
[INFO] [stdout] [master (root-commit) efdbabd] chore: initial commit
[INFO] [stdout]   Scenario: start renames the current window and splits it
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Started session 'my-feature'"
[INFO] [stdout]    ✔  And the mock tmux log contains "rename-window"
[INFO] [stdout]    ✔  And the mock tmux log contains "am-my-feature"
[INFO] [stdout]    ✔  And the mock tmux log contains "split-window"
[INFO] [stdout]   Scenario: attach switches to the session window
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpexGy6b/.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) efdbabd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am attach my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "my-feature"
[INFO] [stdout]    ✔  And the mock tmux log contains "select-window"
[INFO] [stdout]   Scenario: run sends an agent command to the session's agent pane
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp5PqTyS/.git/
[INFO] [stdout] [master (root-commit) efdbabd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am run my-feature claude"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Launched 'claude'"
[INFO] [stdout]    ✔  And the mock tmux log contains "send-keys"
[INFO] [stdout]    ✔  And the mock tmux log contains "claude"
[INFO] [stdout] [Summary]
[INFO] [stdout] 10 features
[INFO] [stdout] 28 scenarios (26 passed, 2 failed)
[INFO] [stdout] 162 steps (160 passed, 2 failed)
[INFO] running `Command { std: "docker" "inspect" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094", kill_on_drop: false }`
[INFO] [stdout] 70fcb0a69e4a39f6dad3f1787a9207891a318e7e4c184d0722d575c623fd8094
