# Contributing to Duty Teller ## Development setup 1. **Clone the repository** ```bash git clone cd duty-teller ``` 2. **Create a virtual environment** ```bash python -m venv .venv source .venv/bin/activate # Linux/macOS # or: .venv\Scripts\activate # Windows ``` 3. **Install dependencies** ```bash pip install -r requirements.txt pip install -r requirements-dev.txt ``` 4. **Configure** ```bash cp .env.example .env ``` Set `BOT_TOKEN` and any other variables as needed (see README). 5. **Documentation (optional)** To build and preview the docs (MkDocs + mkdocstrings): ```bash pip install -e ".[docs]" mkdocs build mkdocs serve # preview at http://127.0.0.1:8000 ``` ## Running tests and linters - **Tests** (from repository root; package is `duty_teller`, no `src/`): ```bash pytest ``` Use `PYTHONPATH=.` if imports fail. - **Lint** (ruff): ```bash ruff check duty_teller tests ``` - **Security** (bandit): ```bash bandit -r duty_teller -ll ``` ## Documentation All project documentation must be in **English**. This includes: - README, files in `docs/`, docstrings, and commit messages that touch documentation. - Exception: user-facing UI strings are localized (Russian/English) in `duty_teller/i18n/` and are not considered project documentation. Docstrings and code comments must be in English (Google-style docstrings). See [AGENTS.md](AGENTS.md) for AI/maintainer context. ## Commit messages Use [Conventional Commits](https://www.conventionalcommits.org/), e.g.: - `feat: add /pin_duty command` - `fix: correct timezone in pinned message` - `docs: update README env section` Submit changes via pull requests (Gitea Flow); reviews consider functionality, code quality, and security. ## Releases When cutting a release, update [CHANGELOG.md](CHANGELOG.md) with the new version and list changes under Added / Changed / Fixed / Security as appropriate (see [Keep a Changelog](https://keepachangelog.com/)).