diff --git a/test/fixtures/codex_cli.sh b/test/fixtures/codex_cli.sh index fa96c51..c25531e 100644 --- a/test/fixtures/codex_cli.sh +++ b/test/fixtures/codex_cli.sh @@ -12,6 +12,9 @@ printf '%s\n' "$@" > "$fixture_dir/$mode.args" printf '%s\n' "${GEN_AGENT_FIXTURE-unset}" > "$fixture_dir/$mode.env" case "${*}" in + *typed-fail*) + fixture_mode=typed_failure + ;; *fail*) fixture_mode=failure ;; @@ -24,6 +27,11 @@ case "${*}" in esac case "$fixture_mode" in + typed_failure) + printf '%s\n' '{"type":"thread.started","thread_id":"fixture-thread"}' + printf '%s\n' '{"type":"turn.failed","error":{"code":"fixture_error","message":"typed fixture failure"}}' + ;; + failure) printf '%s\n' '{"type":"thread.started","thread_id":"fixture-thread"}' printf '%s\n' '{"type":"turn.failed","error":"fixture failure"}' diff --git a/test/gen_agent/backends/codex_executable_conformance_test.exs b/test/gen_agent/backends/codex_executable_conformance_test.exs index 8b0d8dd..23e51b5 100644 --- a/test/gen_agent/backends/codex_executable_conformance_test.exs +++ b/test/gen_agent/backends/codex_executable_conformance_test.exs @@ -146,6 +146,15 @@ defmodule GenAgent.Backends.CodexExecutableConformanceTest do assert "fail" == List.last(args(context.directory, :fresh)) end + test "structured CLI failure reaches GenAgent without flattening its fields", context do + name = start_agent(context) + + assert {:error, %{"code" => "fixture_error", "message" => "typed fixture failure"}} = + GenAgent.ask(name, "typed-fail") + + assert [%{"code" => "fixture_error"}] = GenAgent.status(name).agent_state.errors + end + for action <- [:interrupt, :watchdog, :stop, :kill] do @tag action: action test "#{action} stops the BEAM task on the executable streaming path", context do