Skip to content

feat(agents): add action-hints footer to review, triage, and fix comments#2775

Open
rh-hemartin wants to merge 1 commit into
mainfrom
fix/1789-review-action-hints
Open

feat(agents): add action-hints footer to review, triage, and fix comments#2775
rh-hemartin wants to merge 1 commit into
mainfrom
fix/1789-review-action-hints

Conversation

@rh-hemartin

Copy link
Copy Markdown
Member

Summary

  • Add "Next steps" footer to review comments on request-changes outcomes, showing /fs-fix, /fs-fix <instruction>, push, and /fs-fix-stop
  • Add "Next steps" footer to triage comments on sufficient action, showing /fs-code and /fs-code <instruction>
  • Add "Next steps" footer to fix agent summary comments, showing /fs-review, /fs-fix <instruction>, and push
  • Add test for fix agent footer presence

Closes #1789

Test plan

  • process-fix-result-test.py passes (27 tests)
  • Deploy to staging, trigger a review with request-changes outcome — verify footer appears
  • Trigger a triage with sufficient action — verify footer appears
  • Trigger a fix agent run — verify footer appears
  • Verify footer does NOT appear on approve, comment, reject, insufficient, duplicate, prerequisites, question outcomes

🤖 Generated with Claude Code

…ents

Users receiving agent comments don't know what commands are available.
Add contextual "Next steps" footers so available actions are discoverable
at the decision point — review (request-changes only), triage (sufficient
only), and fix (always).

Closes #1789, closes #2493, closes #2494

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Hector Martinez <hemartin@redhat.com>
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Add contextual “Next steps” footers to review, triage, and fix agent comments

✨ Enhancement 📝 Documentation 🧪 Tests 🕐 20-40 Minutes

Grey Divider

AI Description

• Add “Next steps” command hints to review comments for request-changes outcomes.
• Add “Next steps” command hints to triage comments for sufficient actions only.
• Add “Next steps” footer to fix-agent summary comments and cover it with a unit test.
Diagram

graph TD
  User["Developer / Reviewer"] --> Cmds["Slash commands"]
  TriageSpec["triage.md spec"] --> TriageAgent["Triage comment"] --> User
  ReviewSpec["pr-review SKILL.md"] --> ReviewAgent["Review comment"] --> User
  FixScript["process-fix-result.py"] --> FixComment["Fix summary comment"] --> User
  Cmds --> TriageAgent
  Cmds --> ReviewAgent
  Cmds --> FixComment
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Centralize footer templates in a shared helper
  • ➕ Single source of truth for command text across review/triage/fix outputs
  • ➕ Easier to update commands without missing a prompt/spec location
  • ➖ Requires refactoring wiring between prompt/spec docs and runtime code generation
  • ➖ May be overkill if only fix-agent body is programmatically composed today
2. Link to a canonical “available commands” doc instead of embedding
  • ➕ Keeps comments shorter; avoids repeating command lists
  • ➕ Doc can be updated without changing prompt/spec or code
  • ➖ Lower discoverability at the moment of action (extra click)
  • ➖ Users may ignore links; commands remain less “in your face”

Recommendation: The PR’s approach (contextual, outcome-specific footers) is the best trade-off for discoverability with minimal noise: show hints only when the user is likely to take an action (request-changes / sufficient, and fix summaries). If this pattern expands further, consider centralizing the footer strings in a shared template/helper to avoid drift between specs and runtime rendering.

Files changed (4) +44 / -2

Enhancement (1) +8 / -0
process-fix-result.pyAppend “Next steps” footer to fix-agent summary comments +8/-0

Append “Next steps” footer to fix-agent summary comments

• Updates 'build_summary_body()' to always add a markdown footer describing follow-up actions ('/fs-review', '/fs-fix <instruction>', and pushing commits). Keeps the existing attribution footer intact after the new section.

internal/scaffold/fullsend-repo/scripts/process-fix-result.py

Tests (1) +13 / -0
process-fix-result-test.pyAdd unit test asserting fix-agent footer presence +13/-0

Add unit test asserting fix-agent footer presence

• Introduces a test that builds a fix summary body and asserts the “Next steps” footer and key commands are present. Provides coverage for the newly appended footer behavior.

internal/scaffold/fullsend-repo/scripts/process-fix-result-test.py

Documentation (2) +23 / -2
triage.mdSpecify action-hints footer for 'sufficient' triage comments +8/-0

Specify action-hints footer for 'sufficient' triage comments

• Documents a required “Next steps” footer appended to the triage 'comment' only when 'action' is 'sufficient'. Explicitly instructs omitting the footer for 'insufficient', 'duplicate', 'prerequisites', and 'question'.

internal/scaffold/fullsend-repo/agents/triage.md

SKILL.mdAllow review footer only for 'request-changes' outcomes +15/-2

Allow review footer only for 'request-changes' outcomes

• Refines the review skill guidance to keep review comments footer-free by default, but adds an exception for 'request-changes'. Defines the exact markdown footer content and explicitly omits it for 'approve', 'comment', and 'reject'.

internal/scaffold/fullsend-repo/skills/pr-review/SKILL.md

@github-actions

Copy link
Copy Markdown

Site preview

Preview: https://215ca157-site.fullsend-ai.workers.dev

Commit: eb9a565dd3efb2c220615d8eef5428cff454b70e

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Qodo Logo

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 30, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:54 AM UTC · Completed 9:04 AM UTC
Commit: eb9a565 · View workflow run →

@codecov

codecov Bot commented Jun 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Medium

  • [test-inadequate] internal/scaffold/fullsend-repo/scripts/process-fix-result-test.py:180 — The assertion assertIn('/fs-fix', body) passes via substring match against /fs-fix <your instruction> in the production code. The fix agent footer omits a bare /fs-fix option (without arguments), unlike the PR review footer in SKILL.md which lists both /fs-fix and /fs-fix <your instruction> as separate items. The substring assertion masks this inconsistency — the test passes regardless of whether bare /fs-fix is present.
    Remediation: Either add bare /fs-fix to the fix agent footer (consistent with the review footer), or make the assertion precise: assertIn('/fs-fix <your instruction>', body).

Low

  • [stale-doc] docs/agents/review.md:46 — Documentation describes review outcomes but does not mention the new action-hints footer appended to request-changes outcomes. The footer is a UI convenience rather than a behavior change, so this is minor.
  • [stale-doc] docs/guides/user/bugfix-workflow.md:93 — Review outcomes section doesn't mention the new action-hints footer.
  • [pattern-inconsistency] internal/scaffold/fullsend-repo/agents/triage.md:316 — Triage footer placement guidance says "append to the end of the comment field," which is clear enough for the triage context. Minor gap compared to the more detailed placement instructions in SKILL.md.
  • [design-direction] internal/scaffold/fullsend-repo/agents/triage.md:316 — Conditional footer logic for triage (only for sufficient action) is enforced by agent instructions, not by schema or post-script validation. The fix agent footer is enforced programmatically in process-fix-result.py. This asymmetry is consistent with how other triage behaviors are instruction-driven.

@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.

self.assertIn("**Next steps:**", body)
self.assertIn("/fs-review", body)
self.assertIn("/fs-fix", body)

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] test-inadequate

The assertion assertIn('/fs-fix', body) passes via substring match against '/fs-fix ' in the production code. The fix agent footer omits a bare '/fs-fix' option, unlike the PR review footer in SKILL.md which lists both. The substring assertion masks this inconsistency.

Suggested fix: Either add bare '/fs-fix' to the fix agent footer (consistent with the review footer), or make the assertion precise: assertIn('/fs-fix ', body).

- Do not present unverified assumptions with certainty. Convey uncertainty when appropriate.
- Write in second person ("you") addressing the reporter. Do not use first person ("I") — the comment is from the triage system, not an individual.
- If you include `label_actions`, the pipeline appends your label reason to the comment automatically — do not include label justifications in the `comment` field yourself.
- **Action hints footer (sufficient action only):** When `action` is `sufficient`, append the following footer to the end of the `comment` field. Omit it for all other actions (`insufficient`, `duplicate`, `prerequisites`, `question`).

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] pattern-inconsistency

Triage footer placement guidance is adequate but less detailed than SKILL.md's placement instructions.

- Do not present unverified assumptions with certainty. Convey uncertainty when appropriate.
- Write in second person ("you") addressing the reporter. Do not use first person ("I") — the comment is from the triage system, not an individual.
- If you include `label_actions`, the pipeline appends your label reason to the comment automatically — do not include label justifications in the `comment` field yourself.
- **Action hints footer (sufficient action only):** When `action` is `sufficient`, append the following footer to the end of the `comment` field. Omit it for all other actions (`insufficient`, `duplicate`, `prerequisites`, `question`).

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] design-direction

Conditional footer logic for triage is instruction-driven, not enforced by schema or post-script, unlike the fix agent footer which is programmatic.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Jun 30, 2026
@rh-hemartin rh-hemartin self-assigned this Jul 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

requires-manual-review Review requires human judgment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(review): add action hints to review bot comments

1 participant