Thank you for your interest in improving paperscout. This document describes how we work, how to run checks locally, and how releases are cut.
- docs/onboarding.md — clone, database,
.env, tests, and running the app locally. - docs/handoff.md — maintainer-oriented design notes and operational gotchas.
- README.md — product behavior, Slack setup, deployment, and environment variable tables.
- Fork the repository (if you lack direct push access) and clone your fork.
- Create a feature branch from the active integration branch (currently
develop; confirm repo default/protection rules before opening). - Make focused commits with clear messages.
- Open a pull request against the designated target branch (
developormain, per current release flow). Use the PR template; link related issues when applicable. - Ensure CI is green (tests + coverage + lint hooks — see below).
.github/CODEOWNERS routes review requests. If GitHub reports unknown owners, maintainers should update that file with real @username or @org/team entries and ensure the team exists and has repository access.
Install the package in editable mode with dev dependencies:
python -m venv .venv
source .venv/bin/activate # Windows Git Bash: source .venv/Scripts/activate
pip install -e ".[dev]"./run check # pytest + coverage, fails under 90% line coverage (matches CI)
# or: make checkCI runs pre-commit run --all-files for pushes/PRs on configured branches (currently main and develop; see .github/workflows/ci.yml).
We use pre-commit with Ruff for linting and formatting.
pre-commit install
pre-commit run --all-filesCI runs pre-commit run --all-files on every push and pull request (see the lint job in .github/workflows/ci.yml).
- Tests — Add or update tests for behavior changes. Keep coverage at or above the project floor (90%).
- Docs — Update README, onboarding, or handoff when you change operator-visible behavior, env vars, or deployment steps.
- Style — Let Ruff format the tree; avoid unrelated drive-by reformatting of untouched files in the same PR when possible.
We follow Semantic Versioning and Keep a Changelog principles.
- Version — Bump
versioninpyproject.toml(e.g.0.1.0→0.2.0). - Changelog — Move items from
## [Unreleased]to a new section## [x.y.z] - YYYY-MM-DDinCHANGELOG.md. - Tag — Create an annotated tag:
git tag -a v0.2.0 -m "Release v0.2.0"and push it:git push origin v0.2.0. - GitHub Release — On GitHub, create a Release from that tag and paste the changelog section for that version into the release notes.
Optional follow-ups (not required today): PyPI publishing workflow, signed tags, or automated release notes.
Use GitHub Issues for bugs and feature ideas (see issue templates). For organizational or access questions, contact the CppAlliance maintainers responsible for this repository (replace with a concrete contact when publishing internally).