Jev PR Labeler
GitHub PR labels chosen by Jev, with size measured as scope, not lines.
# Jev PR Labeler Semantic GitHub pull request labeling with [Jev](https://openrouter.ai/typesafe/jev-1.13), TypeSafe's typed decision model, through OpenRouter's Decisions API. **Size means conceptual scope, not lines changed.** A small protocol change can have broader scope than a large mechanical rename. ## Labels | Group | Labels | | --- | --- | | Type (one primary) | `type: bug`, `type: feature`, `type: refactor`, `type: docs`, `type: performance`, `type: maintenance` | | Area (multiple) | `area: tui`, `area: providers`, `area: tools`, `area: swarm`, `area: config`, `area: install`, `area: ci`, `area: desktop` | | Platform (only when specific) | `platform: windows`, `platform: macos`, `platform: linux` | | Attention (positive evidence only) | `breaking-change`, `security` | | Manual workflow state | `needs-tests`, `blocked`, `ready-to-merge` | | Size | Conceptual scope | | --- | --- | | `size: XS` | Trivial correction without a design change | | `size: S` | Focused change within one component | | `size: M` | Substantive subsystem feature or coordinated changes to related components | | `size: L` | Cross-subsystem behavior or interface change | | `size: XL` | Architectural redesign or major migration | The initial taxonomy matches Jcode. It lives in `jev_labeler/taxonomy.py` and can be adapted in a fork. The model can select only these labels, never invent names. ## Run locally Requires Python 3.11+, no runtime packages. Run from this repository: ```bash export OPENROUTER_API_KEY='your-key' # Prefer your secret manager, never commit it. # Authenticate gh, or set GH_TOKEN/GITHUB_TOKEN. python3 -m jev_labeler --repo owner/repo --pr 123 # The command above is a dry-run. Explicitly apply with: python3 -m jev_labeler --repo owner/repo --pr 123 --apply --ensure-l