Skip to content

chore(coderabbit): stop re-reviewing the vendored plugin trees - #587

Merged
SUaDtL merged 2 commits into
mainfrom
chore/coderabbit-config
Aug 1, 2026
Merged

chore(coderabbit): stop re-reviewing the vendored plugin trees#587
SUaDtL merged 2 commits into
mainfrom
chore/coderabbit-config

Conversation

@SUaDtL

@SUaDtL SUaDtL commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

Adds a .coderabbit.yaml so 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.py copies
core/pysrc/*.py byte-identically into each plugin's hooks/ directory; tools/build-surface.py
renders core/surface/ into each plugin's commands, skills, routines, agents and includes per
core/hosts.json. CI fails the build if any copy drifts, so a defect in core/ is mechanically
present in every copy.

Unconfigured, CodeRabbit reviews each copy independently. On #576:

Inline comments 102
On plugins/ (derived trees) 49 (48%)
SKILL.md flagged 40 times
_releaselib.py flagged 15 times

Replaying #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_filters
into 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.py files lose
review, 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 from
core/hosts.json, and plugins/ca-pi/generated/ is named like a build output but has no generator
I could find. Both stay reviewed.

inheritance: true is load-bearing. A repo config replaces the central
arbiterForge/coderabbit config outright without it.

Verification

Proven before commit, against git's glob semantics (which CodeRabbit's docs say path_filters map
onto via git sparse-checkout):

  • !plugins/ca/hooks/*.py excludes 58 hook files
  • 55 authored test files under plugins/ca/hooks/tests/ survive
  • 0 of them are caught by the exclusion

Config validated against the live published schema — every key exists, profile enum 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-inheritance and reference/glossary. Both were
verified directly rather than taken at the review's word, and all three corrections held:

  1. Glob semantics are documented, not inferred. The glossary states * matches any filename
    and ** matches any directory depth. The original comment justified that reading via a
    sparse-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.
  2. Org global overrides are never discarded. They apply as the final layer after the
    inheritance chain resolves, whatever a repo sets. The old wording overstated the blast radius
    of omitting inheritance: true, which affects 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.

Still not verified

Whether the central-repo config mechanism works on the free plan. Undocumented per tier.
@coderabbitai configuration on a PR reports the resolved config and the source of each setting,
which is the way to confirm it once arbiterForge/coderabbit exists.

Note on the diff

The .codearbiter/gate-events.log append rides along. git restore --staged on an audit log is
refused 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.

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

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Added structured review guidance for core functionality, governance materials, and Markdown documentation.
    • Improved automated review coverage by distinguishing authored content from verified generated or copied files.
    • Established consistency, source-of-truth, append-only, and executable-content checks for applicable changes.

Walkthrough

The PR adds .coderabbit.yaml. It enables inherited configuration, excludes generated and copied surfaces from review, and adds targeted review instructions for core source, governance artifacts, and Markdown files.

Changes

Review configuration

Layer / File(s) Summary
Configuration inheritance and review scope
.coderabbit.yaml
The configuration inherits central settings and filters generated plugin surfaces and copied hook implementations while retaining authored test coverage.
Path-specific review instructions
.coderabbit.yaml
The configuration adds instructions for core source files, append-only governance artifacts, and Markdown files.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
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.
Title check ✅ Passed The title clearly identifies the configuration change that prevents repeated reviews of vendored plugin trees.
Description check ✅ Passed The description directly explains the configuration, its filtering strategy, verification results, and known limitation.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/coderabbit-config

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

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

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.

👉 Steps to fix this

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

📥 Commits

Reviewing files that changed from the base of the PR and between 8ee5fe1 and 6de596b.

⛔ Files ignored due to path filters (1)
  • .codearbiter/gate-events.log is 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 Quality

Verify 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

Comment thread .coderabbit.yaml Outdated
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.
@SUaDtL
SUaDtL merged commit 1565be5 into main Aug 1, 2026
39 checks passed
@SUaDtL
SUaDtL deleted the chore/coderabbit-config branch August 1, 2026 14:48
@SUaDtL

SUaDtL commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai configuration

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

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

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.

1 participant