build(deps-dev): Bump typescript-eslint from 8.66.0 to 8.67.0 in /frontend in the typescript group #27
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
| 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 |