chore(coderabbit): stop re-reviewing the vendored plugin trees - #587
Conversation
This repo vendors one source of truth into three host plugins: sync-core.py copies core/pysrc/*.py byte-identically into each plugin's hooks/ dir, and build-surface.py renders core/surface/ into each plugin per core/hosts.json. CI fails if a copy drifts, so a defect in core/ is mechanically present in every copy. Unconfigured, CodeRabbit reviewed each copy independently. On #576 it left 102 inline comments, 48 of which this config now filters, with SKILL.md flagged 40 times and _releaselib.py 15 times. That volume is what forced the deferrals in #577 and #578. Filters are negation-only: it is undocumented whether a positive pattern flips the list into allowlist mode, and guessing wrong would lose review coverage entirely. Verified against git glob semantics that the 55 authored test files under plugins/ca/hooks/tests/ are not caught; the three authored _host.py files are, which is the accepted cost of not using a positive re-include. Nothing is filtered that was not proven derived: plugins/ca-sandbox/ is absent from core/hosts.json and plugins/ca-pi/generated/ has no verified generator, so both stay reviewed. The gate-events.log append rides along because H-05 refuses to let an audit log be unstaged; the log is machine-appended session state.
📝 WalkthroughSummary by CodeRabbit
WalkthroughThe PR adds ChangesReview configuration
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Warning
CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.
Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.
Actionable comments posted: 1
🤖 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 @.coderabbit.yaml:
- Around line 19-21: Correct the CodeRabbit behavior notes in the repository
configuration comments: state that global overrides remain applied after
resolution even when inheritance is disabled, and document path filters using
standard glob semantics where * excludes / and ** matches recursively. Remove
the unsupported sparse-checkout explanation and obsolete first-PR verification
requirement.
🪄 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: Repository YAML (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: 72b9024f-978a-4e28-b55b-2341cda90378
⛔ Files ignored due to path filters (1)
.codearbiter/gate-events.logis excluded by!**/*.log
📒 Files selected for processing (1)
.coderabbit.yaml
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: Analyze (go)
- GitHub Check: Analyze (javascript-typescript)
- GitHub Check: Analyze (python)
- GitHub Check: Analyze (actions)
- GitHub Check: Analyze (rust)
🔇 Additional comments (2)
.coderabbit.yaml (2)
22-22: 📐 Maintainability & Code QualityVerify central configuration resolution before merge.
This setting only inherits available parent configuration. The stated policy depends on
arbiterForge/coderabbit. Confirm that CodeRabbit is installed on that central repository and that a review reports the expected central configuration source. (docs.coderabbit.ai)
1-18: LGTM!Also applies to: 23-56, 63-107
CodeRabbit's review surfaced two documentation pages this config's comments were written without: configuration/configuration-inheritance and reference/glossary. Verified both directly rather than taking the review at its word; all three corrections hold. 1. Glob semantics are documented, not inferred. The glossary states `*` matches any filename and `**` matches any directory depth, so `*` does not cross a separator. The comment previously justified that reading via a git sparse-checkout mapping and asked for empirical confirmation on the first PR. Both are now unnecessary: the behaviour is stated outright, and the 55 authored test files under plugins/ca/hooks/tests/ are provably out of the exclusion. 2. Organization global overrides are never discarded. They apply as the final layer after the inheritance chain resolves, whatever a repo sets. The old wording said every org-wide default is discarded without `inheritance: true`; that is true of the central YAML only. 3. Merge semantics are documented: objects deep-merge, arrays take the child's items first then unique parent items, scalars take the child's value. Recorded so the next reader does not re-derive it. The precedence list is also corrected to the published eight levels.
|
@coderabbitai configuration |
|
Configuration used: Repository YAML (base), Organization UI (inherited) CodeRabbit configuration# Source: Organization UI (inherited)
language: en-US
# Source: Organization UI (inherited)
tone_instructions: ''
# Source: Organization UI (inherited)
early_access: false
# Source: Organization UI (inherited)
enable_free_tier: true
# Source: Repository YAML (base)
inheritance: true
reviews:
# Source: Organization UI (inherited)
profile: chill
# Source: Organization UI (inherited)
request_changes_workflow: true
# Source: Organization UI (inherited)
high_level_summary: true
# Source: Organization UI (inherited)
high_level_summary_instructions: ''
# Source: Organization UI (inherited)
high_level_summary_placeholder: '`@coderabbitai` summary'
# Source: Organization UI (inherited)
high_level_summary_in_walkthrough: true
# Source: Organization UI (inherited)
auto_title_placeholder: '`@coderabbitai`'
# Source: Organization UI (inherited)
auto_title_instructions: ''
# Source: Organization UI (inherited)
review_status: true
# Source: Organization UI (inherited)
review_details: true
# Source: Organization UI (inherited)
review_progress: true
# Source: Organization UI (inherited)
commit_status: true
# Source: Organization UI (inherited)
fail_commit_status: false
# Source: Organization UI (inherited)
collapse_walkthrough: true
# Source: Organization UI (inherited)
changed_files_summary: true
# Source: Organization UI (inherited)
sequence_diagrams: true
# Source: Organization UI (inherited)
estimate_code_review_effort: true
# Source: Organization UI (inherited)
assess_linked_issues: true
# Source: Organization UI (inherited)
related_issues: true
# Source: Organization UI (inherited)
related_prs: true
# Source: Organization UI (inherited)
suggested_labels: true
# Source: defaults
labeling_instructions: []
# Source: defaults
mutually_exclusive_groups: {}
# Source: Organization UI (inherited)
auto_apply_labels: true
# Source: Organization UI (inherited)
suggested_reviewers: true
# Source: Organization UI (inherited)
auto_assign_reviewers: true
# Source: defaults
suggested_reviewers_instructions: []
# Source: Organization UI (inherited)
in_progress_fortune: true
# Source: Organization UI (inherited)
poem: false
# Source: Organization UI (inherited)
enable_prompt_for_ai_agents: true
# Source: Repository YAML (base)
path_filters:
- '!plugins/ca/commands/**'
- '!plugins/ca/skills/**'
- '!plugins/ca/agents/**'
- '!plugins/ca/includes/**'
- '!plugins/ca-codex/skills/**'
- '!plugins/ca-codex/routines/**'
- '!plugins/ca-codex/includes/**'
- '!plugins/ca-pi/skills/**'
- '!plugins/ca-pi/routines/**'
- '!plugins/ca-pi/agents/**'
- '!plugins/ca-pi/includes/**'
- '!plugins/ca/COMMANDS.md'
- '!plugins/ca/SPRINT.md'
- '!plugins/ca/ORCHESTRATOR.md'
- '!plugins/ca-codex/COMMANDS.md'
- '!plugins/ca-codex/SPRINT.md'
- '!plugins/ca-codex/ORCHESTRATOR.md'
- '!plugins/ca-pi/COMMANDS.md'
- '!plugins/ca-pi/SPRINT.md'
- '!plugins/ca-pi/ORCHESTRATOR.md'
- '!plugins/ca/hooks/*.py'
- '!plugins/ca-codex/hooks/*.py'
- '!plugins/ca-pi/hooks/*.py'
# Source: Repository YAML (base)
path_instructions:
- path: core/**
instructions: This is the single source of truth for all three host plugins. tools/sync-core.py copies core/pysrc/*.py byte-identically into each plugin's hooks/ directory, and tools/build-surface.py renders core/surface/ into each plugin's commands, skills, routines, agents and includes, following core/hosts.json. CI fails the build if any copy drifts from its source. Never suggest editing a file under plugins/ to fix a defect — the fix belongs in core/ and the copies are regenerated from it. Report each defect once, against the core/ file, and do not note that the same issue appears in a vendored copy.
- path: .codearbiter/**
instructions: 'Project governance state, not application code: architecture decision records, specs, plans, reports and audit logs. Review these for internal consistency — claims that contradict the code they describe, status headers left stale after a gate cleared, ledgers that disagree with the artifact they summarise, cross-references to issues or commits that do not exist. Do not apply code-style or formatting rules. gate-events.log, overrides.log, triage.log and decisions/decision-log.md are append-only by project rule: never suggest rewriting, reordering, pruning or truncating lines that are already present.'
- path: '**/*.md'
instructions: Prose in this repo is part of the product — skills and commands are read and executed by agents, so an ambiguous instruction is a defect, not a style nit. Prioritise findings where prose and the mechanism it describes disagree, where a documented command or flag no longer exists, or where an instruction cannot be followed literally without a contradiction. Deprioritise wording, tone and formatting preferences.
# Source: Organization UI (inherited)
abort_on_close: true
# Source: Organization UI (inherited)
disable_cache: false
slop_detection:
# Source: Organization UI (inherited)
enabled: true
auto_review:
# Source: Organization UI (inherited)
enabled: true
# Source: Organization UI (inherited)
description_keyword: ''
# Source: Organization UI (inherited)
auto_incremental_review: true
# Source: Organization UI (inherited)
auto_pause_after_reviewed_commits: 0
# Source: defaults
ignore_title_keywords: []
# Source: defaults
labels: []
# Source: Organization UI (inherited)
drafts: true
# Source: Organization UI (inherited)
base_branches:
- .*
# Source: defaults
ignore_usernames: []
finishing_touches:
docstrings:
# Source: Organization UI (inherited)
enabled: true
unit_tests:
# Source: Organization UI (inherited)
enabled: true
simplify:
# Source: Organization UI (inherited)
enabled: false
autofix:
# Source: Organization UI (inherited)
enabled: true
fix_ci:
# Source: Organization UI (inherited)
enabled: true
resolve_merge_conflict:
# Source: Organization UI (inherited)
enabled: true
# Source: defaults
custom: []
pre_merge_checks:
# Source: Organization UI (inherited)
override_requested_reviewers_only: false
docstrings:
# Source: Organization UI (inherited)
mode: warning
# Source: Organization UI (inherited)
threshold: 80
title:
# Source: Organization UI (inherited)
mode: warning
# Source: Organization UI (inherited)
requirements: ''
description:
# Source: Organization UI (inherited)
mode: warning
issue_assessment:
# Source: Organization UI (inherited)
mode: warning
# Source: defaults
custom_checks: []
# Source: defaults
post_merge_actions: []
tools:
ast-grep:
# Source: defaults
rule_dirs: []
# Source: defaults
util_dirs: []
# Source: Organization UI (inherited)
essential_rules: true
# Source: defaults
packages: []
shellcheck:
# Source: Organization UI (inherited)
enabled: true
ruff:
# Source: Organization UI (inherited)
enabled: true
markdownlint:
# Source: Organization UI (inherited)
enabled: true
github-checks:
# Source: Organization UI (inherited)
enabled: true
# Source: Organization UI (inherited)
timeout_ms: 90000
languagetool:
# Source: Organization UI (inherited)
enabled: true
# Source: defaults
enabled_rules: []
# Source: defaults
disabled_rules: []
# Source: defaults
enabled_categories: []
# Source: defaults
disabled_categories: []
# Source: Organization UI (inherited)
enabled_only: false
# Source: Organization UI (inherited)
level: default
biome:
# Source: Organization UI (inherited)
enabled: true
hadolint:
# Source: Organization UI (inherited)
enabled: true
swiftlint:
# Source: Organization UI (inherited)
enabled: true
phpstan:
# Source: Organization UI (inherited)
enabled: true
# Source: Organization UI (inherited)
level: default
phpmd:
# Source: Organization UI (inherited)
enabled: true
phpcs:
# Source: Organization UI (inherited)
enabled: true
golangci-lint:
# Source: Organization UI (inherited)
enabled: true
yamllint:
# Source: Organization UI (inherited)
enabled: true
gitleaks:
# Source: Organization UI (inherited)
enabled: true
trufflehog:
# Source: Organization UI (inherited)
enabled: true
checkov:
# Source: Organization UI (inherited)
enabled: true
tflint:
# Source: Organization UI (inherited)
enabled: true
detekt:
# Source: Organization UI (inherited)
enabled: true
eslint:
# Source: Organization UI (inherited)
enabled: true
e18e:
# Source: Organization UI (inherited)
enabled: true
flake8:
# Source: Organization UI (inherited)
enabled: true
fbinfer:
# Source: Organization UI (inherited)
enabled: true
# Source: Organization UI (inherited)
enable_java: false
fortitudeLint:
# Source: Organization UI (inherited)
enabled: true
rubocop:
# Source: Organization UI (inherited)
enabled: true
buf:
# Source: Organization UI (inherited)
enabled: true
regal:
# Source: Organization UI (inherited)
enabled: true
actionlint:
# Source: Organization UI (inherited)
enabled: true
zizmor:
# Source: Organization UI (inherited)
enabled: true
pmd:
# Source: Organization UI (inherited)
enabled: true
clang:
# Source: Organization UI (inherited)
enabled: true
cppcheck:
# Source: Organization UI (inherited)
enabled: true
opengrep:
# Source: Organization UI (inherited)
enabled: true
semgrep:
# Source: Organization UI (inherited)
enabled: true
circleci:
# Source: Organization UI (inherited)
enabled: true
clippy:
# Source: Organization UI (inherited)
enabled: true
sqlfluff:
# Source: Organization UI (inherited)
enabled: true
squawk:
# Source: Organization UI (inherited)
enabled: true
trivy:
# Source: Organization UI (inherited)
enabled: true
prismaLint:
# Source: Organization UI (inherited)
enabled: true
pylint:
# Source: Organization UI (inherited)
enabled: true
oxc:
# Source: Organization UI (inherited)
enabled: true
shopifyThemeCheck:
# Source: Organization UI (inherited)
enabled: true
luacheck:
# Source: Organization UI (inherited)
enabled: true
brakeman:
# Source: Organization UI (inherited)
enabled: true
dotenvLint:
# Source: Organization UI (inherited)
enabled: true
htmlhint:
# Source: Organization UI (inherited)
enabled: true
stylelint:
# Source: Organization UI (inherited)
enabled: true
checkmake:
# Source: Organization UI (inherited)
enabled: true
osvScanner:
# Source: Organization UI (inherited)
enabled: true
oasdiff:
# Source: Organization UI (inherited)
enabled: true
reactDoctor:
# Source: Organization UI (inherited)
enabled: true
presidio:
# Source: Organization UI (inherited)
enabled: true
blinter:
# Source: Organization UI (inherited)
enabled: true
smartyLint:
# Source: Organization UI (inherited)
enabled: true
emberTemplateLint:
# Source: Organization UI (inherited)
enabled: true
skillspector:
# Source: Organization UI (inherited)
enabled: true
psscriptanalyzer:
# Source: Organization UI (inherited)
enabled: true
chat:
# Source: Organization UI (inherited)
art: true
# Source: Organization UI (inherited)
allow_non_org_members: true
# Source: Organization UI (inherited)
auto_reply: true
integrations:
jira:
# Source: Organization UI (inherited)
usage: auto
linear:
# Source: Organization UI (inherited)
usage: auto
knowledge_base:
# Source: Organization UI (inherited)
opt_out: false
web_search:
# Source: Organization UI (inherited)
enabled: true
code_guidelines:
# Source: Organization UI (inherited)
enabled: true
# Source: defaults
filePatterns: []
learnings:
# Source: Organization UI (inherited)
scope: auto
# Source: Organization UI (inherited)
approval_delay: 0
issues:
# Source: Organization UI (inherited)
scope: auto
jira:
# Source: Organization UI (inherited)
usage: auto
# Source: defaults
project_keys: []
# Source: defaults
excluded_project_keys: []
linear:
# Source: Organization UI (inherited)
usage: auto
# Source: defaults
team_keys: []
pull_requests:
# Source: Organization UI (inherited)
scope: auto
mcp:
# Source: Organization UI (inherited)
usage: auto
# Source: defaults
disabled_servers: []
# Source: Organization UI (inherited)
automatic_repository_linking: false
# Source: defaults
linked_repositories: []
code_generation:
docstrings:
# Source: Organization UI (inherited)
language: en-US
# Source: defaults
path_instructions: []
unit_tests:
# Source: defaults
path_instructions: []
issue_enrichment:
auto_enrich:
# Source: Organization UI (inherited)
enabled: false
planning:
# Source: Organization UI (inherited)
enabled: true
auto_planning:
# Source: Organization UI (inherited)
enabled: true
# Source: defaults
labels: []
labeling:
# Source: defaults
labeling_instructions: []
# Source: Organization UI (inherited)
auto_apply_labels: false
|
Adds a
.coderabbit.yamlso CodeRabbit stops reporting the same defect once per vendored copy.The problem, measured
This repo vendors one source of truth into three host plugins.
tools/sync-core.pycopiescore/pysrc/*.pybyte-identically into each plugin'shooks/directory;tools/build-surface.pyrenders
core/surface/into each plugin's commands, skills, routines, agents and includes percore/hosts.json. CI fails the build if any copy drifts, so a defect incore/is mechanicallypresent in every copy.
Unconfigured, CodeRabbit reviews each copy independently. On #576:
plugins/(derived trees)SKILL.mdflagged_releaselib.pyflaggedReplaying #576's comment paths against this config: 48 of 102 filtered, 54 still reviewed.
That volume is what forced the deferrals in #577 and #578.
Design choices, and what they cost
Negation patterns only. It is undocumented whether a positive pattern flips
path_filtersinto allowlist mode and silences every path it does not name. Guessing wrong loses review coverage
entirely, so nothing here is a positive pattern. The cost: the three authored
_host.pyfiles losereview, because re-including them would require a positive pattern. Three small files traded
against 55 test files.
Nothing filtered that was not proven derived.
plugins/ca-sandbox/**is absent fromcore/hosts.json, andplugins/ca-pi/generated/is named like a build output but has no generatorI could find. Both stay reviewed.
inheritance: trueis load-bearing. A repo config replaces the centralarbiterForge/coderabbitconfig outright without it.Verification
Proven before commit, against git's glob semantics (which CodeRabbit's docs say
path_filtersmaponto via
git sparse-checkout):!plugins/ca/hooks/*.pyexcludes 58 hook filesplugins/ca/hooks/tests/surviveConfig validated against the live published schema — every key exists,
profileenum accepted.Full Python suite green (16 script suites + 1308 unittest tests, exit 0), drift checks green.
What the review changed
CodeRabbit's own review of this PR surfaced two documentation pages the config's comments were
written without —
configuration/configuration-inheritanceandreference/glossary. Both wereverified directly rather than taken at the review's word, and all three corrections held:
*matches any filenameand
**matches any directory depth. The original comment justified that reading via asparse-checkout mapping and asked for empirical confirmation on the first PR; both were
unnecessary. This resolves the main open question — the 55 test files are provably safe.
inheritance chain resolves, whatever a repo sets. The old wording overstated the blast radius
of omitting
inheritance: true, which affects the central YAML only.then unique parent items, scalars take the child's value.
Still not verified
Whether the central-repo config mechanism works on the free plan. Undocumented per tier.
@coderabbitai configurationon a PR reports the resolved config and the source of each setting,which is the way to confirm it once
arbiterForge/coderabbitexists.Note on the diff
The
.codearbiter/gate-events.logappend rides along.git restore --stagedon an audit log isrefused by the H-05 guard (lexical over-breadth, the class tracked in #575), and hunting for a
spelling that evades a gate is not something this lane does. The log is machine-appended session
state.