Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 149 additions & 35 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
# ancplua-claude-plugins — Claude Code plugin marketplace & agent lab
# Stack: Markdown + YAML frontmatter (skills/commands/agents) + Shell (hooks/scripts)
# CI: claude plugin validate, shellcheck, markdownlint, actionlint, jq
# Scope: 13 plugins, 28 commands, 6 skills, 25 agents — NO C#/.NET code
# Scope: 16 plugins — NO C#/.NET code
#
# Schema-validated against: https://coderabbit.ai/integrations/schema.v2.json
# ─────────────────────────────────────────────────────────────────────────────

language: en-US
Expand All @@ -12,15 +14,19 @@ tone_instructions: >-
One actionable sentence over three hedging ones. No praise for obvious correctness.
Plugin marketplace — files consumed by AI agents, clarity is paramount.
early_access: true
enable_free_tier: false

reviews:
profile: assertive
request_changes_workflow: true
high_level_summary: true
high_level_summary_in_walkthrough: true
review_status: true
review_details: true
commit_status: true
fail_commit_status: true
collapse_walkthrough: false
changed_files_summary: false
sequence_diagrams: false
estimate_code_review_effort: true
assess_linked_issues: true
Expand All @@ -38,7 +44,7 @@ reviews:
instructions: Apply when the PR modifies files under plugins/exodia/.
- label: area:metacognitive-guard
instructions: Apply when the PR modifies files under plugins/metacognitive-guard/.
- label: area:hookify
- label: area:hookify
instructions: Apply when the PR modifies files under plugins/hookify/.
- label: area:feature-dev
instructions: Apply when the PR modifies files under plugins/feature-dev/.
Expand All @@ -52,8 +58,12 @@ reviews:
instructions: Apply when the PR modifies files under plugins/elegance-pipeline/.
- label: area:code-simplifier
instructions: Apply when the PR modifies files under plugins/code-simplifier/.
- label: area:ancplua
- label: area:ancplua
instructions: Apply when the PR modifies files under plugins/ancplua/.
- label: area:rider-respect
instructions: Apply when the PR modifies files under plugins/rider-respect/.
Comment on lines +63 to +64
- label: area:release-pilot
instructions: Apply when the PR modifies files under plugins/release-pilot/.
- label: area:infra
instructions: Apply when the PR modifies .github/, tooling/, or build infrastructure files.
- label: area:docs
Expand Down Expand Up @@ -182,14 +192,34 @@ reviews:
thresholds are reasonable. Flag any guard that could silently pass
when it should block.

- path: plugins/hookify/**
- path: plugins/hookify/**
instructions: >-
User-configurable hook engine. Review for: correct rule schema,
that rule matching logic handles edge cases (empty patterns, regex
escaping), and that blocking vs warning severity is clearly
distinguished. Flag rules that could match too broadly and block
legitimate operations.

- path: plugins/release-pilot/**
instructions: >-
.NET release orchestrator for the four ANcpLua framework repos.
Review for: correct ghost-tag handling (never delete or reassign
remote tags), bounded auto-fix iterations (max 1 dotnet format
whitespace), classify-failure.sh hard-stop allowlist accuracy,
and that the three release patterns (auto-bump / tag-with-gate /
tag-direct) match the consuming repos' workflows. Flag any
broadening of the auto-fix allowlist beyond format-only.

- path: plugins/rider-respect/**
instructions: >-
Rider IDE dry-run plugin. Review for: hard invariant that the skill
NEVER commits, pushes, merges, or suppresses (#pragma / NoWarn /
SuppressMessage). Scope must be captured BEFORE any git stash
(stash-after-scope ordering bug). Discard command must clean
untracked files (git clean -fd) since Rider refactors can create
new .cs files. Flag any "fix" that adds suppression rather than
rewriting the diagnostic.

Comment on lines +213 to +222
- path: plugins/**/scripts/*.sh
instructions: >-
Shell scripts executed by hooks and commands. Review for: shellcheck
Expand All @@ -200,6 +230,13 @@ reviews:
CLAUDE_PLUGIN_ROOT). Flag scripts that source external files without
checking existence. Flag unquoted variables in any context.

- path: plugins/**/bin/*.sh
instructions: >-
Shell scripts under plugin bin/ directories — executed by skills and
commands. Same shellcheck rules as scripts/. Pay special attention
to release-pilot/bin/ scripts which interact with git tags and
NuGet — flag any retag or tag-deletion logic.
Comment on lines +233 to +238

- path: .github/workflows/**
instructions: >-
GitHub Actions workflows for CI, auto-merge, and AI code review.
Expand Down Expand Up @@ -273,14 +310,17 @@ reviews:
auto_review:
enabled: true
auto_incremental_review: true
auto_pause_after_reviewed_commits: 0
drafts: false
ignore_title_keywords:
- '[skip ci]'
- '[skip review]'
- wip
- 'wip'
labels: []
base_branches: []
ignore_usernames:
- dependabot[bot]
- renovate[bot]
- 'dependabot[bot]'
- 'renovate[bot]'

# ── Finishing touches ─────────────────────────────────────────────────────
finishing_touches:
Expand All @@ -300,9 +340,13 @@ reviews:
Include scope matching plugin name or area: (exodia), (metacognitive-guard),
(hookify), (feature-dev), (dotnet-lint), (routing), (council),
(design-studio), (elegance), (code-simplifier), (qyl), (otelhook),
(ancplua), (infra), (docs), (ci).
(ancplua), (rider-respect), (release-pilot), (infra), (docs), (ci).
Under 72 characters. No trailing period.
Examples: feat(exodia): add baryon-mode command, fix(hookify): escape regex in rule matching
description:
mode: warning
issue_assessment:
mode: warning
custom_checks:
- mode: error
name: CHANGELOG updated
Expand Down Expand Up @@ -341,53 +385,109 @@ reviews:
plugin code changes, or both are updated. Fail if: either is stale.

# ── Tools ─────────────────────────────────────────────────────────────────
# Strategy: enable tools relevant to Markdown + Shell + YAML + JSON stack.
# No compiled languages in this repo — all content is declarative or scripted.
# Schema default for ALL tools is enabled:true.
# Explicitly keep what's relevant, disable everything else.
tools:
# ── Active for this stack ──
shellcheck:
enabled: true # Shell script analysis (hooks, build scripts)
enabled: true
actionlint:
enabled: true # GitHub Actions workflow validation
enabled: true
markdownlint:
enabled: true # Markdown formatting (skills, commands, docs)
enabled: true
gitleaks:
enabled: true # Secret scanning
enabled: true
github-checks:
enabled: true
timeout_ms: 120000 # 2 min for CI to complete
timeout_ms: 120000
ast-grep:
essential_rules: true

# ── Explicitly disabled: not in our stack ──
eslint:
enabled: false # No JavaScript/TypeScript
enabled: false
oxc:
enabled: false # No JavaScript/TypeScript
enabled: false
biome:
enabled: false # No JavaScript/TypeScript
enabled: false
ruff:
enabled: false # No Python
enabled: false
pylint:
enabled: false
flake8:
enabled: false
phpstan:
enabled: false # No PHP
golangci-lint:
enabled: false # No Go
enabled: false
phpmd:
enabled: false
phpcs:
enabled: false
swiftlint:
enabled: false
detekt:
enabled: false # No Kotlin
clippy:
enabled: false # No Rust
hadolint:
enabled: false # No Dockerfiles
enabled: false
pmd:
enabled: false
semgrep:
enabled: false # No compiled source to scan
yamllint:
enabled: false # Too pedantic on YAML formatting
enabled: false
opengrep:
enabled: false
trufflehog:
enabled: false
checkov:
enabled: false # No IaC files
trivy:
enabled: false # No container images
enabled: false
tflint:
enabled: false
fortitudeLint:
enabled: false
rubocop:
enabled: false
buf:
enabled: false
regal:
enabled: false
clang:
enabled: false
cppcheck:
enabled: false
circleci:
enabled: false
clippy:
enabled: false
sqlfluff:
enabled: false # No SQL files
enabled: false
trivy:
enabled: false
prismaLint:
enabled: false
shopifyThemeCheck:
enabled: false
luacheck:
enabled: false
brakeman:
enabled: false
dotenvLint:
enabled: false
htmlhint:
enabled: false
stylelint:
enabled: false
checkmake:
enabled: false
osvScanner:
enabled: false
blinter:
enabled: false
yamllint:
enabled: false
Comment on lines +481 to +482

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.

🧹 Nitpick | 🔵 Trivial | 💤 Low value

yamllint disabled despite this being a YAML-heavy repo.

Disabled at line 482, but the repo contains .coderabbit.yaml, workflow files, and plugin YAML frontmatter. actionlint covers workflow YAML; general YAML linting could catch frontmatter issues in SKILL.md files.

Not blocking — actionlint + markdownlint likely sufficient. Flag if YAML frontmatter errors slip through.

🤖 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 @.coderabbit.yaml around lines 481 - 482, Enable yamllint by setting the
yamllint.enabled flag to true in the .coderabbit.yaml config (replace the
current "yamllint: enabled: false" entry), or if you need to limit scope, change
the yamllint config to true and add excludes for directories where it causes
noise; reference the yamllint "enabled" key in the file to locate and update the
setting so YAML frontmatter and non-workflow YAML files are linted.

psscriptanalyzer:
enabled: false
languagetool:
enabled: false # Too noisy for agent prompt prose
enabled: false
hadolint:
enabled: false
golangci-lint:
enabled: false

# ── Chat ──────────────────────────────────────────────────────────────────
chat:
Expand Down Expand Up @@ -415,7 +515,21 @@ knowledge_base:
scope: auto
issues:
scope: auto
pull_requests:
scope: auto
jira:
usage: disabled
linear:
usage: disabled
mcp:
usage: auto

# ── Issue enrichment ──────────────────────────────────────────────────────
issue_enrichment:
auto_enrich:
enabled: true
planning:
auto_planning:
enabled: false
labeling:
auto_apply_labels: true
75 changes: 75 additions & 0 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Claude Code Review

on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
Comment thread
coderabbitai[bot] marked this conversation as resolved.
paths-ignore:
- 'CHANGELOG.md'
- '**/*.lock'
- '**/package-lock.json'
- '**/pnpm-lock.yaml'
- '**/yarn.lock'

permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read

Comment on lines +13 to +19

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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Does anthropics/claude-code-action require GitHub Actions permission id-token: write to function, or can it run without OIDC permissions?

💡 Result:

No, anthropics/claude-code-action does not require GitHub Actions permission id-token: write to function. It can run without OIDC permissions by providing a github_token input, which bypasses the default OIDC-based authentication flow that uses the Claude GitHub App. The default authentication uses OIDC to exchange for a short-lived GitHub App token via Anthropic's endpoint (https://api.anthropic.com/api/github/github-app-token-exchange). This requires id-token: write in the workflow permissions, as explicitly stated in the official FAQ: "If you're using the default GitHub App authentication, you must add the id-token: write permission to your workflow" (result 4). However, the action supports an alternative: pass a custom GitHub token (e.g., generated via actions/create-github-app-token or ${{ secrets.GITHUB_TOKEN }}) using the github_token input. This skips OIDC entirely: "If you wish to not use the GitHub app, you can instead provide a github_token input to the action for Claude to operate with" (result 4). The action.yml confirms github_token as an optional input: "GitHub token for Claude to operate with. Only include this if you're connecting a custom GitHub app of your own!" (results 17, 19, 63). Workflow examples in the repo use ${{ secrets.GITHUB_TOKEN }} without id-token: write (result 17). Issues confirm workarounds like generating app tokens manually and passing github_token to avoid OIDC failures (results 9, 10, 60). Note: Using ${{ secrets.GITHUB_TOKEN }} inherits the workflow's declared permissions (e.g., contents: write), so ensure they match the action's needs (contents, issues, pull-requests read/write). Custom tokens require appropriate repo scopes.

Citations:


🏁 Script executed:

cat -n .github/workflows/claude-code-review.yml

Repository: ANcpLua/ancplua-claude-plugins

Length of output: 3729


🌐 Web query:

anthropics/claude-code-action claude_code_oauth_token authentication flow id-token requirement

💡 Result:

For the official anthropics/claude-code-action, there is NO “id-token required” requirement specifically for claude_code_oauth_token authentication. Instead, the action’s OAuth-token support (claude_code_oauth_token) is an alternative to using an Anthropic API key, and you pass the token as an action input: - claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} (under the with: block, not env:) The id-token (GitHub Actions OIDC token) is required only when you’re using the default Claude GitHub App authentication flow (OIDC token exchange). The action docs/FAQ state that id-token: write is required for OIDC authentication so the Claude GitHub app can function. Key points about the authentication flows: 1) claude_code_oauth_token flow (Anthropic “Claude Code OAuth token”) - Configure: use with: claude_code_oauth_token: ... - Do NOT set CLAUDE_CODE_OAUTH_TOKEN in env; that can break validation because the token won’t be present to the base action. 2) Default GitHub App / OIDC flow (GitHub App token exchange) - Requires workflow permission id-token: write so the action can request an OIDC token. - If your workflow trigger/event makes the OIDC exchange fail (e.g., pull_request_target), you can see “Invalid OIDC token” errors. - If you don’t provide a github_token (custom GitHub token / app token generation), some OAuth-token setups can still attempt the GitHub App OIDC exchange first and fail until github_token is provided. So: claude_code_oauth_token does not imply an id-token requirement; id-token is tied to the GitHub App OIDC exchange path, not the Anthropic OAuth token path. Example workflow snippet (OAuth token as an input): - uses: anthropics/claude-code-action@v1 with: claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} prompt: "Review this PR" Example permissions when you are using OIDC/GitHub App auth: permissions: contents: read id-token: write

Citations:


🌐 Web query:

anthropics/claude-code-action required GitHub Actions permissions contents pull-requests issues actions

💡 Result:

Required GitHub Actions permissions for anthropics/claude-code-action (to let Claude Code read workflow run data/logs for PRs/issues) 1) Minimum repository permissions the Claude Code GitHub App uses (no “actions” access yet) - Contents: read & write - Pull Requests: read & write - Issues: read & write These are the “currently used” permissions for the Claude Code GitHub App. 2) GitHub Actions “actions” permission (what you need to analyze CI results/logs) - Add actions: read to your workflow/job permissions so the token can read workflow run data and logs. - Example job permissions from the action docs: permissions: contents: write pull-requests: write issues: write actions: read 3) How to express this with the action (additional_permissions) - Configure the action with additional_permissions containing actions: read. 4) Important nuance: “GitHub App token” vs “GITHUB_TOKEN” - The docs note the GitHub App can be prevented from triggering this action by other bots/apps for security, and that the app receives a short-lived token scoped to the repository. - For workflow run feedback (the “actions: read” capability), you must ensure the token used in your setup has actions: read as described above. 5) Related/adjacent permissions mentioned (not required for the core “actions: read” use case) - The action docs list additional permissions planned for future features: Actions (read) and Checks (read), Workflows (read & write). “Actions (Read)” is specifically called out as enabling access to workflow run data and logs. Answering your keywords directly - “contents pull-requests issues actions”: use contents (read/write or write depending on your needs), pull-requests (read/write), issues (read/write), and add actions: read to let Claude Code read workflow run data/logs. - “required … actions permissions contents pull-requests issues actions”: the action currently uses contents/PRs/issues read+write; actions: read is the extra permission required for workflow-run feedback.

Citations:


Remove id-token: write; keep actions: read for agentic mode.

id-token: write is unnecessary because the workflow uses claude_code_oauth_token authentication, which bypasses GitHub App OIDC. However, actions: read is required for the agentic mode to analyze workflow run data and logs.

Suggested fix
 permissions:
   contents: write
   pull-requests: write
   issues: write
-  id-token: write
   actions: read
🤖 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/claude-code-review.yml around lines 13 - 19, Remove the
unnecessary id-token: write permission from the workflow permissions block
(delete the id-token: write entry) while retaining actions: read so agentic mode
can access workflow run data/logs; ensure the permissions block still includes
contents: write, pull-requests: write, issues: write and actions: read as shown
and that the workflow continues to use claude_code_oauth_token authentication.

jobs:
claude-review:
# Loop-prevention + skip hatches:
# - github.actor != 'coderabbitai[bot]' breaks Claude<->CodeRabbit ping-pong
# - skip-review label / [skip review] in title gives humans an off switch
if: |
github.actor != 'coderabbitai[bot]' &&
github.actor != 'github-actions[bot]' &&
!contains(github.event.pull_request.title, '[skip review]') &&
!contains(github.event.pull_request.labels.*.name, 'skip-review')
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
runs-on: ubuntu-latest
env:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
steps:
- name: Checkout PR head
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.ref }}
fetch-depth: 20

- name: Run Claude Code Review (agentic)
id: claude-review
uses: anthropics/claude-code-action@fefa07e9c665b7320f08c3b525980457f22f58aa # v1
with:
claude_code_oauth_token: ${{ env.CLAUDE_CODE_OAUTH_TOKEN }}
allowed_bots: 'dependabot[bot],renovate[bot]'
track_progress: true
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
plugins: 'code-review@claude-code-plugins'
claude_args: '--model claude-opus-4-7 --max-turns 25'
prompt: |
/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}

Operating mode: **agentic**. You have write access to this PR branch.

Decision tree for every issue you find:
1. **Mechanically fixable** (formatting, naming, simple logic, missing
null check, wrong async pattern, suppression that can be rewritten,
outdated example in docs, broken link, typo, indentation bug) →
apply the fix in a commit pushed to this branch. Don't ask permission.
2. **Structural concern needing human judgment** (architectural trade-off,
novel pattern not seen before, transitive-dependency conflict, breaking
public API change, ambiguous spec) → flag it in a comment and stop.
Don't try to fix it.
3. **Clean** → post a single approval-style comment summarizing what you
verified and stop. Bot-approval is the closest you can get to a real
GitHub APPROVE (which is bot-restricted).

Do not ping the human for things you can fix yourself. The human is the
escape hatch for genuinely hard problems, not for nits.

Read the repo's CLAUDE.md / AGENTS.md / .coderabbit.yaml for invariants
you must enforce. The .coderabbit.yaml path_instructions are authoritative.
Loading
Loading