This guide reflects the repository's current local tooling and GitHub Actions checks.
By default, use make for routine development. Direct
uv, ruff, pytest, and
prek usage is still fine when you need a targeted
command.
- Python 3.12 or 3.13
uvmakegit
Python 3.14 is currently unsupported because unstructured, which is used by
the document extraction node, currently declares Requires-Python: <3.14.
make dev
# optional for interactive work
source .venv/bin/activatemake dev will:
- run
uv sync - install
prekGit hooks
The repository uses uv for dependency and
virtual environment management. The default development environment includes
ruff, pytest, pytest-xdist, pytest-cov, pytest-mock, and
prek.
make dev installs prek hooks from
prek.toml.
The current hook set includes:
- trailing whitespace and end-of-file cleanup
- BOM cleanup and line ending normalization
- TOML and YAML validation
- shebang executable checks
- local
make format - local
make lint
Useful direct commands:
uv run prek install
uv run prek run -a
uv run prek list
uv run prek validate-configUse make by default. For targeted work, direct tool usage is still fine:
uv run ruff check src/graphon/path.py
uv run pytest tests/path/test_file.py -k keyword
uv run prek run -aUse these commands for normal development:
make format: runuv run ruff formatmake lint: runuv run ruff check --fixmake check: runuv run ruff format --check && uv run ruff checkmake test: runuv run --frozen pytestmake pre: runformat,lint, andtestmake build: build the package distributionsmake clean: remove build artifacts and caches
Notes:
make lintis mutating. It may rewrite files.make checkis the non-mutating style and lint check used in CI.pytestis configured with-n autoandtestpaths = ['tests'], so the test suite runs in parallel by default.make testuses--frozen. If you change dependencies, refresh and commituv.lockbefore opening a pull request.
For most changes, a good local sequence is:
make pre
make checkmake pre applies local fixes and runs the test suite. make check then
confirms the non-mutating CI check job will pass.
Pull requests targeting main currently run four kinds of checks:
- PR title validation with
amannn/action-semantic-pull-request - Commit history validation with
cocogitto check make checkmake teston Python 3.12 and 3.13
Keep local workflow aligned with those checks. A green local make pre is
useful, but it is not a complete substitute for the exact CI flow because CI
also validates commit messages, PR titles, and a Python version matrix.
This repository enforces Conventional Commits for commit messages. The same format is required for pull request titles.
The PR title validator currently accepts these types:
featfixdocsstylerefactorperftestbuildcichorerevert
Rules:
- use an optional scope when it improves clarity
- mark breaking changes with
! - remember that the pull request title becomes the squash merge commit message
- keep the entire commit history reviewable, because CI validates all commits in the pull request
Examples:
feat: add graph snapshot export
fix(runtime): avoid duplicate node completion events
docs(contributing): clarify CI workflow
refactor(api)!: remove deprecated runtime entrypoint
Before you start implementation or open a new issue, search the existing open and closed issues and pull requests to confirm the work is not already tracked or in progress.
Rules:
- do not open duplicate issues or parallel pull requests for the same change
- if related work already exists, continue that discussion instead of starting a new thread
- if no issue exists for the change, create one before opening a pull request
- if GitHub presents an issue template or issue form, fill out every required field and keep the provided structure intact
Every pull request must be linked to an issue. Use a closing or reference
keyword such as Closes #123, Fixes #123, or Refs #123 in the pull request
body.
Before you open a pull request:
- search existing pull requests again to confirm there is no duplicate review in progress
- make sure the change stays focused and reviewable
- run
make prebefore pushing and keepmake checkgreen locally when possible
When you open a pull request:
- use a Conventional Commits title, and mark breaking changes with
!, because the pull request title becomes the squash merge commit message - link the related issue in the pull request body
- follow
.github/pull_request_template.mdexactly - do not delete required headings or checklist items from the template; if a section is not applicable, say so explicitly
- if CLA Assistant prompts you, sign CLA.md in the pull request conversation before merge
- add or update tests for behavior changes unless the change genuinely does not require them
- update contributor-facing or user-facing documentation when needed
If CLA Assistant asks you to sign the repository CLA, read CLA.md and post this exact comment once in the pull request conversation:
I have read the CLA Document and I hereby sign the CLA
The CLA workflow is separate from the normal PR checks.
Version bumps and changelog updates are managed with
uv version and cog:
make bump SEM=patch
make bump SEM=minor
make bump SEM=majorRelease tags use the v prefix and are intended to be created from main.
CLA signatures are stored on the dedicated cla-signatures branch. Maintainers
must keep that branch available and writable to GitHub Actions.