Skip to content

Commit fbf6de1

Browse files
wesmclaude
andcommitted
fix: fall back to stderr when stdout has marker but empty body
When stdout contains only a bare marker (e.g., ">") with no review content, check stderr for the actual review instead of returning "No review output generated". Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7c41d42 commit fbf6de1

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

internal/agent/kiro.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,12 @@ func (a *KiroAgent) Review(ctx context.Context, repoPath, commitSHA, prompt stri
166166
}
167167

168168
// Prefer the stream that contains a "> " review marker.
169-
// - stdout with marker → use stdout
170-
// - stdout empty → try stderr (marker or not)
169+
// - stdout with marker and content → use stdout
170+
// - stdout empty or marker-only → try stderr
171171
// - stdout has content but no marker → use stderr only
172172
// if stderr has a marker (otherwise keep stdout)
173173
result, stdoutMarker := stripKiroReview(stdout.String())
174-
if !stdoutMarker {
174+
if !stdoutMarker || len(result) == 0 {
175175
alt, stderrMarker := stripKiroReview(stderr.String())
176176
if len(alt) > 0 && (len(result) == 0 || stderrMarker) {
177177
result = alt

internal/agent/kiro_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,33 @@ func TestKiroReviewStderrFallback(t *testing.T) {
379379
}
380380
}
381381

382+
func TestKiroReviewStderrFallbackMarkerOnlyStdout(t *testing.T) {
383+
skipIfWindows(t)
384+
385+
// stdout has only a bare ">" marker with no review body;
386+
// stderr has the actual review. stderr should be used.
387+
script := NewScriptBuilder().
388+
AddRaw(`echo ">"`).
389+
AddRaw(`echo "> review from stderr" >&2`).
390+
Build()
391+
cmdPath := writeTempCommand(t, script)
392+
a := NewKiroAgent(cmdPath)
393+
394+
result, err := a.Review(
395+
context.Background(), t.TempDir(),
396+
"deadbeef", "review", nil,
397+
)
398+
if err != nil {
399+
t.Fatalf("unexpected error: %v", err)
400+
}
401+
if !strings.Contains(result, "review from stderr") {
402+
t.Fatalf(
403+
"expected stderr when stdout is marker-only, got: %q",
404+
result,
405+
)
406+
}
407+
}
408+
382409
func TestKiroReviewStderrPreferredOverStdoutNoise(t *testing.T) {
383410
skipIfWindows(t)
384411

0 commit comments

Comments
 (0)