.gitea/workflows/ci.yaml runs on PRs into main and on pushes to main. It installs uv, runs `uv sync --locked` with Python 3.12 (the lowest version requires-python allows), then pytest, `ruff check` and `ruff format --check`. ruff is pinned in the dev group (0.17.3). The repo has no ruff config, so the rules are ruff's defaults for that version; pinning makes CI and local runs check the same rules. The setup follows the workflow that already runs green on this Gitea instance (ubuntu-latest, pinned checkout SHA, uv via the official script). The README gets a CI badge and the lint commands. Closes #11 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>