Summary
When plan-design-review performs an iterate/recommended design round, multiple successful image generation calls can collapse into a single saved artifact such as variant-recommended.png. The earlier generated candidate is not preserved as a separate PNG and is not included in the comparison board, even though the image generation call succeeded and was billed.
What happened
In a Codex-hosted plan-design-review flow, I generated an initial 3-option board successfully:
variant-A.png
variant-B.png
variant-C.png
design-board.html
Then I asked for a recommended follow-up. The image provider logs showed two successful gpt-image-2 calls in that recommended round, but the design directory only contained one recommended output:
variant-recommended.png
design-board-recommended.html
The first recommended candidate was not saved as a unique file and was not visible in the board.
Expected behavior
Every successful image generation call should produce a durable, non-overwritten artifact and the board should include every generated candidate for that round.
For example, a recommended round with two generated candidates should create something like:
variant-recommended-A.png
variant-recommended-B.png
- optionally
variant-recommended.png as a selected/final alias only after all candidates are preserved
And design-board-recommended.html should compare both variant-recommended-A.png and variant-recommended-B.png.
Actual behavior
Only the last/final recommended image was saved as variant-recommended.png, so the user saw one PNG despite two successful generation calls.
Why this matters
This is a paid-generation artifact accounting problem: the user pays for multiple image calls but may only receive one visible candidate. It also makes design review less trustworthy because the comparison board no longer reflects all generated options.
Suggested fix
Add explicit artifact accounting to the design skill/tooling:
- Never reuse the same output path for multiple image generation calls in a round.
- Use sequence-stable names for recommended/iteration candidates, e.g.
variant-recommended-A.png, variant-recommended-B.png, variant-iteration-01-A.png.
- After generation, verify that the number of saved PNGs matches the requested/generated candidate count.
- Build
$D compare --images ... from all newly generated candidates, not only the last output.
- Treat
variant-recommended.png as an optional alias/copy after preserving all candidates, not as the only output path.
Environment
- gstack version:
1.33.2.0
- local gstack commit:
dc6252d
- host: Codex wrapper running the upstream
plan-design-review workflow
I added a local project wrapper override as a workaround, but this likely belongs upstream in the design artifact workflow so future runs cannot silently drop generated candidates.
Summary
When
plan-design-reviewperforms an iterate/recommended design round, multiple successful image generation calls can collapse into a single saved artifact such asvariant-recommended.png. The earlier generated candidate is not preserved as a separate PNG and is not included in the comparison board, even though the image generation call succeeded and was billed.What happened
In a Codex-hosted
plan-design-reviewflow, I generated an initial 3-option board successfully:variant-A.pngvariant-B.pngvariant-C.pngdesign-board.htmlThen I asked for a recommended follow-up. The image provider logs showed two successful
gpt-image-2calls in that recommended round, but the design directory only contained one recommended output:variant-recommended.pngdesign-board-recommended.htmlThe first recommended candidate was not saved as a unique file and was not visible in the board.
Expected behavior
Every successful image generation call should produce a durable, non-overwritten artifact and the board should include every generated candidate for that round.
For example, a recommended round with two generated candidates should create something like:
variant-recommended-A.pngvariant-recommended-B.pngvariant-recommended.pngas a selected/final alias only after all candidates are preservedAnd
design-board-recommended.htmlshould compare bothvariant-recommended-A.pngandvariant-recommended-B.png.Actual behavior
Only the last/final recommended image was saved as
variant-recommended.png, so the user saw one PNG despite two successful generation calls.Why this matters
This is a paid-generation artifact accounting problem: the user pays for multiple image calls but may only receive one visible candidate. It also makes design review less trustworthy because the comparison board no longer reflects all generated options.
Suggested fix
Add explicit artifact accounting to the design skill/tooling:
variant-recommended-A.png,variant-recommended-B.png,variant-iteration-01-A.png.$D compare --images ...from all newly generated candidates, not only the last output.variant-recommended.pngas an optional alias/copy after preserving all candidates, not as the only output path.Environment
1.33.2.0dc6252dplan-design-reviewworkflowI added a local project wrapper override as a workaround, but this likely belongs upstream in the design artifact workflow so future runs cannot silently drop generated candidates.