Skip to content

Commit aa4266b

Browse files
committed
feat: add generic authoring skill
1 parent 64610d6 commit aa4266b

5 files changed

Lines changed: 191 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
name: issue-pr-revision-authoring
3+
description: Write implementation-ready GitHub issues, engineering-report PR bodies, and current-head revision comments without importing repo-specific policy.
4+
version: 1.0.0
5+
license: MIT
6+
metadata:
7+
tags: [github, issue-authoring, pull-requests, revision-comments, engineering-reports]
8+
---
9+
# Issue / PR / Revision Authoring
10+
Use this skill when drafting or revising GitHub issues, pull request bodies, or review-response comments. The goal is **execution-design authoring**: enough concrete contract, evidence, and verification detail for an implementer or reviewer to proceed without a separate meeting.
11+
12+
This skill standardizes writing quality only; it does not define branch protection, reviewer bots, merge gates, deployment policy, webhook behavior, or profile authority semantics.
13+
14+
## Choose the smallest useful structure
15+
Use the smallest section set that makes the work executable and reviewable. Add paths, commands, examples, acceptance criteria, and evidence whenever they prevent ambiguity.
16+
17+
## Issue authoring modes
18+
### 1. Execution-design issue
19+
Use when implementation should be possible directly from the issue. Include: summary/motivation, observed problem, proposed solution, CLI/API/UX examples, likely files or surfaces, dependencies/configuration, security/performance/compatibility considerations, non-goals, acceptance criteria, and verification plan.
20+
21+
### 2. Current-state tracker issue
22+
Use when work is partially implemented and the issue tracks remaining gaps. Include: current status summary, feature/surface table, completed vs remaining work, architecture or surface map, acceptance criteria with status, and available evidence.
23+
24+
### 3. Evidence-driven investigation issue
25+
Use for performance, correctness, production behavior, or uncertain root cause work where implementation should not start from guesses. Include: environment, measurements/reproduction evidence, observations separated from hypotheses, suggested investigations, reproduction commands, and related issues/PRs/docs.
26+
27+
## PR body authoring
28+
A PR body is an **engineering report, not a changelog**. Explain final behavior, linked issue/close intent, problem and defect split, changes by file/surface, design decisions and rejected alternatives, tests, exact verification commands, acceptance status, and remaining risks or follow-up. Use `templates/pr-body.md`; use `Refs #N` instead of `Closes #N` for partial work.
29+
30+
## Revision comment authoring
31+
A revision comment should be current-head, feedback-addressing, and evidence-bearing. Do not merely say “fixed.” Include current head SHA, intent, findings addressed, changed files/surfaces, tests/verification, docs/release-note impact, remaining items, and ready-for-review statement. If a repository requires a review trigger phrase, follow that repository's workflow; do not bake a specific bot name or trigger phrase into this generic template.
32+
33+
## Genericity boundaries
34+
Keep these layers out unless a downstream repo adds them in its own workflow docs:
35+
- reviewer bot names or trigger phrases;
36+
- branch protection, rulesets, merge gates, or deployment rules;
37+
- GitHub App internals, webhook behavior, or CI rerun mechanics;
38+
- organization-specific authority or chat-lane policy;
39+
- product-specific reusable code identifiers.
40+
41+
## Bundled templates
42+
- `templates/issue.md` — execution-design, current-state tracker, and evidence-driven investigation issue sections.
43+
- `templates/pr-body.md` — engineering-report PR body sections.
44+
- `templates/revision-comment.md` — current-head review-response/finalization comment.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Issue Authoring Template
2+
Use the smallest section set that makes the work executable. Prefer concrete contracts over vague tickets.
3+
4+
## Summary
5+
<What should change and where.>
6+
## Problem
7+
<What is wrong, missing, slow, ambiguous, or risky. Separate observed facts from guesses.>
8+
## Context / Current state
9+
<Why this matters now. Include status, links, or code paths.>
10+
| Feature / surface | Status | Location / evidence |
11+
|---|---|---|
12+
| <feature> | ✅ Complete / 🚧 Partial / ❌ Missing | `<path>` / <link> |
13+
## Proposed solution
14+
<The intended direction, detailed enough that implementation can start.>
15+
## Contract / Examples
16+
```bash
17+
<command or usage example>
18+
```
19+
```text
20+
<expected output shape or behavior comparison>
21+
```
22+
## Implementation details
23+
### Files / surfaces to modify
24+
```text
25+
<path> # <expected change>
26+
<path> # <expected change>
27+
```
28+
### Dependencies / configuration
29+
```toml
30+
<dependency> = "<version>"
31+
```
32+
### Design decisions / options
33+
1. **<Option A>** — <trade-off>
34+
2. **<Option B>** — <trade-off>
35+
Selected/default direction: <option or pending decision>.
36+
## Security / Performance / Compatibility considerations
37+
- <consideration>
38+
- <consideration>
39+
## Non-goals
40+
- <what this issue should not do>
41+
## Acceptance criteria
42+
- [ ] <observable completion criterion>
43+
- [ ] <test or behavior criterion>
44+
- [ ] <boundary/non-goal criterion>
45+
## Verification plan
46+
- [ ] `<exact command or check>` — <expected result>
47+
- [ ] <manual verification if needed>
48+
## Evidence-driven investigation addendum
49+
Use when implementation should wait for performance/correctness/production evidence.
50+
- Environment: <OS/runtime/version/config>
51+
- Measurements / reproduction: `<command>` plus observed output, timing, trace, or error.
52+
- Observations: <facts from evidence>
53+
- Hypotheses: <possible causes, explicitly marked>
54+
- Suggested investigations: <next checks>
55+
## Related
56+
- <issue/PR/doc link>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# PR Body Template
2+
A PR body is an engineering report, not a changelog. It should explain the problem, selected design, changes, verification, and remaining risk.
3+
4+
```markdown
5+
## Summary
6+
- <1-3 bullets describing final behavior/result>
7+
- <mention user-visible contract, compatibility, or regression coverage>
8+
## Linked issue
9+
Closes #<N>
10+
<!-- Use Refs #<N> when the PR is partial and should not close the issue. -->
11+
## Problem
12+
<Explain what was wrong or missing, where it appeared, and why it mattered.>
13+
### Defect 1 — <name>
14+
<fact-based explanation>
15+
### Defect 2 — <name>
16+
<fact-based explanation>
17+
## Changes
18+
### <Surface or file group> — `<path>`
19+
- <specific behavior change>
20+
- <specific guard/contract/test/doc update>
21+
### <Surface or file group> — `<path>`
22+
- <specific behavior change>
23+
## Design decisions
24+
<Explain selected option, rejected alternatives, and why.>
25+
| Scenario / path | Before | After |
26+
|---|---|---|
27+
| <case> | <old behavior> | <new behavior> |
28+
## Tests
29+
- <new test file / test name> — <what it verifies>
30+
- <existing test suite impact>
31+
## Verification
32+
- [x] `<exact command>` — pass, <count/detail if useful>
33+
- [ ] `<manual check>` — pending/skipped, reason: <reason>
34+
## Acceptance criteria
35+
- [x] <criterion from issue>
36+
- [ ] <remaining/manual criterion if any>
37+
## Risks / Follow-up
38+
- <remaining risk, limitation, or `None identified`.>
39+
- <follow-up issue or `None`.>
40+
```
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Revision Comment Template
2+
Use after review feedback or follow-up commits. Describe the current head, feedback addressed, and readiness evidence.
3+
4+
```markdown
5+
## Revision explanation for current head `<HEAD_SHA>`
6+
### Intent
7+
<One sentence restating what this revision is closing.>
8+
### Findings addressed
9+
- [x] **<Finding title / severity if known>** — <what changed and why it closes the feedback>
10+
- [x] **<Finding title>** — <resolution>
11+
### What changed
12+
- `<path>` — <specific revision change>
13+
- `<path>` — <specific revision change>
14+
### Tests / verification
15+
- [x] `<exact command>` — pass, <count/detail if useful>
16+
- [ ] `<manual check>` — pending/skipped, reason: <reason>
17+
### Documentation / release notes
18+
- `<path>` — <doc/changelog update>
19+
- `n/a` — <reason if no docs needed>
20+
### Remaining items
21+
None.
22+
### Ready for review
23+
This revision is ready for review on current head `<HEAD_SHA>`.
24+
```

test/resource-discovery.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,33 @@ test("Kapi bundles Deep Interview skill guidance for in-process interviewing", a
7474
assert.doesNotMatch(skill, /Unknown agent|subagent interviewer/i);
7575
});
7676

77+
test("bundles generic issue, PR, and revision authoring guidance", async () => {
78+
const skillRoot = path.join(process.cwd(), "skills", "issue-pr-revision-authoring");
79+
const skill = await readFile(path.join(skillRoot, "SKILL.md"), "utf8");
80+
const issue = await readFile(path.join(skillRoot, "templates", "issue.md"), "utf8");
81+
const prBody = await readFile(path.join(skillRoot, "templates", "pr-body.md"), "utf8");
82+
const revision = await readFile(path.join(skillRoot, "templates", "revision-comment.md"), "utf8");
83+
84+
assert.match(skill, /execution-design authoring/i);
85+
assert.match(skill, /Execution-design issue/);
86+
assert.match(skill, /Current-state tracker issue/);
87+
assert.match(skill, /Evidence-driven investigation issue/);
88+
assert.match(skill, /engineering report, not a changelog/i);
89+
assert.match(skill, /current head SHA/i);
90+
assert.match(skill, /does not define branch protection, reviewer bots, merge gates/i);
91+
assert.doesNotMatch(skill, /kapi-agent|Discord lane|Ragna\/ authority|author: Ilchul/i);
92+
93+
assert.match(issue, /## Acceptance criteria/);
94+
assert.match(issue, /## Verification plan/);
95+
assert.match(issue, /## Evidence-driven investigation addendum/);
96+
assert.match(prBody, /## Design decisions/);
97+
assert.match(prBody, /## Verification/);
98+
assert.match(prBody, /## Risks \/ Follow-up/);
99+
assert.match(revision, /Revision explanation for current head `<HEAD_SHA>`/);
100+
assert.match(revision, /### Findings addressed/);
101+
assert.match(revision, /### Ready for review/);
102+
});
103+
77104
test("Kapi Ralph skills encode planning and build invariants", async () => {
78105
const ralplan = await readFile(path.join(process.cwd(), "skills", "kapi-ralph", "SKILL.md"), "utf8");
79106
const ralph = await readFile(path.join(process.cwd(), "skills", "kapi-ralph", "SKILL.md"), "utf8");

0 commit comments

Comments
 (0)