Development Guide¶
This page describes the day-to-day development flow for localqueue: how to
write commits, how versions are released, what quality gates should pass before
merging, and what happens to docs and deployments.
Commit style¶
Use Conventional Commits.
Preferred shapes:
feat: add queue health summary
fix: keep forever workers alive on empty queues
docs: describe release flow
chore: refresh release-please config
test: cover version output in the CLI
Keep commit messages short and specific. Use a scope only when it helps the
history, for example fix(cli): ... or docs(release): ....
Why this matters here:
release-pleaseuses commit history to decide the next version.- clean commit messages produce cleaner changelogs.
- release PRs become easier to review when each change has a clear intent.
Versioning¶
Versions follow SemVer-style MAJOR.MINOR.PATCH.
Before 1.0.0, use this rule:
| Change | Version bump |
|---|---|
| Bug fix only | patch |
| New CLI/API feature | minor |
| Breaking user-facing behavior | minor, with a clear changelog note |
In this repo:
release-pleaseopens or updates the release PR.- merging that release PR creates the tag and the GitHub Release.
- the release tag stays in the form
v<version>. pyproject.tomlis updated by the release automation, not by hand.
Quality gates before merge¶
Run the project checks before opening or merging a release-worthy change.
env UV_CACHE_DIR=/tmp/uv-cache uv run ruff format .
env UV_CACHE_DIR=/tmp/uv-cache uv run ruff format --check .
env UV_CACHE_DIR=/tmp/uv-cache uv run pytest -q
env UV_CACHE_DIR=/tmp/uv-cache uv run ruff check .
env UV_CACHE_DIR=/tmp/uv-cache uv run basedpyright
env UV_CACHE_DIR=/tmp/uv-cache uv run zensical build --clean
env UV_CACHE_DIR=/tmp/uv-cache uv lock --check
env UV_CACHE_DIR=/tmp/uv-cache uv build
Practical notes:
pytestis the main behavior gate.ruff formatapplies the formatting fix locally.ruff format --checkverifies formatting stays stable before a merge.ruff checkandbasedpyrightkeep the codebase clean and typed where it matters.zensical build --cleancatches docs breakage before it lands.uv lock --checkconfirms the lockfile is current.uv buildverifies the package artifacts still build cleanly.
Documentation workflow¶
Docs should stay close to the code and the release flow.
- Update
docs/when the CLI, public API, or release process changes. - Keep
docs/release.mdfocused on release automation and tagging. - Keep
docs/operational-maturity.mdfocused on runtime guarantees and production boundaries. - Update
docs/index.mdand the docs navigation when a new top-level doc is added.
Good documentation changes usually include:
- a short user-facing description
- exact commands
- concrete examples
- the current expected release or deployment behavior
Deployments¶
The docs site is built from docs/ with zensical.
The release workflow currently handles:
- PyPI publication
- GHCR image publication
The docs workflow currently handles:
- building the docs site on pushes and pull requests
- deploying the site from GitHub Actions on push to the configured branches
If a change affects packaging, release tags, or public docs, validate both the package build and the docs build before merging.
Local release checklist¶
When preparing a release or release PR, verify:
- commits follow Conventional Commits
- tests pass
- lint and typecheck pass
- docs build
- package build succeeds
- the release notes and changelog reflect the change
Secrets and CI¶
The current release automation expects:
RELEASE_PLEASE_TOKENforrelease-pleaseSONAR_TOKENfor SonarCloud, if the Sonar workflow is enabled
Keep secrets in repository settings, not in the repo.
Daily rule¶
If a change would confuse the next release PR, fix the commit message, docs, or tests before merging it.