npx skills add ...
npx skills add riekelt/technical-writer --skill writing-issues
Use when writing or refining tracker items - epics, stories, tasks, bug reports, spikes, or acceptance criteria - or when turning a discussion, review finding, or plan into tickets. Encodes the survives-without-you test, the issue-type glossary, and the story and bug skeletons. Use whenever work is written into a tracker, even from a rough verbal dump.
npx skills add riekelt/technical-writer --skill writing-issues
REQUIRED BACKGROUND: the technical-writing skill (hard rules, truth rules, style).
Core principle: write issues so they survive without you. State the outcome, include the acceptance check that decides Done, link the evidence behind every decision, and name the owner of every open part.
Invoke when writing or editing tracker items, filing a bug, splitting work into tickets, or writing acceptance criteria. Do NOT invoke for weighing alternatives: when an issue needs a design argued, that is writing-design-docs; the issue links the design doc and never inlines it. This skill covers the writing only, not prioritization or workflow advice.
Read-first applies to the tracker: read up to two recent issues of the same type and match their conventions before filing. When the tracker holds fewer, read what exists and file anyway.
When the reporter is unavailable, file with named gaps rather than blocking. The technical-writing checkpoint (kind, audience, purpose, non-goals) is what you stop and ask about. Missing content details (a repro step, a log line, a prior-incident link) become explicitly owned open items inside the issue.
Every issue answers four questions a stranger will ask:
One glossary per tracker, defined in one line each and used consistently:
| Type | Definition |
|---|---|
| Epic | A body of work; its description states the outcome and links the design doc |
| Story | Something with user-visible value, written from the user's seat |
| Task | Engineering work with no user-visible surface |
| Bug | A defect: current behavior contradicts intended behavior |
| Spike | A time-boxed investigation whose output is a decision, not code |
A spike's Done is the decision recorded (see recording-decisions), never "looked into it".
A decision followed by a body of work fits two shapes: a spike first with the epic filed after the decision, or an epic whose first acceptance item is the accepted design doc. Both are valid; pick one and say which.
The issue description is the spec for what and why:
Apply the five vagueness defects from writing-design-docs to the acceptance list: an acceptance check that fails "what without how" or "no verifiable output" is not testable.
Gherkin-style given/when/then is an accepted format for acceptance checks when the team uses it; the same testability bar applies either way. INVEST (independent, negotiable, valuable, estimable, small, testable) works as a sizing check for stories: a story failing "small" or "testable" splits before it is filed.
Symptom first: the next reader arrives searching for the error.
The title carries the symptom, not the diagnosis: "duplicate reminders at reminder time", not "race condition in scheduler", unless the cause is verified.
**Symptom:** [verbatim error string or observable misbehavior, searchable]
**Reproduction:** [numbered steps, one action each, from a clean state]
**Expected:** [what should happen, with the source that says so, or an explicit "no written source found" rather than a fabricated reference]
**Actual:** [what happens]
**Environment:** [version, platform, config that matters]
**Open items:** [each with a named owner or role, or an explicit "unassigned"]
**Suspected cause:** [only if investigated; labeled as hypothesis, never stated as fact]