Skip to content

chore: two-tier AI issue triage (draft) - #2895

Merged
alexbelgium merged 4 commits into
masterfrom
chore/ai-issue-triage
Jul 23, 2026
Merged

alexbelgium merged 4 commits into
masterfrom
chore/ai-issue-triage

Conversation

@alexbelgium

@alexbelgium alexbelgium commented Jul 23, 2026 •

Copy link
Copy Markdown
Owner

Installs the two-tier AI issue-triage system and its helpers:

Path Purpose
.github/workflows/on_issues_ai_triage.yaml Tier 1 — classify every new issue (Sonnet, cheap)
.github/workflows/weekly_ai_fix.yaml Tier 2 — weekly Opus sweep over ai-triage issues
.github/scripts/ai_triage_context.sh Builds the context bundle for tier 1
.github/prompts/issue-classify.md Tier-1 classifier instructions
.github/prompts/issue-fix.md Tier-2 fix instructions

Kept in DRY_RUN (tier 1) and draft-PR-only (tier 2). Requires secrets
ANTHROPIC_API_KEY and AI_PR_TOKEN before it does anything live.


Pre-merge verification

1. Rule 0 vs. on_issues_ping_submitter.yml — assumption confirmed, format tightened

ping_submitter does post a comment naming a responsible person, so Rule 0's
premise holds (it is not a label or an assignee). The comment is authored by
github-actions[bot] and has a stable, greppable shape:

<!-- addon-submitter-ping:<addon> -->
Heads up @<user>: this issue appears to mention `<addon>`.

The hidden marker survives into the context bundle verbatim (the bundle dumps
.comments[].body), so the classifier can match it exactly. Rule 0 rewritten
to key off the literal <!-- addon-submitter-ping: marker instead of inferring
ownership from prose, and to guard the @<user> == alexbelgium edge.

Sleep adjusted to real runtime. The two workflows race off the same
issues.opened event. Across the last 10 ping_submitter runs, job time was
6–11 s (e.g. 06:23:12→06:23:21, 07:21:33→07:21:44). Changed
sleep 150 → sleep 60, which still leaves generous margin for runner-queue
skew between the two jobs.

2. ai_triage_context.sh slug resolution — tested on real issues, failures reported (not loosened)

Per instruction, the match was not loosened — here are the failures found by
running the script's exact resolution against real issue titles:

Issue Title shape Resolves to Verdict
#2802 🐛 [Immich Frame] … immich_frame ✅
#2370 🐛 [Changedetection.io] … changedetection.io ✅
#1821 🐛 [BattybirdNET-Pi Docker Standalone] … battybirdnet-pi (via substring fallback) ✅
— [Filebrowser Quantum] … (canonical) filebrowser_quantum ✅
#2586 🐛 [ImmichFrame] … (no space) immich ❌ mis-resolves to the wrong add-on
#1498 ✨ [REQUEST] BattyBirdnet-Pi … UNRESOLVED ❌ first bracket is [REQUEST], addon name ignored
#2752 FileBrowser Quantum: … (no brackets) UNRESOLVED ❌ colon form not handled

Three real-world failure classes:

  1. Concatenated names → wrong add-on (worst case). [ImmichFrame] has no
    separator, so no directory matches exactly and the substring fallback
    (index(candidate, dirname)) latches onto the shorter immich. This
    silently points the tier-2 fix bot at the wrong add-on's source. Real hits:
    🐛 [ImmichFrame] Config options no longer work #2586, ✨ [REQUEST] ImmichFrame - Multi Account support #2582.
  2. Leading tag bracket. head -n1 on the first [...] grabs [REQUEST] /
    [Bug]: / [Addon name] and never sees the real name (✨ [REQUEST] BattyBirdnet-Pi x86-64 #1498, [Bug]: Immich add-on v3.0.1-2: microservices worker crash-loops on startup, DB init race condition #2810, 🐛 [Addon name] birdnet-go #2300,
    🐛 [Addon name] Birdnet update #2678, 🐛 [Addon name] birdnet-pi-amd64:2026.03.01 #2839, ❓ [addon] immich update #2178).
  3. No brackets at all (FileBrowser Quantum: …, FileBrowser Quantum: Configuration doesn't survive over restarts #2752) → unresolved.

Cases 1–2 are the ones to weigh: an UNRESOLVED bundle is caught by the
classifier's low-confidence rule, but a confident wrong slug (#2586) is not.
Left as-is per the "report, don't silently loosen" instruction — flagging for a
decision on the fallback heuristic.

3. actionlint + yamllint

  • actionlint: clean on both workflows (exit 0). The only initial finding
    was one info-level SC2016 on intentional literal-Markdown backticks;
    silenced with a scoped # shellcheck disable=SC2016.
  • yamllint: this repo ships no .yamllint config and its lint.yml
    super-linter explicitly excludes .github/workflows/.*, so workflows are not
    linted in CI. Under stock yamllint defaults the only items are the universal
    truthy false-positive on the required on: key and line-length>80 on
    shell/comment lines — neither enforced here, so left unchanged rather than
    reformatting working shell.
  • Bonus: ai_triage_context.sh is shellcheck-clean (super-linter does lint
    .github/scripts/).

Note: anthropics/claude-code-action (requested evaluation)

The action is already correctly integrated in both workflows, so no change
was needed to "include" it:

  • @v1 pinned; anthropic_api_key is a valid auth input.
  • Both provide an explicit prompt, which puts the action in unattended
    automation mode (no @claude mention required) — correct for
    event/cron-driven triage.
  • Every claude_args flag verified against the claude CLI: --model
    (claude-sonnet-5, claude-opus-4-8), --effort (low/xhigh),
    --max-turns, --allowedTools are all real flags.

No structural improvement warranted; the integration follows the documented
pattern.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added an automated AI issue triage workflow for newly opened issues that generates labels and, when warranted, posts an initial triage comment (with a default dry-run mode).
    • Added AI context gathering to improve decisions by combining the issue details with best-matched add-on information and related past issues.
    • Added a scheduled and manual AI “fix sweep” workflow that batch-processes eligible issues to propose draft fix PRs.
    • Added stronger safety guardrails, including preventing changes to protected areas and routing uncertain cases to human review.

Install tier-1 classifier (on_issues_ai_triage.yaml) and tier-2 fix sweep
(weekly_ai_fix.yaml) plus their helper script and prompts.

Pre-merge fixes from verification:
- Wait-for-ping sleep 150s -> 60s. on_issues_ping_submitter completes in
  6-11s of job time across the last 10 runs; 60s covers runner-queue skew
  with margin.
- Rule 0 rewritten to match the real ownership signal: ping_submitter posts
  a github-actions[bot] comment with a stable marker
  `<!-- addon-submitter-ping:<addon> -->`. Rule 0 now keys off that literal
  marker instead of fuzzy prose, and guards against @<user> == alexbelgium.
- Silence one intentional shellcheck SC2016 (literal Markdown backticks) so
  actionlint runs clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 23, 2026 •

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Adds AI issue-triage and add-on fix-sweep automation, including context generation, strict classification and fix prompts, scheduled/manual workflows, verdict application, and protected-path safeguards.

Changes

AI issue automation

Layer / File(s) Summary
Issue context bundle
.github/scripts/ai_triage_context.sh
Generates Markdown context from issue metadata, matching add-on files, recent history, labels, comments, and similar issues.
Issue classification workflow
.github/prompts/issue-classify.md, .github/workflows/on_issues_ai_triage.yaml
Defines the verdict JSON contract, runs classification for new issues, and applies labels and optional comments with dry-run and confidence handling.
Batch fix sweep and safeguards
.github/prompts/issue-fix.md, .github/workflows/daily_ai_fix.yaml
Defines constrained add-on fix procedures, processes scheduled or manually selected issues, and blocks generated PRs that modify protected paths.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Possibly related PRs

Suggested labels: enhancement

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: a draft two-tier AI issue-triage system.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@alexbelgium alexbelgium reopened this Jul 23, 2026
@alexbelgium
alexbelgium marked this pull request as ready for review July 23, 2026 12:20
Copilot AI review requested due to automatic review settings July 23, 2026 12:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 954f1db7eb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/scripts/ai_triage_context.sh
Comment thread .github/scripts/ai_triage_context.sh Outdated

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

Actionable comments posted: 11

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/prompts/issue-classify.md:
- Around line 13-25: Update the ownership-matching instructions in the
issue-classification flow to require both the exact addon-submitter marker and
the comment author `github-actions[bot]` within the same comment before emitting
`owned`; preserve the existing non-`alexbelgium` submitter condition and stop
behavior.

In @.github/scripts/ai_triage_context.sh:
- Around line 65-66: Remove the `|| true` suppression from the `git
sparse-checkout set` command in the `ADDON` checkout block so a failed add-on
checkout stops triage and prevents classification without its wrapper context.

In @.github/workflows/on_issues_ai_triage.yaml:
- Around line 100-125: The label handling around LABELS must stop applying
arbitrary model-supplied labels, especially the reserved ai-triage trigger.
Build the final LABELS array from an explicit verdict-to-label allowlist,
preserve workflow-owned labels such as ai-triage only for the intended addon-bug
verdict, and filter or reject reserved labels present in verdict.json before gh
issue edit applies them.
- Around line 47-54: Update the “Checkout tooling” actions/checkout@v5 step to
set persist-credentials to false, ensuring the GitHub token is not stored in
local Git configuration before the Claude action runs. Preserve the existing
sparse-checkout configuration.
- Around line 47-64: Pin both actions in the workflow to their reviewed
immutable commit SHAs: replace the v5 reference on Checkout tooling and the v1
reference on the Classify step, using the verified SHA for each action. Preserve
the existing action configuration and secret-handling behavior.

In @.github/workflows/weekly_ai_fix.yaml:
- Around line 44-47: Update the actions/checkout configuration in the workflow
to set persist-credentials to false, preventing AI_PR_TOKEN from remaining in
local Git credentials. Preserve the existing fetch-depth and checkout token, and
keep authentication limited to the trusted post-validation push/PR step.
- Around line 44-47: Update both workflow action references, actions/checkout
and anthropics/claude-code-action, to immutable full commit SHA pins instead of
tag-style versions; retain version comments alongside the pins for tracking and
leave their existing configuration unchanged.
- Around line 29-32: Restructure the sweep workflow so the AI analysis runs in a
read-only job without repository write permissions. Move PR creation and
commenting into a separate trusted mutation job using a fine-grained short-lived
token, and retain path protections that prevent changes to .github/ and
.templates/.
- Around line 76-91: Separate the “Analyse and fix” workflow into an untrusted,
read-only analysis step and a trusted PR-creation step. Restrict the analysis
action to read-only tools, removing Write/Edit, wildcard Bash(git:*),
Bash(gh:*), and unrestricted Docker-build access; have it emit a patch or JSON
artifact. Add a trusted job that validates the artifact against the .github/,
.templates/, and config.yaml path limits before applying changes and creating
PRs.
- Around line 93-114: The Guard forbidden paths step must enforce every
hard-limit requirement from the issue-fix prompt, including protected paths,
immutable config.yaml version/upstream fields, draft-only unmerged status,
branch/add-on mapping, file and diff-size caps, and issue state. Update the PR
discovery to paginate or server-filter AI branches before applying limits, and
make any failed or incomplete validation fail closed rather than allowing the PR
through; retain the existing blocking, undo-ready, label, and comment behavior
for violations.
- Around line 57-64: Update the workflow step around the issue fetch commands to
pass the dispatch values through the step’s env configuration, then use shell
variables instead of directly interpolating inputs.issue and inputs.limit in the
run script. Validate the issue and limit values before supplying them to gh,
while preserving the existing single-issue and open ai-triage batch behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b935f3ee-a65e-4ec9-8553-d676e4bb2853

📥 Commits

Reviewing files that changed from the base of the PR and between fad7656 and 954f1db.

📒 Files selected for processing (5)
  • .github/prompts/issue-classify.md
  • .github/prompts/issue-fix.md
  • .github/scripts/ai_triage_context.sh
  • .github/workflows/on_issues_ai_triage.yaml
  • .github/workflows/weekly_ai_fix.yaml

Comment thread .github/prompts/issue-classify.md Outdated
Comment thread .github/scripts/ai_triage_context.sh Outdated
Comment thread .github/workflows/on_issues_ai_triage.yaml
Comment thread .github/workflows/on_issues_ai_triage.yaml Outdated
Comment thread .github/workflows/on_issues_ai_triage.yaml Outdated
Comment thread .github/workflows/daily_ai_fix.yaml
Comment thread .github/workflows/daily_ai_fix.yaml Outdated
Comment thread .github/workflows/daily_ai_fix.yaml Outdated
Comment thread .github/workflows/daily_ai_fix.yaml
Comment thread .github/workflows/daily_ai_fix.yaml
- Swap anthropic_api_key -> claude_code_oauth_token in both Claude steps,
  reading CLAUDE_CODE_OAUTH_TOKEN from the CR_PAT GitHub Environment. Both
  jobs now declare `environment: CR_PAT` so the environment-scoped secret
  is reachable.
- Rename weekly_ai_fix.yaml -> daily_ai_fix.yaml (matches this repo's
  daily_/weekly_ filename convention) and change its cron from
  "0 3 * * SUN" to "0 3 * * *".
- on_issues_ai_triage.yaml already triggered on issues.opened; no schedule
  change was needed there.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

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

Actionable comments posted: 1

♻️ Duplicate comments (4)
.github/workflows/daily_ai_fix.yaml (4)

48-51: 🔒 Security & Privacy | 🟠 Major

Disable checkout credential persistence.

Set persist-credentials: false; checkout currently leaves the supplied token available for later Git operations. (github.com)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/daily_ai_fix.yaml around lines 48 - 51, Update the
actions/checkout step to set persist-credentials to false alongside the existing
fetch-depth and token options, preventing the supplied AI_PR_TOKEN from
remaining available for subsequent Git operations.

61-67: 🔒 Security & Privacy | 🔴 Critical

Stop interpolating dispatch inputs into shell code.

Pass inputs.issue and inputs.limit through env, validate them, and use shell variables. Current expression expansion allows crafted manual inputs to alter the generated script.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/daily_ai_fix.yaml around lines 61 - 67, Update the
issue-fetching workflow around the issue/limit handling to stop embedding
dispatch expressions directly in shell commands. Pass inputs.issue and
inputs.limit through the step env, validate the resulting shell variables before
use, and substitute those variables in gh issue view/list arguments while
preserving the existing behavior and defaults.

97-118: 🔒 Security & Privacy | 🟠 Major

Fail closed and enforce the complete fix contract.

This guard only checks .github/ and .templates/, and --limit 50 is applied before ai-fix/ filtering. It can miss eligible PRs and allow other prompt-required violations; add pagination and validate all hard limits before permitting a PR.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/daily_ai_fix.yaml around lines 97 - 118, Update the “Guard
forbidden paths” step to paginate through all open PRs before filtering for
ai-fix/ branches, removing the effective 50-PR cap. Expand validation beyond
.github/ and .templates/ to enforce every hard path and change limit required by
the prompt, and fail closed by blocking, labeling, and commenting on any PR that
violates them before it can proceed.

48-48: 🔒 Security & Privacy | 🟠 Major

Pin third-party actions to full commit SHAs.

Replace actions/checkout@v5 and anthropics/claude-code-action@v1 with verified 40-character commit SHAs. GitHub identifies full-SHA pins as the immutable release form. (docs.github.com)

As per path instructions, GitHub Actions workflows require careful permissions and pinned action versions.

Also applies to: 82-82

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/daily_ai_fix.yaml at line 48, Update the workflow’s
actions/checkout and anthropics/claude-code-action references to verified
immutable 40-character commit SHA pins, replacing the current version tags while
preserving their existing action behavior and configuration.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/daily_ai_fix.yaml:
- Line 45: Separate the Claude analysis currently in the sweep job from
repository mutation: create a read-only analysis job without Write/Edit
permissions or AI_PR_TOKEN, then pass its results to a distinct trusted job that
performs validation and PR creation using the required write permissions and
CR_PAT. Update the workflow job dependencies and permissions so the analysis job
cannot mutate the repository while preserving the existing daily AI-fix flow.

---

Duplicate comments:
In @.github/workflows/daily_ai_fix.yaml:
- Around line 48-51: Update the actions/checkout step to set persist-credentials
to false alongside the existing fetch-depth and token options, preventing the
supplied AI_PR_TOKEN from remaining available for subsequent Git operations.
- Around line 61-67: Update the issue-fetching workflow around the issue/limit
handling to stop embedding dispatch expressions directly in shell commands. Pass
inputs.issue and inputs.limit through the step env, validate the resulting shell
variables before use, and substitute those variables in gh issue view/list
arguments while preserving the existing behavior and defaults.
- Around line 97-118: Update the “Guard forbidden paths” step to paginate
through all open PRs before filtering for ai-fix/ branches, removing the
effective 50-PR cap. Expand validation beyond .github/ and .templates/ to
enforce every hard path and change limit required by the prompt, and fail closed
by blocking, labeling, and commenting on any PR that violates them before it can
proceed.
- Line 48: Update the workflow’s actions/checkout and
anthropics/claude-code-action references to verified immutable 40-character
commit SHA pins, replacing the current version tags while preserving their
existing action behavior and configuration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 08daddc1-fb9e-49d6-b659-8b314202aacb

📥 Commits

Reviewing files that changed from the base of the PR and between 954f1db and 17d2976.

📒 Files selected for processing (2)
  • .github/workflows/daily_ai_fix.yaml
  • .github/workflows/on_issues_ai_triage.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/on_issues_ai_triage.yaml

Comment thread .github/workflows/daily_ai_fix.yaml
alexbelgium and others added 2 commits July 23, 2026 14:52
Now that tier 2 runs daily instead of weekly, an issue left carrying
ai-triage after a sweep would be re-selected and fully re-analysed the very
next morning, before there's been a working day to review the first PR.
Nothing previously dropped issues out of the ai-triage backlog once handled.

- issue-fix.md: new hard limit 6 — relabel every issue as the last action
  before moving to the next one. ai:fixed / ai:upstream / ai:needs-human
  replace ai-triage depending on outcome.
- daily_ai_fix.yaml: pre-create the three replacement labels once, up front
  (Claude never has to improvise a color or retry a missing-label error —
  wasted turns multiplied by batch size). Add a "Guard against repeat
  processing" step, same belt-and-braces pattern as the existing forbidden-
  paths guard: force-relabel to ai:needs-human anything the batch still
  finds carrying ai-triage after the run, independent of whether Claude's
  own relabeling succeeded.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Verified each against current code before fixing; verification details are
in the PR description update.

Fixed:
- issue-classify.md: Rule 0 now requires the addon-submitter-ping marker to
  appear in a comment headed "### @github-actions[bot]", not just anywhere
  in a comment or issue body, so it can't be spoofed to suppress triage.
- ai_triage_context.sh: separator-insensitive addon-slug matching (fixes
  "Calibre-web" -> calibre_web, and the earlier ImmichFrame -> immich_frame
  miss) before falling back to substring matching; sparse-checkout failure
  now surfaces "UNRESOLVED" into the bundle instead of silently proceeding
  addon-less; duplicate-issue search excludes the issue being triaged from
  its own candidate list.
- on_issues_ai_triage.yaml: persist-credentials: false on the read-only
  tooling checkout (nothing in that job pushes); both actions pinned to
  commit SHAs (Dependabot already covers github-actions repo-wide, and
  on_issues_ai.yml already sets this precedent for another AI action);
  model-supplied labels are now filtered to drop anything in the ai-*/ai:*
  control namespace before merging with the deterministic ai-triage/
  ai:classified additions, closing a path where a verdict could
  self-trigger tier 2 regardless of its actual classification.
- daily_ai_fix.yaml: both actions pinned to the same commit SHAs;
  workflow_dispatch inputs.issue/inputs.limit moved out of direct
  ${{ }} interpolation in the run: script and into env vars with numeric
  validation (template-injection); Guard forbidden paths' PR listing
  limit raised 50 -> 300 so it can't silently drop ai-fix/ PRs behind
  unrelated open PRs before the branch-name filter applies.

Skipped (reasons in PR description):
- persist-credentials on daily_ai_fix.yaml's checkout: disabling it
  breaks the only auth path git push currently uses, and the same
  AI_PR_TOKEN is already directly readable via GH_TOKEN env by that job's
  unrestricted Bash(git:*)/Bash(gh:*) tools regardless.
- Splitting untrusted AI analysis into a separate job from PR-creation/
  write access: legitimate defense in depth, but a full architecture
  redesign, not a minimal fix.
- Full hard-limit enforcement (config.yaml immutability, diff caps,
  draft-only status) replicated at the workflow level: heavy lift: the
  prompt already covers these as Claude-followed instructions; only the
  protected-paths check is duplicated as deterministic enforcement,
  which is the single highest-severity one to enforce outside the model.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

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

🧹 Nitpick comments (1)
.github/workflows/daily_ai_fix.yaml (1)

58-75: 🚀 Performance & Scalability | 🔵 Trivial

Add a documented upper bound for LIMIT_INPUT.

The validation accepts any positive integer, so a manual dispatch can request a very large issue batch and feed it into the 180-minute, 300-turn Claude run. Reject values above a repository-approved maximum before calling gh.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/daily_ai_fix.yaml around lines 58 - 75, Update the
LIMIT_INPUT validation in the workflow run block to enforce the
repository-approved maximum in addition to requiring a positive integer. Reject
values above that maximum before either gh issue command executes, while
preserving the existing error handling and accepted positive values within the
bound.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/daily_ai_fix.yaml:
- Around line 58-75: Update the LIMIT_INPUT validation in the workflow run block
to enforce the repository-approved maximum in addition to requiring a positive
integer. Reject values above that maximum before either gh issue command
executes, while preserving the existing error handling and accepted positive
values within the bound.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9866fb2e-f236-46c2-968d-6aada5ef5e9c

📥 Commits

Reviewing files that changed from the base of the PR and between fecae32 and 174ffff.

📒 Files selected for processing (4)
  • .github/prompts/issue-classify.md
  • .github/scripts/ai_triage_context.sh
  • .github/workflows/daily_ai_fix.yaml
  • .github/workflows/on_issues_ai_triage.yaml
🚧 Files skipped from review as they are similar to previous changes (3)
  • .github/prompts/issue-classify.md
  • .github/scripts/ai_triage_context.sh
  • .github/workflows/on_issues_ai_triage.yaml

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.

2 participants