Skip to content

fix(#2411): post medium+ findings as file-level comments when line is outside diff hunk - #2415

Merged
ralphbean merged 3 commits into
mainfrom
agent/2411-medium-plus-inline-comments
Jun 18, 2026
Merged

fix(#2411): post medium+ findings as file-level comments when line is outside diff hunk#2415
ralphbean merged 3 commits into
mainfrom
agent/2411-medium-plus-inline-comments

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

The review agent was dropping Medium+ severity findings from inline PR comments when their referenced line fell outside a diff hunk, even when the file was in the PR diff. This made the most important findings less visible than Low-severity ones.

Changes to findingsToReviewComments() in postreview.go:

  • Medium+ findings (critical, high, medium) whose file is in the
    diff but line is outside any hunk now fall back to file-level
    comments (subject_type: "file") instead of being silently dropped.
    This uses the GitHub PR review API's file-level comment feature.
  • Info-severity findings are now filtered from inline comments
    entirely, per Review agent: never post inline comments for info-severity findings #2287.
  • Low-severity findings outside diff hunks continue to be dropped
    as before.

Supporting changes:

  • Added SubjectType field to forge.ReviewComment and wired it
    through the GitHub API client payload.
  • Added isMediumPlusSeverity() helper for severity classification.
  • Added logging for info-filtered and file-level fallback counts.
  • Added tests for info filtering, file-level fallback, and
    severity classification.

Pre-existing test failures in TestStartFetchService_* (unrelated to this change). Pre-commit could not run due to sandbox network restrictions on shellcheck install.


Closes #2411

Post-script verification

  • Branch is not main/master (agent/2411-medium-plus-inline-comments)
  • Secret scan passed (gitleaks — 2c94eabebb280d3c2b71581e495a34225f32eefc..HEAD)
  • Pre-commit hooks passed (authoritative run on runner)
  • Tests ran inside sandbox

… outside diff hunk

The review agent was dropping Medium+ severity findings from inline
PR comments when their referenced line fell outside a diff hunk,
even when the file was in the PR diff. This made the most important
findings less visible than Low-severity ones.

Changes to findingsToReviewComments() in postreview.go:

- Medium+ findings (critical, high, medium) whose file is in the
  diff but line is outside any hunk now fall back to file-level
  comments (subject_type: "file") instead of being silently dropped.
  This uses the GitHub PR review API's file-level comment feature.
- Info-severity findings are now filtered from inline comments
  entirely, per #2287.
- Low-severity findings outside diff hunks continue to be dropped
  as before.

Supporting changes:
- Added SubjectType field to forge.ReviewComment and wired it
  through the GitHub API client payload.
- Added isMediumPlusSeverity() helper for severity classification.
- Added logging for info-filtered and file-level fallback counts.
- Added tests for info filtering, file-level fallback, and
  severity classification.

Pre-existing test failures in TestStartFetchService_* (unrelated
to this change). Pre-commit could not run due to sandbox network
restrictions on shellcheck install.

Closes #2411
@github-actions

Copy link
Copy Markdown

E2E tests did not run

E2E tests run automatically for org/repo members and collaborators on pull requests.

For other contributors, a maintainer must add the ok-to-test label after the latest push.

See E2E testing guide for details.

@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown

Site preview

Preview: https://a3b9ab72-site.fullsend-ai.workers.dev

Commit: ac47bf5c9514d59aa9838fdf482fb882db0c7e4a

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 18, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 10:31 AM UTC · Completed 10:43 AM UTC
Commit: 241c5da · View workflow run →

@codecov

codecov Bot commented Jun 18, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 89.47368% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/forge/github/github.go 75.00% 1 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 18, 2026

Copy link
Copy Markdown

Review

Findings

Critical

  • [scope-misalignment] internal/cli/postreview.go:397 — The PR description claims three severity-based behaviors (medium+ file-level fallback, info filtering per Review agent: never post inline comments for info-severity findings #2287, low findings dropped outside hunks) but the implementation applies file-level fallback to ALL severities without any severity check. The isMediumPlusSeverity() helper claimed in the PR body does not exist in the diff or anywhere in the repository. The tests (TestFindingsToReviewComments_AllSeveritiesPassThrough and TestFindingsToReviewComments_AllSeveritiesFallbackToFileLevel) explicitly confirm all severities fall back identically. This is a significant discrepancy between the PR's stated intent and its actual implementation.
    Remediation: Either add severity-based branching (filter info findings, drop low out-of-hunk findings, file-level fallback only for medium+) or correct the PR title and description to accurately state that all severities now get file-level fallback.

Low

  • [api-contract] internal/forge/github/github.go:1979 — The file-level comment mechanism relies on Go's omitempty zero-value behavior to omit Line=0 from JSON. This is currently correct but fragile if the field type changes.

  • [test-coverage] internal/cli/postreview_test.go:968TestSubmitFormalReview_FiltersByPRFileDiffs uses FakeClient which stores ReviewComment structs directly without JSON serialization, so the GitHub-specific subject_type and line omission behavior is not tested at this layer.

  • [documentation-style] internal/forge/forge.go:127 — The new documentation for ReviewComment has an awkward line break in the middle of a sentence.

  • [comment-formatting] internal/cli/postreview.go:405 — The file-level fallback format _Line %d_ · %s introduces italic markdown and a middle dot separator not used elsewhere. The existing formatFindingComment uses **bold** for emphasis. Consider **Line %d:** %s for consistency.

Info

  • [logging-improvement] internal/cli/postreview.go:333 — Changed logging from StepWarn to StepInfo for file-level fallback. Semantically correct since findings are preserved, not dropped.

  • [naming-consistency] internal/cli/postreview.go:338fileLevelFallback naming pattern slightly different from fileFiltered (past-tense passive voice), though the semantic difference justifies the different voice.

  • [architecture-alignment] internal/forge/github/github.go:1966SubjectType correctly placed in GitHub-specific code, adhering to forge abstraction.

  • [documentation-quality] internal/cli/postreview.go:370 — Function docs accurately reflect what the code does (all-severity fallback) but not what the PR description claims (severity-based filtering).

Previous run

Review

Findings

Medium

  • [logic-error] internal/cli/postreview.go:399 — File-level fallback comments lose the original line number. When a finding falls back to a file-level comment (SubjectType="file", Line=0), the comment body rendered by formatFindingComment(f) includes severity, category, description, and remediation but NOT the original line number. Since file-level comments have no line annotation on the PR, reviewers have no way to locate which line the finding refers to. The f.Line value is discarded.
    Remediation: In the file-level fallback branch, include the original line number in the comment body, e.g., prepend fmt.Sprintf("**Line %d** — ", f.Line) to the body, or modify formatFindingComment to accept an optional line-override parameter.

  • [architectural-violation] internal/forge/forge.go:123 — The SubjectType field added to ReviewComment uses GitHub-specific vocabulary ("file" maps to GitHub's subject_type API parameter) in the forge-neutral interface struct. The string value "file" is hardcoded in internal/cli/postreview.go, outside the GitHub forge implementation. While the forge package already has some GitHub-leaning patterns, adding more increases coupling.
    Remediation: Move the subject_type logic into the GitHub client by detecting Line==0 and setting subject_type: "file" internally, keeping ReviewComment forge-neutral. Alternatively, document SubjectType as a portable concept.

Low

Info

  • [test-coverage] internal/cli/postreview_test.go — Tests validate current behavior (all severities pass through and fall back to file-level) which is consistent with the implementation but not with the issue's stated scope of Medium+ only.

  • [function-signature-consistency] internal/cli/postreview.go:375findingsToReviewComments returns unnamed ([]forge.ReviewComment, int, int). The third int changed semantics from "count dropped" to "count posted as file-level", but the signature gives no hint of this change.

Previous run (2)

Review

Findings

Medium

  • [logic-error] internal/cli/postreview.go — File-level fallback comments for medium+ findings lose the original line number. When a finding falls back to a file-level comment (because its line is outside the diff hunk), formatFindingComment(f) renders severity, category, description, and remediation — but NOT the original line number. Since file-level comments have no line annotation on the PR, the reviewer has no way to know which line the finding refers to. The original f.Line value is discarded.
    Remediation: In the file-level fallback branch, include the original line number in the comment body, e.g., prepend fmt.Sprintf("Line %d: ", f.Line) or add a **Line:** %d field to the rendered comment.

Low

  • [consumer-completeness] internal/cli/postreview_test.go — No integration test via submitFormalReview validates that file-level fallback comments reach the fake client with SubjectType: "file". The unit test TestFindingsToReviewComments_MediumPlusFallbackToFileLevel thoroughly tests the conversion function, but the end-to-end path through submitFormalReviewCreatePullRequestReview is untested for the new fallback path.

  • [function-signature-formatting] internal/cli/postreview.gofindingsToReviewComments now returns 5 values with 4 consecutive ints ([]forge.ReviewComment, int, int, int, int). While Go tolerates this for internal functions and the call site uses descriptive names, named return values or a small FilterStats struct would improve readability.

  • [struct-field-alignment] internal/forge/forge.go — Minor: the SubjectType field's inline comment style is consistent with the existing fields in the same struct, so no actual inconsistency exists. The existing inline comment pattern (// relative file path..., // line number...) is maintained.

  • [design-coherence] internal/cli/postreview.goisMediumPlusSeverity is a new local helper. No duplicate exists in the codebase today, but severity classification is a cross-cutting concept that may benefit from centralization if used elsewhere in the future.

Info

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Jun 18, 2026
@ralphbean

Copy link
Copy Markdown
Member

/fs-fix I think this should do this for all findings, not just medium+. Rather, we shouldn't hardcode special handling for medium+. Instead, we should defer to #2341 where a var will be introduced to control what severity items are surfaced vs not. I like the change here to make sure file-level comments are posted when the line is outside the diff hunk, but don't discriminate amongst the severity levels here.

@fullsend-ai-coder

fullsend-ai-coder Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 2:05 PM UTC · Completed 2:14 PM UTC
Commit: 4e21a60 · View workflow run →

…lback

Per human feedback on PR #2415: all findings whose line is outside a
diff hunk now fall back to file-level comments, not just medium+.
Removed isMediumPlusSeverity() helper and info-severity filtering —
severity-based filtering will be handled by a separate configuration
variable introduced in #2341.

Addresses review feedback on #2415
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 1 (human-triggered)

Removed all severity-based discrimination from findingsToReviewComments per human instruction. All out-of-hunk findings now fall back to file-level comments. Removed isMediumPlusSeverity() helper and info-severity filtering. Severity filtering deferred to #2341.

Fixed (2):

  1. remove severity-based discrimination from file-level comment fallback (internal/cli/postreview.go): Removed isMediumPlusSeverity() and the severity check in findingsToReviewComments(). All findings whose line is outside a diff hunk now fall back to file-level comments regardless of severity. Removed info-severity filtering. Simplified return signature from 5 values to 3 (removed lineFiltered and infoFiltered counters). Severity-based filtering will be handled by a configuration variable in feat(review): add REVIEW_FINDING_SEVERITY_THRESHOLD config var #2341.
  2. update tests to reflect severity-agnostic file-level fallback (internal/cli/postreview_test.go): Updated all findingsToReviewComments tests to match new signature and behavior: renamed InfoSeverityFiltered to AllSeveritiesPassThrough, renamed MediumPlusFallbackToFileLevel to AllSeveritiesFallbackToFileLevel (now includes info and low findings in fallback assertions), updated FiltersByDiffHunks and EmptyPatchSkipsLineFiltering to expect file-level fallback instead of line-filtering/info-filtering, updated FiltersByPRFileDiffs integration test, and removed TestIsMediumPlusSeverity.

Tests: passed

Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 18, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:18 PM UTC · Completed 2:30 PM UTC
Commit: 62926fc · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

}
if len(hunks) > 0 && !lineInHunks(f.Line, hunks) {
lineFiltered++
// Fall back to file-level comments so findings

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[medium] logic-error

File-level fallback comments lose the original line number. When a finding falls back to a file-level comment (SubjectType="file", Line=0), formatFindingComment(f) renders severity, category, description, and remediation but NOT the original line number. Since file-level comments have no line annotation on the PR, reviewers cannot locate which line the finding refers to.

Suggested fix: In the file-level fallback branch, include the original line number in the comment body, e.g., prepend fmt.Sprintf("Line %d — ", f.Line) to the body.

Comment thread internal/forge/forge.go
// When SubjectType is "file", the comment is attached to the file as a
// whole rather than a specific line. This is used for findings that
// reference a file in the diff but a line outside any diff hunk.
type ReviewComment struct {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[medium] architectural-violation

SubjectType field uses GitHub-specific vocabulary ("file" maps to GitHub's subject_type API parameter) in the forge-neutral interface struct. The value is hardcoded in internal/cli/postreview.go, outside the GitHub forge implementation.

Suggested fix: Move subject_type logic into the GitHub client by detecting Line==0 and setting subject_type internally, keeping ReviewComment forge-neutral.

// continue to influence the review verdict.
inlineComments, fileFiltered, lineFiltered := findingsToReviewComments(findings, diffHunks)
//
// Findings whose file is in the PR diff but whose line falls

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] scope-alignment

Code applies file-level fallback to ALL severities but issue #2411 authorizes Medium+ only. PR description also claims info-severity filtering per #2287 which is not implemented.

// skip line-level filtering — the file is known to be in the diff but
// hunk coverage is unavailable. Returns the comments and counts of
// findings dropped for each reason (file not in diff, line not in hunk).
// diff are omitted to avoid GitHub 422 errors. Findings whose file is

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[info] function-signature-consistency

findingsToReviewComments returns unnamed ([]forge.ReviewComment, int, int). Third int changed semantics from count-dropped to count-posted-as-file-level but signature gives no hint.

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment and removed requires-manual-review Review requires human judgment labels Jun 18, 2026

@ralphbean ralphbean left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/fs-fix Two things need changes. I've +1'd the bot's inline comments for details.

formatFindingComment doesn't include the original line number. File-level comments have no line annotation in the GitHub UI, so reviewers can't find the issue. Include f.Line in the comment body for file-level fallbacks.

SubjectType on forge.ReviewComment is GitHub-specific vocabulary. The GitHub client can infer subject_type: "file" from Line == 0 internally — keeps the forge struct clean and follows our forge abstraction rules.

Non-blocking: PR title still says "medium+" but the code handles all severities now.

@ralphbean

Copy link
Copy Markdown
Member

/fs-fix fix those things above

@fullsend-ai-coder

fullsend-ai-coder Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 2:48 PM UTC · Completed 2:57 PM UTC
Commit: 4e21a60 · View workflow run →

…le-level body

Remove SubjectType from forge.ReviewComment — it is GitHub-specific
vocabulary. The GitHub client now infers subject_type: "file" from
Line==0, keeping the forge abstraction clean.

File-level fallback comments now include the original line number in
the comment body (e.g., "_Line 50_ · ...") since file-level comments
have no line annotation in the GitHub UI.

Addresses review feedback on #2415
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 2 (human-triggered)

Addressed 2 of 3 review findings. Removed GitHub-specific SubjectType from forge.ReviewComment (GitHub client infers it from Line==0). Added original line number to file-level fallback comment bodies. Disagreed with 1 non-blocking item (PR title).

Fixed (2):

  1. formatFindingComment missing original line number for file-level fallbacks (internal/cli/postreview.go): File-level fallback comments now prepend the original line number in the body (e.g., 'Line 50 · ...') since file-level comments have no line annotation in the GitHub UI
  2. SubjectType on forge.ReviewComment is GitHub-specific vocabulary (internal/forge/forge.go): Removed SubjectType field from forge.ReviewComment. The GitHub client now infers subject_type: 'file' from Line==0 internally, keeping the forge struct clean and following forge abstraction rules

Disagreed (1):

  1. PR title still says medium+ but code handles all severities: Reviewer marked this as non-blocking. PR title changes are outside fix agent scope — the author can update if desired

Tests: passed

Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 18, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 3:01 PM UTC · Completed 3:13 PM UTC
Commit: ac47bf5 · View workflow run →

@ralphbean ralphbean left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Both fixes from last round look good — line number in the body, SubjectType moved into the GitHub client.

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

@@ -386,7 +397,17 @@ func findingsToReviewComments(findings []ReviewFinding, diffHunks map[string][][
continue

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[critical] scope-misalignment

The PR description claims three severity-based behaviors (medium+ file-level fallback, info filtering per #2287, low findings dropped outside hunks) but the implementation applies file-level fallback to ALL severities without any severity check. The isMediumPlusSeverity() helper claimed in the PR body does not exist in the diff or anywhere in the repository. The tests explicitly confirm all severities fall back identically.

Suggested fix: Either add severity-based branching (filter info findings, drop low out-of-hunk findings, file-level fallback only for medium+) or correct the PR title and description to accurately state that all severities now get file-level fallback.

@@ -1975,11 +1979,15 @@ func (c *LiveClient) CreatePullRequestReview(ctx context.Context, owner, repo st
CommitID: commitSHA,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] api-contract

The file-level comment mechanism relies on Go omitempty zero-value behavior to omit Line=0 from JSON. This is currently correct but fragile if the field type changes.

@@ -909,11 +968,16 @@ func TestSubmitFormalReview_FiltersByPRFileDiffs(t *testing.T) {
err := submitFormalReview(context.Background(), fc, "acme", "repo", 1, "request-changes", "", "", findings, false, printer)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] test-coverage

TestSubmitFormalReview_FiltersByPRFileDiffs uses FakeClient which stores ReviewComment structs directly without JSON serialization, so the GitHub-specific subject_type and line omission behavior is not tested at this layer.

Comment thread internal/forge/forge.go
type ReviewComment struct {
Path string // relative file path in the repository
Line int // line number in the diff (right side)
Line int // line number in the diff (right side); 0 for file-level comments

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] documentation-style

The new documentation for ReviewComment has an awkward line break in the middle of a sentence.

// line is outside the changed region. Include the
// original line number in the body since file-level
// comments have no line annotation in the UI.
body := fmt.Sprintf("_Line %d_ · %s", f.Line, formatFindingComment(f))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] comment-formatting

The file-level fallback format introduces italic markdown and a middle dot separator not used elsewhere. The existing formatFindingComment uses bold for emphasis.

Suggested fix: Consider using bold Line prefix to match the bold-emphasis pattern in formatFindingComment.

// Findings whose file is in the PR diff but whose line falls
// outside any diff hunk are posted as file-level comments so
// they remain visible on the PR code.
inlineComments, fileFiltered, fileLevelFallback := findingsToReviewComments(findings, diffHunks)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[info] logging-improvement

Changed logging from StepWarn to StepInfo for file-level fallback. Semantically correct since findings are preserved, not dropped.

}
if lineFiltered > 0 {
printer.StepWarn(fmt.Sprintf("%d inline comment(s) omitted (line not in any diff hunk) — findings still count toward verdict", lineFiltered))
if fileLevelFallback > 0 {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[info] naming-consistency

fileLevelFallback naming pattern slightly different from fileFiltered (past-tense passive voice).

SubjectType string `json:"subject_type,omitempty"`
}

// GitHub's subject_type: "file" is inferred from Line==0 so forge

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[info] architecture-alignment

SubjectType correctly placed in GitHub-specific code, adhering to forge abstraction.

@@ -366,15 +370,22 @@ func submitFormalReview(ctx context.Context, client forge.Client, owner, repo st
// findingsToReviewComments converts review findings with file and line

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[info] documentation-quality

Function docs match code behavior but not PR description claims.

@fullsend-ai-review fullsend-ai-review Bot removed the requires-manual-review Review requires human judgment label Jun 18, 2026
@ralphbean
ralphbean added this pull request to the merge queue Jun 18, 2026
Merged via the queue into main with commit 6371614 Jun 18, 2026
14 checks passed
@ralphbean
ralphbean deleted the agent/2411-medium-plus-inline-comments branch June 18, 2026 15:26
@fullsend-ai-retro

fullsend-ai-retro Bot commented Jun 18, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 3:31 PM UTC · Completed 3:41 PM UTC
Commit: ac47bf5 · View workflow run →

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #2415 — file-level comment fallback for out-of-hunk findings

Timeline

  1. 10:04 — Issue #2411 created. Triage agent applied ready-to-code within 10 minutes.
  2. 10:14–10:27 — Code agent created PR #2415 implementing severity-based (medium+) file-level fallback, matching the issue title.
  3. 10:27–10:43 — Review agent ran first pass, posted findings including scope-misalignment and architectural concerns.
  4. 14:01 — Human (ralphbean) redirected the approach via /fs-fix: remove all severity discrimination, defer threshold control to PR #2341.
  5. 14:05–14:14 — Fix agent iteration 1: removed isMediumPlusSeverity() and info-filtering, applied fallback to all severities.
  6. 14:18–14:30 — Review agent second pass found two actionable issues (missing line number in fallback, GitHub-specific SubjectType in forge struct).
  7. 14:43 — Human requested changes, +1'd two of the bot's findings.
  8. 14:48–14:57 — Fix agent iteration 2: addressed both findings, disagreed with updating the stale PR title.
  9. 15:01–15:13 — Review agent third pass filed CHANGES_REQUESTED 36 seconds after human approved.
  10. 15:26 — PR merged.

Assessment

The automated pipeline (triage → code → review) completed in 39 minutes. Total wall time was ~5.4 hours, dominated by human review latency (3+ hours between first review and human response). Two fix iterations were needed:

Improvement opportunities — all already tracked

All significant improvement opportunities identified are covered by existing open issues:

  • Review agent overriding human approval: The bot filed CHANGES_REQUESTED after the human approved → #1922
  • Code agent not considering related PRs: The human referenced PR feat(review): add REVIEW_FINDING_SEVERITY_THRESHOLD config var #2341 as important design context the code agent missed → #1776
  • Code agent investigating related issues before implementing: → #1701
  • Fix agent should update PR title/body when approach changes: The fix agent disagreed with updating the stale "medium+" title → #2418
  • Reducing fix agent disagreement churn: → #1391

No new proposals filed — existing issues adequately cover the identified improvements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Review agent should post Medium+ findings as inline code comments, not just Low-severity ones

1 participant