Thank you for your interest in contributing! This guide covers everything you need to get started.
- Python 3.11+ β python.org
- JJ (Jujutsu) β required for running tests (FAVA Trails uses JJ as its VCS engine)
- uv β Python package manager (docs.astral.sh/uv)
fava-trails install-jjThis downloads a pre-built binary for your platform to ~/.local/bin/jj. Supports Linux (x86_64, aarch64) and macOS (x86_64, arm64). Make sure ~/.local/bin is in your PATH. Alternatively, install manually from jj-vcs.github.io/jj.
# Clone the repo
git clone https://github.com/MachineWisdomAI/fava-trails.git
cd fava-trails
# Install dependencies (including dev tools)
uv syncuv run pytest -vTests create temporary JJ repositories in isolated directories β no external data repo required.
uv run ruff check src/ tests/All PRs must pass ruff with zero errors.
- Fork the repo and create a branch:
git checkout -b fix/my-fix - Make your changes
- Run tests and linting to verify everything passes
- Push your branch and open a pull request
- Tests pass (
uv run pytest -vexits 0) - Lint passes (
uv run ruff check src/ tests/exits 0) - PR title follows Conventional Commits (e.g.,
feat: add X,fix: resolve Y,chore: update Z) β enforced by CI - One logical change per PR β keep PRs focused
FAVA Trails is used as a live MCP server, so changes need validation beyond unit tests.
Every PR runs:
- test β
uv run pytest -v - Semantic PR β validates PR title follows Conventional Commits
Both must pass before merge.
After merging to main, point your MCP server at the dev copy to test with real usage:
Restart your MCP client (e.g., Claude Code) and use it for real work. Test the specific changes you made β save thoughts, recall, sync, etc. Use it for at least a working session before releasing.
Once dog-fooding confirms the changes work:
- Bump version in
pyproject.toml - Push the version bump via PR, merge to
main - Create a GitHub Release:
gh release create vX.Y.Z --generate-notes - CI builds, verifies the tag matches
pyproject.toml, and publishes to PyPI - Update the vendor copy:
cd ~/git/vendor/fava-trails git fetch && git checkout vX.Y.Z
- Revert
~/.claude.jsonback to the vendor path - Restart your MCP client
Use the bug report template. Include your JJ version (jj --version), OS, Python version, and steps to reproduce.
For security vulnerabilities, please use GitHub Security Advisories β do not file public issues for security bugs.