diff --git a/codex-rs/core/tests/suite/apply_patch_cli.rs b/codex-rs/core/tests/suite/apply_patch_cli.rs index 2527e4cb93..1fb1635e29 100644 --- a/codex-rs/core/tests/suite/apply_patch_cli.rs +++ b/codex-rs/core/tests/suite/apply_patch_cli.rs @@ -648,6 +648,8 @@ async fn apply_patch_cli_delete_directory_reports_verification_error() -> Result #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn apply_patch_cli_rejects_path_traversal_outside_workspace() -> Result<()> { + // TODO(anp): Assert the target-native Windows traversal error as well as the POSIX error. + skip_if_wine_exec!(Ok(()), "asserts a POSIX-specific traversal error message"); skip_if_no_network!(Ok(())); let harness = apply_patch_harness().await?; @@ -1320,6 +1322,11 @@ async fn apply_patch_shell_command_heredoc_with_cd_emits_turn_diff() -> Result<( #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn apply_patch_turn_diff_paths_stay_repo_relative_when_session_cwd_is_nested() -> Result<()> { + // TODO(anp): Normalize remote Windows cwd prefixes when producing repo-relative patch paths. + skip_if_wine_exec!( + Ok(()), + "remote Windows diff paths retain their drive prefix" + ); skip_if_no_network!(Ok(())); let harness = apply_patch_harness_with(|builder| { diff --git a/codex-rs/core/tests/suite/openai_file_mcp.rs b/codex-rs/core/tests/suite/openai_file_mcp.rs index edc14cead0..cc8ce409f1 100644 --- a/codex-rs/core/tests/suite/openai_file_mcp.rs +++ b/codex-rs/core/tests/suite/openai_file_mcp.rs @@ -25,6 +25,7 @@ use core_test_support::responses::ev_response_created; use core_test_support::responses::mount_sse_sequence; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; +use core_test_support::skip_if_wine_exec; use core_test_support::test_codex::TestCodex; use pretty_assertions::assert_eq; use serde_json::Value; @@ -171,6 +172,10 @@ async fn run_extract_turn(test: &TestCodex, server: &MockServer) -> Result Result<()> { + // TODO(anp): Read app-upload file arguments through the selected environment so remote Windows + // paths can be uploaded before the MCP call. + skip_if_wine_exec!(Ok(()), "app file uploads only read host-local paths"); + let server = start_mock_server().await; let apps_server = AppsTestServer::mount(&server).await?; mount_file_upload_mocks(&server, STREAMED_FILE_SIZE as u64).await; diff --git a/codex-rs/core/tests/suite/unified_exec.rs b/codex-rs/core/tests/suite/unified_exec.rs index 8187fc0cb1..ac206fc6d0 100644 --- a/codex-rs/core/tests/suite/unified_exec.rs +++ b/codex-rs/core/tests/suite/unified_exec.rs @@ -522,6 +522,11 @@ async fn unified_exec_resolves_relative_workdir() -> Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn unified_exec_respects_workdir_override() -> Result<()> { + // TODO(anp): Construct unified-exec workdir overrides with target-native Windows path types. + skip_if_wine_exec!( + Ok(()), + "duplicates the Windows drive prefix in the workdir URI" + ); skip_if_no_network!(Ok(())); skip_if_sandbox!(Ok(())); skip_if_windows!(Ok(())); @@ -1285,6 +1290,8 @@ async fn unified_exec_terminal_interaction_captures_delayed_output() -> Result<( #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn unified_exec_emits_one_begin_and_one_end_event() -> Result<()> { + // TODO(anp): Use target-native commands and Windows process-session semantics in this fixture. + skip_if_wine_exec!(Ok(()), "uses bash and POSIX sleep/session behavior"); skip_if_no_network!(Ok(())); skip_if_sandbox!(Ok(())); skip_if_windows!(Ok(())); diff --git a/codex-rs/core/tests/suite/view_image.rs b/codex-rs/core/tests/suite/view_image.rs index c2c7b562d8..4bda359c6b 100644 --- a/codex-rs/core/tests/suite/view_image.rs +++ b/codex-rs/core/tests/suite/view_image.rs @@ -280,6 +280,9 @@ async fn user_turn_local_image_applies_patch_budget() -> anyhow::Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_attaches_local_image() -> anyhow::Result<()> { + // TODO(anp): Load image fixtures through the selected environment's filesystem so target-native + // Windows paths work as well as host-local paths. + skip_if_wine_exec!(Ok(()), "view_image cannot read the remote Windows cwd yet"); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -674,6 +677,9 @@ async fn view_image_routes_to_selected_remote_environment() -> anyhow::Result<() #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_can_preserve_original_resolution_when_requested_on_gpt5_3_codex() -> anyhow::Result<()> { + // TODO(anp): Load image fixtures through the selected environment's filesystem so target-native + // Windows paths work as well as host-local paths. + skip_if_wine_exec!(Ok(()), "view_image cannot read the remote Windows cwd yet"); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -843,6 +849,9 @@ async fn view_image_tool_errors_clearly_for_unsupported_detail_values() -> anyho #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_treats_null_detail_as_omitted() -> anyhow::Result<()> { + // TODO(anp): Load image fixtures through the selected environment's filesystem so target-native + // Windows paths work as well as host-local paths. + skip_if_wine_exec!(Ok(()), "view_image cannot read the remote Windows cwd yet"); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -933,6 +942,9 @@ async fn view_image_tool_treats_null_detail_as_omitted() -> anyhow::Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_resizes_when_model_lacks_original_detail_support() -> anyhow::Result<()> { + // TODO(anp): Load image fixtures through the selected environment's filesystem so target-native + // Windows paths work as well as host-local paths. + skip_if_wine_exec!(Ok(()), "view_image cannot read the remote Windows cwd yet"); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -1027,6 +1039,9 @@ async fn view_image_tool_resizes_when_model_lacks_original_detail_support() -> a #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_does_not_force_original_resolution_with_capability_only() -> anyhow::Result<()> { + // TODO(anp): Load image fixtures through the selected environment's filesystem so target-native + // Windows paths work as well as host-local paths. + skip_if_wine_exec!(Ok(()), "view_image cannot read the remote Windows cwd yet"); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -1117,6 +1132,12 @@ async fn view_image_tool_does_not_force_original_resolution_with_capability_only #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_errors_when_path_is_directory() -> anyhow::Result<()> { + // TODO(anp): Resolve view_image paths through the selected environment before asserting + // target-native directory errors. + skip_if_wine_exec!( + Ok(()), + "view_image cannot inspect the remote Windows cwd yet" + ); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -1187,6 +1208,9 @@ async fn view_image_tool_errors_when_path_is_directory() -> anyhow::Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_turns_invalid_image_into_placeholder() -> anyhow::Result<()> { + // TODO(anp): Load image fixtures through the selected environment's filesystem so target-native + // Windows paths work as well as host-local paths. + skip_if_wine_exec!(Ok(()), "view_image cannot read the remote Windows cwd yet"); skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -1251,6 +1275,12 @@ async fn view_image_tool_turns_invalid_image_into_placeholder() -> anyhow::Resul #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn view_image_tool_errors_when_file_missing() -> anyhow::Result<()> { + // TODO(anp): Resolve view_image paths through the selected environment before asserting + // target-native missing-file errors. + skip_if_wine_exec!( + Ok(()), + "view_image cannot inspect the remote Windows cwd yet" + ); skip_if_no_network!(Ok(())); let server = start_mock_server().await; diff --git a/tools/argument-comment-lint/list-bazel-targets.sh b/tools/argument-comment-lint/list-bazel-targets.sh index 6ca7463ec4..49113bb50d 100755 --- a/tools/argument-comment-lint/list-bazel-targets.sh +++ b/tools/argument-comment-lint/list-bazel-targets.sh @@ -18,9 +18,11 @@ if [[ "${RUNNER_OS:-}" != "Windows" ]]; then manual_rust_test_targets="$(printf '%s\n' "${manual_rust_test_targets}" | grep -v -- '-windows-cross-bin$' || true)" fi -# Wine-exec wrappers have no Rust sources of their own and require the transitioned Windows -# toolchain, which the lint configuration does not register. Their native Rust test binaries are -# already covered through the corresponding native test targets. +# Generated `*-wine-exec-test` targets are Linux launchers around the host-native test binary and +# a separately transitioned Windows exec-server binary. The corresponding native test target is +# linted on Linux and macOS, while the exec-server binary is linted under `cfg(windows)` by the +# Windows lint job. Exclude only the launchers here because this lint configuration cannot analyze +# their transitioned data dependency. wine_exec_test_targets="$( ./.github/scripts/run-bazel-query-ci.sh \ --output=label \