Questions
Dispatch asks a fixed catalogue, plus one Choice per label dimension, plus anything you define. All of them go in one request per event.
Issues
| id | Type | Asks |
|---|---|---|
type | choice | bug, feature, question, docs, support, spam |
is_spam | noul | Promotional, automated, or off-topic? |
has_repro | noul | Steps, code, or input a maintainer could run? |
has_version | noul | Which version is affected? |
has_environment | noul | Which runtime, browser, or OS? |
severity | score | Cosmetic → data loss, security, or total breakage |
belongs_in_discussions | noul | Better as a discussion than an issue? |
good_first_issue | noul | Could a newcomer plausibly fix it? |
hostility | score | Neutral → abusive |
Pull requests
| id | Type | Asks |
|---|---|---|
change_type | choice | feat, fix, docs, refactor, perf, test, build, ci, chore |
semver_bump | choice | none, patch, minor, major |
breaking_change | noul | Breaks existing API, options, or output? |
risk | score | Isolated → touches security, auth, data, or release machinery |
needs_tests | noul | Changes behaviour with no test? |
description_quality | score | Empty → clear with context and trade-offs |
matches_linked_issue | noul | Does it do what the issue asked? |
low_effort | noul | Drive-by, churn, or generated slop? |
touches_security_surface | noul | Auth, secrets, input parsing, dependency sources? |
Generated from your labels
Each dimension under labels: becomes label_<dimension>, a Choice whose options are your label names and whose rubric is your descriptions, plus __none__.
Your own
yaml
questions:
affects_ssr:
type: noul
instructions: 'Does this involve server-side or headless rendering?'Available in rules as answers.affects_ssr.
Writing a good question
Atomic. One question asks one thing a knowledgeable person could answer in seconds. "Should this be closed?" is wrong. "Is there a reproduction?" is right.
Decompose, then combine in code. Ask about risk and test coverage separately, then weigh them in a rule. Changing priorities becomes a coefficient, not a rewrite.
The criteria are the rubric. They are what the model actually reads. Write them for someone who has never seen your repository.
Give every Choice an escape hatch. __none__ is added automatically for generated label questions; add it yourself for custom ones, so the model is never forced into a wrong bucket.
Facts in state, judgements in questions. The body and the label catalogue go in state; "which label applies" is the question.
Turning them off
yaml
disableQuestions: [good_first_issue]A rule still referencing a disabled question is a validation error, not a silent no-op.
Cost of asking more
Very little. Questions are evaluated in parallel and in isolation: thirty cost 25 ms more at the median than one. Tokens grow at roughly 23 per question, so cost scales gently and latency does not.
Past 40 questions dispatch validate warns — not because the model struggles, but because a set that large usually means a taxonomy that wants splitting.