The Responses API rejects a gpt-4o orchestrator paired with an
`image_generation` tool spec'd as `model: "gpt-image-2"` (400
invalid_request_error). `gpt-image-2` is only valid under a gpt-5
orchestrator; with gpt-4o the tool must omit the `model` field
(defaults to `gpt-image-1`).
This regression landed in v1.43.2.0 (commit 66f3a180, 2026-05-21),
which added `model: "gpt-image-2"` to the `image_generation` tool
spec while leaving the top-level orchestrator at `gpt-4o`. The
pairing took all five `design` subcommands offline with a generic
400 error: `/design-shotgun`, `design variants`, `design generate`,
`design iterate`, and `design evolve`.
Revert the four call sites to the pre-regression shape (drop the
`model` field, fall back to the API default `gpt-image-1`):
- design/src/generate.ts:53
- design/src/variants.ts:73
- design/src/iterate.ts:98 (threaded fresh-prompt call)
- design/src/iterate.ts:145 (threaded follow-up call)
- design/src/evolve.ts:67
Add a static-grep tripwire (`design/test/image-gen-pairing.test.ts`)
that scans every `design/src/*.ts` and fails CI if any module
contains both the literal `model: "gpt-4o"` and the literal
`model: "gpt-image-2"`. The check follows the same shape as the
existing tripwires in browse/test/ (cdp-session-cleanup,
terminal-agent-pid-identity, server-embedder-terminal-port) — single
forbidden source-level pattern, clear remediation in the failure
message. To re-enable gpt-image-2 the orchestrator must also be
bumped off gpt-4o in the same diff; the tripwire allows that because
both literals are no longer present in the same module.
Closes#1771.