Thank you for your interest in contributing to memory-access! This document provides guidelines for development, version management, and the release process.
-
Clone the repository:
git clone https://github.com/emmahyde/memory-access.git cd memory-access -
Install dependencies:
uv sync --group dev
-
Run tests to ensure everything works:
uv run pytest
For a specific test file:
uv run pytest tests/test_storage.py
For a specific test:
uv run pytest tests/test_storage.py::TestInsightStoreInit::test_initialize_creates_tables
-
Run the MCP server locally:
uv run memory-access
This project follows Semantic Versioning (MAJOR.MINOR.PATCH).
When code is merged to the main branch, the Release & Publish CI/CD workflow automatically:
- Reads your commit message
- Detects the version bump type from keywords
- Updates
pyproject.tomlwith the new version - Creates a git tag (
vX.Y.Z) - Publishes to PyPI
- Creates a GitHub Release with auto-generated notes
You do not manually bump versions. The CI/CD pipeline handles this automatically based on your commit message.
Include one of these keywords in your commit message to specify the bump type:
No keyword needed. Patch bumps occur by default for any merge.
Example:
git commit -m "fix: handle edge case in normalizer"Include [minor] in your commit message.
Example:
git commit -m "feat: add new API endpoint for graph traversal [minor]"Include [major] in your commit message.
Example:
git commit -m "refactor: redesign core API with breaking changes [major]"Important: When bumping major or minor, the patch version resets to 0.
To skip the automatic release and version bump entirely, use either:
# Skip all CI workflows
git commit -m "docs: update README [skip ci]"
# Skip only the release workflow
git commit -m "chore: update dependencies [skip release]"-
Create a feature branch from
main:git checkout -b feature/your-feature-name
-
Make your changes and write tests if applicable.
-
Run tests to ensure nothing breaks:
uv run pytest
-
Commit with clear, descriptive messages following the version bumping convention above:
git commit -m "feat: describe what you added [minor]" -
Push to GitHub and open a pull request:
git push origin feature/your-feature-name
- Tests workflow (
tests.yml) — Runs on every push and PR to verify code quality - Release & Publish workflow (
release.yml) — Runs on merges tomain(unless[skip ci]or[skip release]is in the commit message) - Publish to PyPI workflow (
publish-pypi.yml) — Triggered by git tags created by the release workflow
- The release workflow detects the bump type from your commit message
- Version in
pyproject.tomlis automatically updated - A git tag is created (e.g.,
v0.1.4) - Changes are pushed back to
main - The tag triggers the PyPI publish workflow
- Your code is automatically published to PyPI
- A GitHub Release is created with auto-generated notes
- Use clear, descriptive variable and function names
- Include docstrings for public APIs
- Follow PEP 8 conventions (enforced by tests where applicable)
- Write async-first code where applicable (this is an async-heavy codebase)
- Write tests for new features and bug fixes
- Use the
tmp_dbfixture fromconftest.pyfor isolated database tests - Tests use
pytest-asynciowithasyncio_mode = "auto"— async test functions work naturally - Ensure all tests pass before opening a PR:
uv run pytest
If you have questions or need clarification:
- Open an issue on GitHub
- Check existing documentation in README.md and CLAUDE.md
- Review the source code — it's well-commented and organized
All contributions are licensed under the Apache-2.0 license. See the LICENSE file for details.