issue-template
Skill3 starsChanged 5 days agoApache-2.0View on GitHub
Canonical issue body structure for the SOVA tracker, using the exact headings compute_quality_score() scores, plus this repo's label taxonomy. Auto-activates when creating, drafting, or rewriting a GitHub issue for SOVA.
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- templates/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- templates/CLAUDE.mdCLAUDE.md
- dashboard-designSkill
- database-patternsSkill
- design-systemSkill
- design-tasteSkill
- issue-templateSkill
- sova-address-prSkill
- sova-after-mergeSkill
- sova-agent-readinessSkill
- sova-audit-instructionsSkill
- sova-debugSkill
- sova-develop-explainSkill
- sova-develop-fullSkill
- sova-developSkill
- sova-extract-knowledgeSkill
- sova-find-taskSkill
- sova-health-auditSkill
- sova-ingest-reviewSkill
- sova-integrate-prSkill
- sova-issueSkill
- sova-new-featureSkill
- sova-optimize-knowledgeSkill
- sova-prSkill
- sova-rearrange-commitsSkill
- sova-researchSkill
- sova-review-fullSkill
- sova-review-prSkill
- sova-reviewSkill
- sova-simplifySkill
- sova-specSkill
- sova-standupSkill
- sova-statusSkill
- sova-testSkill
- sova-update-docsSkill
- testing-patternsSkill
- visual-auditSkill
- dashboard-designSkill
- database-patternsSkill
- design-tasteSkill
- testing-patternsSkill
- visual-auditSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 9
When creating, drafting, or rewriting an issue for the SOVA tracker, produce the body below.
- Very specific: line 74
Start the body directly at
## Objective: No conversational framing. - Very specific: line 87
Keep every section, even when empty: Write None or To be determined by research rather than deleting a heading.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
SOVA Issue Body Template
When creating, drafting, or rewriting an issue for the SOVA tracker, produce the
body below. The headings are not stylistic: compute_quality_score() in
sova/roles/triage.py scores them deterministically. A body scoring below
triage.min_quality_score is rewritten by the auto_enrich LLM pass, or
downgraded to needs_spec when enrichment is disabled or falls short, so the
issue waits instead of shipping. An issue written with this template scores 8/8
and goes straight to the pipeline. The structure matches
.github/ISSUE_TEMPLATE/task.md, so the tracker template and this skill cannot
drift apart.
Canonical Body
## Objective
<One sentence: what needs to be done and why it matters.>
## Detailed Description
<The current behavior, the desired behavior, and the mechanism that gets from
one to the other. Name the functions, data, and call sites that change. Two to
six sentences beats a paragraph of background.>
## Acceptance Criteria
- [ ] <Binary, testable outcome.>
- [ ] <Second binary outcome.>
- [ ] All existing tests pass (`make check`)
- [ ] No new lint warnings (`make lint`)
## Files / Modules to Change
- [ ] `sova/module/file.py`: <what changes there>
- [ ] `tests/test_module.py`: <coverage added>
## Out of Scope / Constraints
- <What must NOT be touched, and any constraint the implementation must respect.>
## Dependencies
None
## References
- Related: #<issue-number>
- Code: `sova/module/file.py`Scoring Rules
compute_quality_score() awards 8 points:
| Points | Requirement |
| 1 | ## Objective heading |
| 1 | ## Detailed Description heading |
| 2 | ## Acceptance Criteria heading AND a literal - [ ] somewhere in the body |
| 1 | ## Files / Modules to Change (or ## Files to Change, or ## Files) |
| 1 | ## Out of Scope / Constraints (or ## Out of Scope, ## Constraints, ## Scope Boundaries) |
| 1 | ## References heading, or any issue ref, URL, or backticked file path |
| 1 | No LLM preamble or postamble |
Non-negotiable rules, in the order they break issues:
- Every canonical section is exactly
##. The scorer's regex is^##\s+. A section written as###, or bolded as**Objective**, scores zero. - Acceptance criteria need at least one unchecked
- [ ]. A list of already-checked- [x]items failshas_acceptance_criteria, which costs 2 points and caps the body at 6/8.meets_threshold()also requires it independently of the total, so notriage.min_quality_scoreis low enough to let the issue through without it. Start the body directly at
## Objective. No conversational framing. Six line-initial patterns cost theno_llm_leakspoint, matched case-insensitively against every line of the body:Here's a/an/the, and theHere is a/an/thespellingI'veorI havefollowed bycreated,written,drafted,prepared, orupdatedLet me, exceptLet me know, which is explicitly exemptSure,Certainly, orAbsolutelyfollowed by,,!, or.I'llFeel free toorDon't hesitate to
The match is anchored to the start of a line, so all of these stay safe mid-sentence.
- Keep every section, even when empty. Write
NoneorTo be determined by researchrather than deleting a heading.
## Objective, ## Detailed Description, ## Acceptance Criteria, and
## References are required. ## Files / Modules to Change,
## Out of Scope / Constraints, and ## Dependencies are recommended and may
hold a single placeholder line.
Dependencies Section Rules
parse_dependencies() in sova/supervisor/dependency_graph.py reads this
section to build the blocking graph, and it treats every #<number> it finds
as a real dependency.
- One reference per line, no prose. A phrase such as "unlike #123" in this
section creates a phantom blocking edge that stalls the issue until #123
closes. Put narrative references under
## Referencesinstead. - Exactly one
## Dependenciessection. A second one is ignored with a warning, so its entries silently do nothing. - The heading must be exactly
## Dependencieson its own line:extract_section()anchors on that and skips a heading with trailing text. - Write
Nonewhen there are none. Omitting the section is also valid, but keeping it makes the body uniform and prevents a stray#<number>elsewhere from being mistaken for a dependency later. Part of epic #<number>is safe here. Issues labeledtype: epicare skipped by the dependency gate, so an epic reference never deadlocks a child.- Self-references are dropped by
exclude_self, so quoting the issue's own number is harmless.
Worked Example
## Objective
Cache the CodeRabbit quota lookup so the supervisor stops burning a GraphQL
call per poll cycle.
## Detailed Description
`_sync_quota()` in `sova/supervisor/coderabbit_quota.py` calls the GitHub API on
every poll, which at a 60 second interval consumes roughly 60 of the 5000 hourly
GraphQL points before any real work happens. Add a module-level cache keyed by
repo with a 300 second TTL and a single-flight lock so concurrent callers share
one request. An API failure must return `None` rather than caching an error, so
the next cycle retries instead of serving a poisoned entry.
## Acceptance Criteria
- [ ] A second `_sync_quota()` call within the TTL makes no API call
- [ ] Concurrent callers issue exactly one request
- [ ] An API failure is not cached and the next call retries
- [ ] All existing tests pass (`make check`)
## Files / Modules to Change
- [ ] `sova/supervisor/coderabbit_quota.py`: add the cache and single-flight lock
- [ ] `tests/test_coderabbit_quota.py`: TTL, concurrency, and failure cases
## Out of Scope / Constraints
- Do not change the quota thresholds or the gate that consumes them
- Do not add a persistent cache; in-memory per-process is sufficient
## Dependencies
None
## References
- Code: `sova/supervisor/coderabbit_quota.py`
- Related: the supervisor caching layer in `.claude/rules/architecture.md`Titles and Labels
Title: imperative and specific, with no issue number and no type prefix. "Cache the CodeRabbit quota lookup" beats "Fix quota".
SOVA's label taxonomy:
type:one offeature,task,infra,bug,epicpriority:one ofblocker,critical,high,medium,low,undefined(seesova.adapters.priority.Priority);blockermeans blocks all other work, not merely criticalarea:one ofagent,dashboard,commands,personas,invariants,knowledge,docsagent:applied by the pipeline, not by hand, exceptagent:human-only
Apply type: and area: on creation, always with a priority: label: the
real level when known, priority: undefined otherwise (an issue created
through the dashboard or oversight agent gets priority: undefined applied
automatically when none is given; gh issue create does not, so apply it by
hand here to keep both creation paths consistent). Leave agent: labels to
triage. A multi-issue tracking container gets type: epic plus
agent:human-only: epics are excluded from get_ready_tasks(), skipped by
the dependency gate, and closed automatically once every child reaches DONE.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

