Thanks for considering a contribution to logquill. This project also
follows a Code of Conduct — participation in issues,
PRs, and discussions means agreeing to abide by it.
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,http,hooks]"
pre-commit install
ruff check .
mypy logquill
pytest
pytest benchmarks # memory budgets for the logging hot pathpytest benchmarks measures how much memory a log call and a stalled-sink
burst use, and fails if a change pushes either past its budget in
benchmarks/measure.py. It's separate from pytest because coverage's line
tracing distorts the numbers; CI runs it as its own job. If a change
legitimately needs more memory, raise the budget in the same PR and say why.
- Branch from
main, name branches by intent:feat/…,fix/…,docs/…,chore/…(e.g.feat/rotating-file-transport). - Keep PRs scoped to one concern where possible. A PR that mixes an unrelated refactor with a feature is harder to review and harder to revert.
- Every PR must satisfy this definition of done before it's ready for
review:
- Type hints throughout,
mypy --strictclean on the public API - Unit tests cover the new surface; existing tests still pass
- Public API additions documented in the README with a runnable example
CHANGELOG.mdhas an entry underUnreleased- Nothing in the cross-language contract table silently diverged from
logquill-js(open a tracking issue there if it changed) — if you change the record shape, changeschema/record.schema.jsonandschema/golden_records.jsontogether (seeschema/README.md)
- Type hints throughout,
- CI must be green (
ruff check,mypy logquill,pytest,pytest benchmarks) and at least one review approval is required before merge — enforced by branch protection onmain. - Squash-merge into
main— keep the squash commit message a clear summary of the change; per-commit history within a PR branch doesn't need to be clean. - Commit messages and PR titles: imperative mood, e.g. "Add rotating file transport" not "Added" or "Adds".
Bug reports and feature requests are welcome via GitHub issues.