Skip to content

build(deps-dev): Bump typescript-eslint from 8.66.0 to 8.67.0 in /frontend in the typescript group #27

build(deps-dev): Bump typescript-eslint from 8.66.0 to 8.67.0 in /frontend in the typescript group

build(deps-dev): Bump typescript-eslint from 8.66.0 to 8.67.0 in /frontend in the typescript group #27

Workflow file for this run

name: Claude Code
on:
pull_request_review_comment:
types: [created]
pull_request_review:
types: [submitted]
issue_comment:
types: [created]
issues:
types: [opened, assigned]
jobs:
claude:
name: Run Claude Code
# `sender` is on every one of the four payloads, so one test covers a comment, a
# review, and an issue alike. Without it a bot quoting "@claude" starts a loop.
if: |
github.event.sender.type != 'Bot' && (
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
env:
# Route the trigger to exactly one step. Each event carries the trigger text in a
# different payload field, and only one of them is ever populated.
# A PR conversation comment arrives as issue_comment, so PR detection has to test
# github.event.issue.pull_request, not the event name alone.
MODE: >-
${{
(github.event_name == 'pull_request_review' || github.event_name == 'pull_request_review_comment' || (github.event_name == 'issue_comment' && github.event.issue.pull_request != null))
&& contains(github.event.review.body || github.event.comment.body, '@claude review') && 'review'
|| (github.event_name == 'issues' || (github.event_name == 'issue_comment' && github.event.issue.pull_request == null))
&& (contains(github.event.comment.body || format('{0} {1}', github.event.issue.title, github.event.issue.body), '@claude fix') && 'fix'
|| contains(github.event.comment.body || format('{0} {1}', github.event.issue.title, github.event.issue.body), '@claude verify') && 'verify')
|| 'general'
}}
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
# Full history so the verify step can check whether a later commit already fixed
# the reported bug. The PR path deepens a shallow clone on its own.
fetch-depth: 0
- name: Run Claude Code (PR review)
uses: anthropics/claude-code-action@v1
id: claude_review
if: env.MODE == 'review'
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
additional_permissions: |
actions: read
track_progress: true
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
Review this pull request. Reaper deletes media nobody can get back, so read it
in that order.
- The deletion path first. Does this change which media is scored, condemned,
or removed, and does every ambiguity in it resolve toward keeping the file?
`src/reaper/engine/`, `services/planner.py`, `services/executor.py`, and the
transport guard in `clients/` are that path.
- The numbered engineering rules. CLAUDE.md holds the ones that bind every
file, and `.claude/rules/` scopes the rest by path. Read the file that
governs the tree this diff touches.
- Two failures that survive a green test run: a comment claiming a safeguard
the code does not implement, and a test that runs code without asserting
anything about it.
- Then correctness, security, and performance.
- Operator-facing strings are plain language, with no internal vocabulary and
no em dashes. Rule 21 in CLAUDE.md is the full statement.
Note: The PR branch is already checked out in the current working directory.
Use `gh pr comment` for top-level feedback.
Use `mcp__github_inline_comment__create_inline_comment` (with `confirmed: true`)
to highlight specific code issues.
Only post GitHub comments - don't submit review text as messages.
claude_args: |
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"
- name: Run Claude Code (Issue verify)
uses: anthropics/claude-code-action@v1
id: claude_verify
if: env.MODE == 'verify'
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
# Read the code on dev. Fixes land there first, so main would show a bug as
# unfixed after it was already resolved.
base_branch: dev
track_progress: true
prompt: |
REPO: ${{ github.repository }}
ISSUE NUMBER: ${{ github.event.issue.number }}
Reaper is a Python/FastAPI and React application that finds unwatched media,
explains why it thinks each item is expendable, and removes it through
Sonarr/Radarr. This tracker takes bug reports, wrong-call reports, feature
requests, and documentation problems. Questions and setup help belong in
Discussions: https://github.com/scythe-labs/reaper/discussions
Verify this report:
- Say at the top whether files were already removed. A report on the
wrong-call form says so under "How far did it get", and that changes how
fast this needs looking at.
- Name any required template field left blank. On the bug form those are what
happened, steps to reproduce, version, and how they are running it. On the
wrong-call form they are the decision, how far it got, what the explanation
showed, and what Reaper got wrong.
- Search open and closed issues for a duplicate and link it.
- Say which this is: a bug, a wrong call, a feature request, a documentation
problem, or a question that belongs in Discussions.
- Read the code and name the file and function that produces the reported
behavior. Quote the lines that matter.
- Say whether the report still reproduces on dev, or whether a later commit
already fixed it. The reporter's commit hash is in the version field.
- If it is a real bug, propose the fix as a diff in your comment.
Do not commit, push a branch, or open a pull request. Do not add, remove, or
change labels, and do not close the issue. A maintainer acts on your findings.
End with one line: a maintainer can comment "@claude fix" to turn your diff
into a draft pull request.
claude_args: |
--allowedTools "Bash(gh issue view:*),Bash(gh issue list:*),Bash(gh search issues:*)"
- name: Run Claude Code (Issue fix)
uses: anthropics/claude-code-action@v1
id: claude_fix
if: env.MODE == 'fix'
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
# CONTRIBUTING.md: every pull request is based on dev. The action fetches and
# checks out this branch before it creates the working branch.
base_branch: dev
track_progress: true
prompt: |
REPO: ${{ github.repository }}
ISSUE NUMBER: ${{ github.event.issue.number }}
Implement the fix for this issue, then open a draft pull request.
- Fix the cause, not the symptom. Grep every caller of a function you change.
- Keep the change as small as the bug allows. Match the surrounding style.
- Never copy a real title, host, path, username, or library statistic out of
the issue into the tree. Nothing identifying lands in code, tests, or a
commit message.
- Commit and push, then run `gh pr create --draft --base dev`.
- Title the pull request as a Conventional Commit, because it becomes the
commit message on dev. A workflow checks that it parses.
- Write the PR body against .github/PULL_REQUEST_TEMPLATE.md. Keep its
headings, put `Closes #<issue number>` under "What this changes", and answer
"Does this touch the deletion path" honestly.
- Put this on the AI disclosure line: "Claude Code generated this branch from
the issue report. A maintainer reviews and tests it before it leaves draft."
- Leave "How you tested it" empty and every checklist box unchecked. Those
belong to the maintainer who reviews the branch. CI runs the verification
gates on the pull request.
Stop and report instead if the cause is unclear, the fix spans more than a few
files, or it changes scoring, the gates, the planner, or the executor. Those
decide which media is removed and a maintainer writes them. Say what you found
and what you would change.
claude_args: |
--allowedTools "Bash(gh pr create:*),Bash(gh pr view:*),Bash(gh issue view:*)"
- name: Run Claude Code (General)
uses: anthropics/claude-code-action@v1
id: claude
if: env.MODE == 'general'
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
additional_permissions: |
actions: read