Files
Sean P. KaneandGitHub 47e80f1bc7 Refactor (#37)
* refactor: remove macros

* refactor: additional cleanup

* chore: small cleanup

* refactor: update .coderabbit.yaml configuration

* docs: update CLAUDE.md with new documentation

* docs: table alignment
2026-01-17 21:24:37 -08:00

200 lines
6.8 KiB
YAML

# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
# CodeRabbit Configuration
# https://docs.coderabbit.ai/guides/configure-coderabbit
language: en-US
# Tone instructions for reviews
tone_instructions: |
Be concise and direct. Focus on actionable feedback.
Python project using modern tooling (uv, ruff, mypy).
Integrates with FreeCAD CAD software via MCP protocol.
early_access: false
# Enable or disable reviews
reviews:
# Enable automated code reviews
auto_review:
enabled: true
# Don't review drafts until ready
drafts: false
# Review base branches (PRs to main)
base_branches:
- main
- master
# Review profile - assertive catches more issues
profile: assertive
# Request changes when issues found
request_changes_workflow: true
# High-level summary in PR comments
high_level_summary: true
high_level_summary_placeholder: "@coderabbitai summary"
# Add poem to review (disabled - keep it professional)
poem: false
# Collapse walkthrough in large PRs
collapse_walkthrough: true
# Review labeling
labeling_instructions:
- label: "security"
instructions: "Apply when security vulnerabilities are found"
- label: "breaking-change"
instructions: "Apply when changes break backward compatibility"
- label: "documentation"
instructions: "Apply when documentation changes are needed"
# Paths to always review carefully
path_instructions:
- path: "src/freecad_mcp/**/*.py"
instructions: >
This is the core MCP server code. Pay attention to:
- Async/await patterns
- Error handling for FreeCAD operations
- Type hints and Pydantic models
- Security of execute_python functionality
- path: "src/freecad_mcp/tools/**/*.py"
instructions: >
These are MCP tool implementations. Ensure:
- Proper docstrings for tool discovery
- Consistent error handling patterns
- GUI-safe checks (FreeCAD.GuiUp) for view operations
- path: "addon/FreecadRobustMCPBridge/**/*.py"
instructions: >
This code runs inside FreeCAD's Python environment as a workbench addon.
It cannot import packages from the project's virtualenv (mcp, pydantic).
Watch for accidental imports of project dependencies.
- path: ".github/actions/**/*.yaml"
instructions: >
Custom GitHub Actions (composite actions). Check for:
- Proper input/output definitions
- Shell script correctness
- Cross-platform compatibility (x86_64/aarch64)
- path: "tests/**/*.py"
instructions: >
Test files. Ensure good test coverage and clear assertions.
Integration tests require FreeCAD Robust MCP Bridge to be running.
- path: ".github/workflows/**/*.yaml"
instructions: >
GitHub Actions workflows. Check for:
- Proper caching configuration
- Security of secrets handling
- Correct job dependencies
INTENTIONAL PATTERNS (do not flag as issues):
- continue-on-error: true on test steps is intentional during stabilization
- upload-artifact@v6 and download-artifact@v7 work on GitHub-hosted runners
- Actions version jumps (v4 to v6/v7) are intentional Dependabot updates
- path: "pyproject.toml"
instructions: >
Project configuration. Watch for:
- Dependency version constraints
- Tool configuration consistency (ruff, mypy, pytest)
CRITICAL: Python 3.11 is required - FreeCAD bundles libpython3.11.
Using a different Python version causes ABI incompatibility crashes.
INTENTIONAL PATTERN - Dependency version ranges:
- Dependencies use '>=' minimum version constraints (e.g., pydantic>=2.0)
- This is correct for Python libraries per PEP 440 best practices
- Exact versions are pinned in uv.lock for reproducible builds
- Do NOT suggest changing '>=' to '==' - this would break library usability
- The combination of '>=' in pyproject.toml + uv.lock is the modern standard
- path: "README.md"
instructions: >
Main documentation for the FreeCAD Robust MCP Server addon.
The PyPI package name is "freecad-robust-mcp".
- path: "Dockerfile"
instructions: >
Docker image for running FreeCAD MCP Server in containers.
Image name is "freecad-robust-mcp".
- path: ".mise.toml"
instructions: >
Tool version management via mise. All versions use fuzzy matching:
- "0.9" means "0.9.x" (allows patch updates)
- "1.43" means "1.43.x" (allows patch updates)
This is consistent and intentional. Do not flag as inconsistent pinning.
CRITICAL: Python must stay at 3.11 to match FreeCAD's bundled Python.
- path: "justfile"
instructions: >
Main task runner configuration using just (https://just.systems/).
Imports modules from the just/ directory.
- path: "just/*.just"
instructions: >
Just module files for task automation.
INTENTIONAL PATTERN - Heredoc indentation:
- Heredoc content inside recipes IS indented with 4 spaces (matching recipe body)
- This is CORRECT - just automatically strips leading indentation from heredocs
- Do NOT suggest adding more indentation to heredoc content
- Do NOT suggest removing indentation from heredoc content
- The 4-space indent prevents just from parsing embedded code as justfile syntax
- Example: Python code in heredocs uses 4-space indent, just outputs it unindented
INTENTIONAL PATTERN - Module paths:
- Modules use `project_root := justfile_directory()` to get project root
- Do NOT suggest using $(pwd) - it returns the wrong directory in modules
# Tools to use for analysis
tools:
# Python-specific tools
ruff:
enabled: true
# General tools
shellcheck:
enabled: true
markdownlint:
enabled: true
yamllint:
enabled: true
hadolint:
enabled: true
# Files and paths to ignore in reviews (! prefix = exclude)
path_filters:
# Lock files - auto-generated
- "!uv.lock"
- "!poetry.lock"
- "!package-lock.json"
# Generated/cached files
- "!**/.mypy_cache/**"
- "!**/.pytest_cache/**"
- "!**/.ruff_cache/**"
- "!**/__pycache__/**"
- "!**/*.pyc"
# Virtual environments
- "!.venv/**"
- "!venv/**"
# IDE settings (except shared configs)
- "!.idea/**"
# Build artifacts
- "!dist/**"
- "!build/**"
- "!*.egg-info/**"
# Documentation build output
- "!site/**"
# Secrets baseline (reviewed separately)
- "!.secrets.baseline"
# Chat configuration
chat:
auto_reply: true
# Knowledge base for context
knowledge_base:
opt_out: false
learnings:
scope: auto
issues:
scope: auto
jira:
project_keys: []
pull_requests:
scope: auto