Enable Claude PR workflows via tt-pipeline-github-actions - #33
Merged
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
tmessina
approved these changes
Sep 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds two GitHub Actions workflows that wire this repo into the shared Claude PR tooling in
tt-pipeline-github-actions. Both files are thin callers — ~20 lines each, no logic. The workflow bodies, prompts and coding standards live upstream and are maintained centrally.pr-review.yaml— automatic code reviewWhen it runs. On
pull_request[opened, ready_for_review]— when a PR is first opened (including as a draft) and when a draft is marked ready for review.synchronizeandreopenedare deliberately excluded, so it does not re-review on every push. On demand any time via a top-level PR comment containing@claude-review.Context it reads first, in order of authority:
CLAUDE.mdin the repo root — authoritative project rules, architecture, conventionsjava-standards.md,typescript-standards.md,python-standards.md,cpp-standards.md) — standards for untouched languages are skippedREADME.mdas fallback if neither existsAnything found there is treated as source of truth; the generic review guidance applies only where the project is silent.
What it looks for:
CLAUDE.md/ standardsvar)Noise control. Every candidate issue is scored 0–100 and filtered aggressively:
[important][critical]Only findings ≥76 are posted. If it's uncertain something is an issue, it stays silent.
Output format. Line-specific findings are posted as inline review comments on the exact lines, each starting with its severity and score —
[critical] (conf: 95)— followed by the problem and a concrete fix, using GitHub suggestion blocks where the change fits in a few lines. Stylistic issues a formatter or linter would catch are skipped. By default there is no top-level summary comment; only genuine PR-wide design concerns surface at the top level, and inline findings are never recapped there.Both the standards and the review prompt are overridable per repo, no caller change needed:
.github/standards/<language>-standards.mdreplaces the bundled file of that name,.github/prompt-override.mdoverrides parts of the prompt itself.pr-fix.yaml— address review feedbackOn demand only. Never runs automatically. Add a comment containing
@claude-fix:How it reads feedback. Threads come from the GitHub GraphQL API, because REST review comments don't expose resolution state. For each unresolved thread it reads the whole thread rather than just the first comment, and prefers the latest human instruction when comments disagree. Resolved threads are ignored completely, even if they contain useful suggestions. Outdated threads get the current file at HEAD inspected first — if the code already addresses the feedback, no cosmetic change is made just to touch the line. Top-level comments are treated as context only, unless they clearly request a concrete change not covered by a thread.
How it edits. It builds a short worklist from the unresolved threads and fixes each actionable item, keeping edits minimal and consistent with existing patterns — no unrelated refactors, no broad formatting churn, no speculative improvements. If feedback asks for tests, it adds or updates focused tests. If a request is ambiguous, it takes the smallest reasonable interpretation and leaves a comment explaining the assumption.
Validation. Runs the smallest command that exercises the affected module and tests. If validation can't run in the workflow, it says so in its final comment rather than staying quiet about it.
Commit and push. If nothing needed changing, it commits nothing and posts a comment explaining the feedback was already addressed or non-actionable. Otherwise it commits, then fetches and rebases to detect anyone pushing between checkout and push. If that rebase fails it does not force-push — it skips the push entirely and tells you the branch changed under it, asking you to re-trigger. No AI attribution footer in the commit message. Fork PRs are skipped.
Closing the loop. It posts a summary of which threads it addressed and what validation ran, then resolves exactly the threads whose feedback it actually fixed. Threads it skipped or couldn't address stay open for you.
Fix prompt is overridable per repo via
.github/fix-override.md.