Contributing
August 17, 2026 ยท View on GitHub
Thanks for improving Getsploit. Keep changes small, typed, and easy to verify.
Setup
Install uv and sync the locked environment:
$ uv sync --all-groups
The suite never calls the network, so make check needs no API key. To exercise
online search locally, copy the template and fill in your own key:
$ cp .env.example .env
$ uv run --env-file .env getsploit CVE-2024-3094
.env is ignored by git; .env.example is the committed template and must stay empty
of real values. Never put a working key in a test, fixture, or documentation example.
Before opening a pull request
$ make format
$ make lint
$ make coverage
$ make release
The coverage gate requires 100% statement and branch coverage for project code. New tests should assert observable behavior and use a real temporary SQLite database when a database boundary changes. The normal suite must not call the network.
Project rules
- Use English in source code, comments, documentation, metadata, and CLI messages.
- Prefer the standard library, then existing dependencies. Add a runtime dependency only when it removes more complexity than it introduces.
- Keep async I/O at network boundaries. Move short blocking standard-library calls to a worker thread rather than wrapping them in an async database library.
- Preserve stable JSON fields and documented CLI aliases unless the changelog calls out a breaking release.
- Do not commit local databases, credentials, editor or AI-assistant state, coverage files, generated logs, or temporary development artifacts.
- Never use a production API key in tests or fixtures.
- Keep intentional credential placeholders on the
detect-secretsinline allowlist; never allowlist a real key or an unexplained scanner finding.
Module ownership and database invariants are described in ARCHITECTURE.md. Update that file when a boundary changes.
Commit and pull request scope
One pull request should carry one coherent change. Include:
- the user-visible outcome;
- tests for the changed behavior;
- documentation when CLI or database behavior changes;
- commands used to verify the result.
Security reports do not belong in public issues. Follow SECURITY.md.
A maintainer releases by pushing a v<version> tag; everything after that is automated
in .github/workflows/release.yml, which refuses a tag
that disagrees with pyproject.toml or with a CHANGELOG.md section still marked
Unreleased.