# CodeRabbit configuration for Eigen.
# Schema: https://docs.coderabbit.ai/reference/configuration
#
# Eigen is a header-only C++14 template library, GitLab-hosted, with a strict
# ABI policy and several major downstream consumers (notably TensorFlow). The
# settings below favor signal over volume: chill profile, minimal noise on
# auto-generated docs and vendored Fortran, and explicit guidance for the
# template-heavy core.

language: en-US

tone_instructions: >-
  Eigen, header-only C++14. Focus: correctness, numerical accuracy (SOTA;
  flag regressions, defer few-ULP tradeoffs to humans), ABI, performance,
  template metaprogramming pitfalls, missing tests. Skip style
  nits and C++17+.

early_access: false
enable_free_tier: true

reviews:
  profile: chill
  request_changes_workflow: false
  # Trim down the noise in the auto-posted comment: drop sections that don't
  # carry weight on a numerics-heavy template library. Keep the walkthrough
  # (file-by-file summary) but skip the high-level summary, the changed-files
  # overview, and don't collapse the walkthrough so reviewers see it expanded.
  high_level_summary: false
  high_level_summary_in_walkthrough: false
  poem: false
  review_status: true
  collapse_walkthrough: false
  changed_files_summary: false
  enable_prompt_for_ai_agents: true
  sequence_diagrams: false
  estimate_code_review_effort: false
  assess_linked_issues: false
  related_issues: false
  related_prs: false
  suggested_labels: false
  suggested_reviewers: false
  in_progress_fortune: false

  pre_merge_checks:
    # Eigen is a header-only template library where docstring coverage
    # has limited value; the docstrings precheck adds noise without signal.
    docstrings:
      mode: off

  auto_review:
    enabled: true
    drafts: false
    # Eigen MRs often see many WIP pushes; reviewing every push burns the
    # per-developer hourly rate limit on the free/OSS tier. Review the first
    # diff only; further reviews can be requested with `@coderabbitai review`.
    auto_incremental_review: false
    base_branches:
      - master

  path_filters:
    - "!doc/snippets/**"
    - "!doc/examples/**"
    - "!lapack/*.f"
    - "!blas/testing/**"
    - "!**/*.png"
    - "!**/*.bin"
    - "!**/*.svg"
    - "!**/*.pdf"

  path_instructions:
    - path: "Eigen/src/**"
      instructions: |
        Eigen is a header-only C++14 template library with a strict ABI policy.
        - **Numerical accuracy is a top priority.** Eigen targets accuracy
          comparable to established numerical libraries such as LAPACK. Flag
          any change that may degrade accuracy, condition handling, stability
          under near-singular / ill-conditioned inputs, or behavior near
          subnormals, infinities, NaNs, or extreme exponents. In general,
          do not trade accuracy for speed.
        - **Acceptable accuracy tradeoff:** a faster algorithm whose
          worst-case error is bounded to a few ULPs by a principled
          analysis may be acceptable. In such cases, surface the tradeoff
          and the bound clearly so a human reviewer can judge; do not
          auto-approve or auto-reject these.
        - **Numerical changes require numerical tests.** Any new numerical
          algorithm, kernel, or accuracy-sensitive change MUST come with
          tests that exercise its accuracy claims (random ill-conditioned
          inputs, edge values, comparisons against a reference). If such
          tests are missing, request them.
        - Treat the public API surface as frozen: do not propose renames or
          signature changes for non-internal types.
        - Performance and inlining matter; flag possible regressions in hot
          paths (products, packet kernels, evaluators, decompositions).
        - Watch for accidental allocations in templates that should be
          allocation-free.
        - C++14 is the minimum; do not suggest C++17+ features. (A migration
          to C++17 is planned on a separate branch; until it lands on master,
          new code must compile under C++14.)
        - Do not propose reordering internal includes; Eigen relies on a
          specific include order.
    - path: "test/**"
      instructions: |
        Tests use the EIGEN_REPEAT-N harness and shard each .cpp into many
        ctest targets. Do not suggest restructuring the harness or
        deduplicating shards. Numerical-tolerance comparisons are deliberate;
        do not push for exact equality. Tests may be long and procedural.
    - path: "unsupported/Eigen/**"
      instructions: |
        Treat unsupported modules as more permissive than core Eigen, but
        keep the public API stable for known downstream consumers (the Tensor
        module is used by TensorFlow).
    - path: "blas/**"
      instructions: |
        These are Reference BLAS API wrappers around Eigen. Match the BLAS
        standard exactly; do not suggest deviating from netlib semantics.
    - path: "lapack/**"
      instructions: |
        The .f sources are vendored netlib LAPACK reference; do not review
        them. The C++ wrappers should faithfully implement the LAPACK
        contract.
    - path: "ci/**"
      instructions: |
        GitLab CI configuration. Be conservative -- do not suggest
        restructuring the existing job graph or changing runner tags without
        strong reason.
    - path: "benchmarks/**"
      instructions: |
        Microbenchmarks built against Google Benchmark. Clarity matters less
        than realistic measurement; flag only correctness or measurement
        methodology issues, not style.

chat:
  auto_reply: true
