skilldrop-cli 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +413 -0
  3. package/bin/skilldrop.js +338 -0
  4. package/model-routing.json +147 -0
  5. package/package.json +36 -0
  6. package/packs.json +90 -0
  7. package/skills/accessibility-audit/SKILL.md +74 -0
  8. package/skills/accessibility-audit/examples/login-form.md +76 -0
  9. package/skills/accessibility-audit/manifest.json +11 -0
  10. package/skills/accessibility-audit/reference.md +69 -0
  11. package/skills/adr-generator/SKILL.md +49 -0
  12. package/skills/adr-generator/manifest.json +11 -0
  13. package/skills/adr-generator/templates/madr.md +56 -0
  14. package/skills/adr-generator/templates/nygard.md +19 -0
  15. package/skills/ai-usage-report/SKILL.md +111 -0
  16. package/skills/ai-usage-report/examples/weekly-engineering-team.md +133 -0
  17. package/skills/ai-usage-report/manifest.json +11 -0
  18. package/skills/ai-usage-report/scripts/build_report.py +436 -0
  19. package/skills/ai-usage-report/templates/report-per-user.md +42 -0
  20. package/skills/ai-usage-report/templates/report-team-rollup.md +49 -0
  21. package/skills/ai-usage-report/templates/usage-event-schema.md +76 -0
  22. package/skills/api-contract-draft/SKILL.md +69 -0
  23. package/skills/api-contract-draft/manifest.json +11 -0
  24. package/skills/api-contract-draft/reference.md +73 -0
  25. package/skills/api-contract-draft/templates/openapi-skeleton.yaml +148 -0
  26. package/skills/architecture-diagrams/SKILL.md +66 -0
  27. package/skills/architecture-diagrams/examples/aws-three-tier.md +44 -0
  28. package/skills/architecture-diagrams/examples/c4-container-saas.md +51 -0
  29. package/skills/architecture-diagrams/examples/microservices-sequence.md +49 -0
  30. package/skills/architecture-diagrams/manifest.json +28 -0
  31. package/skills/architecture-diagrams/templates/c4-container.puml +31 -0
  32. package/skills/architecture-diagrams/templates/mermaid-aws.md +52 -0
  33. package/skills/architecture-diagrams/templates/mermaid-flowchart.md +37 -0
  34. package/skills/architecture-diagrams/templates/mermaid-sequence.md +39 -0
  35. package/skills/audience-profile/SKILL.md +73 -0
  36. package/skills/audience-profile/manifest.json +11 -0
  37. package/skills/audience-profile/reference.md +175 -0
  38. package/skills/brief-intake/SKILL.md +78 -0
  39. package/skills/brief-intake/manifest.json +11 -0
  40. package/skills/brief-intake/templates/brief-adr.md +41 -0
  41. package/skills/brief-intake/templates/brief-decision-log.md +35 -0
  42. package/skills/brief-intake/templates/brief-deck.md +43 -0
  43. package/skills/brief-intake/templates/brief-design-doc.md +48 -0
  44. package/skills/brief-intake/templates/brief-exec-summary.md +47 -0
  45. package/skills/brief-intake/templates/brief-generic.md +45 -0
  46. package/skills/brief-intake/templates/brief-runbook.md +44 -0
  47. package/skills/brief-intake/templates/brief-tech-comparison.md +38 -0
  48. package/skills/bug-triage/SKILL.md +67 -0
  49. package/skills/bug-triage/manifest.json +11 -0
  50. package/skills/bug-triage/templates/bug-ticket.md +86 -0
  51. package/skills/business-case/SKILL.md +64 -0
  52. package/skills/business-case/manifest.json +11 -0
  53. package/skills/business-case/templates/business-case.md +60 -0
  54. package/skills/capacity-cost-model/SKILL.md +64 -0
  55. package/skills/capacity-cost-model/manifest.json +11 -0
  56. package/skills/capacity-cost-model/reference.md +54 -0
  57. package/skills/capacity-cost-model/templates/cost-model.md +68 -0
  58. package/skills/council-review/SKILL.md +106 -0
  59. package/skills/council-review/examples/redis-cache-decision.md +75 -0
  60. package/skills/council-review/manifest.json +11 -0
  61. package/skills/council-review/reference.md +76 -0
  62. package/skills/council-review/seats/architect.md +29 -0
  63. package/skills/council-review/seats/bench.md +39 -0
  64. package/skills/council-review/seats/operator.md +27 -0
  65. package/skills/council-review/seats/pragmatist.md +29 -0
  66. package/skills/council-review/seats/security-engineer.md +29 -0
  67. package/skills/council-review/seats/user-advocate.md +27 -0
  68. package/skills/council-review/templates/council-review.md +59 -0
  69. package/skills/data-contract/SKILL.md +67 -0
  70. package/skills/data-contract/manifest.json +11 -0
  71. package/skills/data-contract/reference.md +46 -0
  72. package/skills/data-contract/templates/data-contract.md +69 -0
  73. package/skills/db-schema-design/SKILL.md +68 -0
  74. package/skills/db-schema-design/manifest.json +11 -0
  75. package/skills/db-schema-design/reference.md +56 -0
  76. package/skills/db-schema-design/templates/schema-design.md +75 -0
  77. package/skills/decision-log/SKILL.md +67 -0
  78. package/skills/decision-log/manifest.json +11 -0
  79. package/skills/deck-builder/SKILL.md +114 -0
  80. package/skills/deck-builder/examples/exec-board-update.md +108 -0
  81. package/skills/deck-builder/manifest.json +17 -0
  82. package/skills/deck-builder/reference.md +92 -0
  83. package/skills/deck-builder/requirements.txt +1 -0
  84. package/skills/deck-builder/scripts/build_deck.py +309 -0
  85. package/skills/deck-builder/templates/deck-spec.json +97 -0
  86. package/skills/deck-builder/templates/palettes.json +59 -0
  87. package/skills/design-doc/SKILL.md +49 -0
  88. package/skills/design-doc/manifest.json +11 -0
  89. package/skills/design-doc/templates/design-doc.md +98 -0
  90. package/skills/devils-advocate/SKILL.md +142 -0
  91. package/skills/devils-advocate/lenses/adversarial-review.md +88 -0
  92. package/skills/devils-advocate/lenses/edge-cases.md +95 -0
  93. package/skills/devils-advocate/lenses/future-proofing.md +75 -0
  94. package/skills/devils-advocate/lenses/test-coverage.md +90 -0
  95. package/skills/devils-advocate/manifest.json +11 -0
  96. package/skills/devils-advocate/templates/challenge.md +118 -0
  97. package/skills/doc-critique/SKILL.md +119 -0
  98. package/skills/doc-critique/manifest.json +11 -0
  99. package/skills/doc-critique/rubrics/adr.md +36 -0
  100. package/skills/doc-critique/rubrics/decision-log.md +39 -0
  101. package/skills/doc-critique/rubrics/deck.md +45 -0
  102. package/skills/doc-critique/rubrics/design-doc.md +42 -0
  103. package/skills/doc-critique/rubrics/exec-summary.md +41 -0
  104. package/skills/doc-critique/rubrics/generic.md +40 -0
  105. package/skills/doc-critique/rubrics/runbook.md +42 -0
  106. package/skills/doc-critique/rubrics/tech-comparison.md +40 -0
  107. package/skills/doc-critique/templates/critique.md +49 -0
  108. package/skills/exec-summary/SKILL.md +45 -0
  109. package/skills/exec-summary/manifest.json +11 -0
  110. package/skills/exec-summary/templates/exec-summary.md +48 -0
  111. package/skills/feature-implement-loop/SKILL.md +83 -0
  112. package/skills/feature-implement-loop/manifest.json +11 -0
  113. package/skills/figma-diagrams/SKILL.md +85 -0
  114. package/skills/figma-diagrams/manifest.json +35 -0
  115. package/skills/figma-diagrams/reference.md +91 -0
  116. package/skills/figma-diagrams/requirements.txt +1 -0
  117. package/skills/figma-diagrams/scripts/_figma_client.py +71 -0
  118. package/skills/figma-diagrams/scripts/frame_to_mermaid.py +102 -0
  119. package/skills/figma-diagrams/scripts/inspect_file.py +46 -0
  120. package/skills/figma-diagrams/scripts/list_comments.py +35 -0
  121. package/skills/figma-diagrams/scripts/post_comment.py +52 -0
  122. package/skills/figma-diagrams/templates/figjam-import.json +20 -0
  123. package/skills/guide-builder/SKILL.md +76 -0
  124. package/skills/guide-builder/examples/local-setup-guide.md +127 -0
  125. package/skills/guide-builder/manifest.json +11 -0
  126. package/skills/guide-builder/templates/api-reference.md +120 -0
  127. package/skills/guide-builder/templates/design-walkthrough.md +72 -0
  128. package/skills/guide-builder/templates/setup-guide.md +109 -0
  129. package/skills/incident-comms/SKILL.md +68 -0
  130. package/skills/incident-comms/manifest.json +11 -0
  131. package/skills/incident-comms/reference.md +43 -0
  132. package/skills/incident-comms/templates/messages.md +82 -0
  133. package/skills/llm-eval-harness/SKILL.md +73 -0
  134. package/skills/llm-eval-harness/manifest.json +11 -0
  135. package/skills/llm-eval-harness/reference.md +58 -0
  136. package/skills/llm-eval-harness/templates/eval-plan.md +63 -0
  137. package/skills/llm-eval-harness/templates/golden-case.jsonl +5 -0
  138. package/skills/migration-plan/SKILL.md +68 -0
  139. package/skills/migration-plan/manifest.json +11 -0
  140. package/skills/migration-plan/templates/migration-plan.md +68 -0
  141. package/skills/nfr-spec/SKILL.md +63 -0
  142. package/skills/nfr-spec/manifest.json +11 -0
  143. package/skills/nfr-spec/reference.md +74 -0
  144. package/skills/nfr-spec/templates/nfr-spec.md +56 -0
  145. package/skills/observability-plan/SKILL.md +70 -0
  146. package/skills/observability-plan/manifest.json +11 -0
  147. package/skills/observability-plan/reference.md +67 -0
  148. package/skills/observability-plan/templates/observability-plan.md +62 -0
  149. package/skills/okr-cascade/SKILL.md +59 -0
  150. package/skills/okr-cascade/evals/eval_queries.json +12 -0
  151. package/skills/okr-cascade/evals/evals.json +28 -0
  152. package/skills/okr-cascade/manifest.json +11 -0
  153. package/skills/okr-cascade/templates/okr-cascade.md +46 -0
  154. package/skills/postmortem-generator/SKILL.md +65 -0
  155. package/skills/postmortem-generator/manifest.json +11 -0
  156. package/skills/postmortem-generator/templates/postmortem.md +67 -0
  157. package/skills/prd-draft/SKILL.md +62 -0
  158. package/skills/prd-draft/manifest.json +11 -0
  159. package/skills/prd-draft/templates/prd.md +66 -0
  160. package/skills/prfaq/SKILL.md +75 -0
  161. package/skills/prfaq/evals/eval_queries.json +13 -0
  162. package/skills/prfaq/evals/evals.json +32 -0
  163. package/skills/prfaq/manifest.json +11 -0
  164. package/skills/prfaq/templates/prfaq.md +60 -0
  165. package/skills/release-notes/SKILL.md +61 -0
  166. package/skills/release-notes/manifest.json +11 -0
  167. package/skills/release-notes/templates/release-notes.md +83 -0
  168. package/skills/requirements-interview/SKILL.md +61 -0
  169. package/skills/requirements-interview/manifest.json +11 -0
  170. package/skills/requirements-interview/templates/interview-kit.md +63 -0
  171. package/skills/reverse-architecture/SKILL.md +103 -0
  172. package/skills/reverse-architecture/manifest.json +11 -0
  173. package/skills/reverse-architecture/reference.md +150 -0
  174. package/skills/reverse-architecture/templates/description.md +52 -0
  175. package/skills/reverse-architecture/templates/extraction.md +55 -0
  176. package/skills/runbook-generator/SKILL.md +42 -0
  177. package/skills/runbook-generator/manifest.json +11 -0
  178. package/skills/runbook-generator/templates/runbook.md +109 -0
  179. package/skills/slide-outliner/SKILL.md +58 -0
  180. package/skills/slide-outliner/manifest.json +11 -0
  181. package/skills/slide-outliner/templates/deck-outline.md +131 -0
  182. package/skills/sonar-onboard/SKILL.md +170 -0
  183. package/skills/sonar-onboard/manifest.json +11 -0
  184. package/skills/sonar-onboard/reference.md +151 -0
  185. package/skills/sonar-onboard/templates/github-actions-sonar-server.yml.tmpl +50 -0
  186. package/skills/sonar-onboard/templates/github-actions-sonarcloud.yml.tmpl +53 -0
  187. package/skills/sonar-onboard/templates/readme-snippet.md +38 -0
  188. package/skills/sonar-onboard/templates/sonar-project.properties.tmpl +31 -0
  189. package/skills/sonar-review/SKILL.md +220 -0
  190. package/skills/sonar-review/lenses/bugs.md +48 -0
  191. package/skills/sonar-review/lenses/code-smells.md +64 -0
  192. package/skills/sonar-review/lenses/coverage-and-duplication.md +74 -0
  193. package/skills/sonar-review/lenses/security-hotspots.md +56 -0
  194. package/skills/sonar-review/lenses/vulnerabilities.md +52 -0
  195. package/skills/sonar-review/manifest.json +37 -0
  196. package/skills/sonar-review/reference.md +167 -0
  197. package/skills/sonar-review/templates/report.md +84 -0
  198. package/skills/strategy-analysis/SKILL.md +63 -0
  199. package/skills/strategy-analysis/evals/eval_queries.json +13 -0
  200. package/skills/strategy-analysis/evals/evals.json +36 -0
  201. package/skills/strategy-analysis/manifest.json +11 -0
  202. package/skills/success-metrics/SKILL.md +63 -0
  203. package/skills/success-metrics/evals/eval_queries.json +11 -0
  204. package/skills/success-metrics/evals/evals.json +27 -0
  205. package/skills/success-metrics/manifest.json +11 -0
  206. package/skills/success-metrics/templates/metrics-plan.md +55 -0
  207. package/skills/tech-comparison-matrix/SKILL.md +56 -0
  208. package/skills/tech-comparison-matrix/manifest.json +11 -0
  209. package/skills/tech-comparison-matrix/templates/matrix.md +45 -0
  210. package/skills/test-plan-generator/SKILL.md +59 -0
  211. package/skills/test-plan-generator/manifest.json +11 -0
  212. package/skills/test-plan-generator/templates/test-plan.md +83 -0
  213. package/skills/threat-model/SKILL.md +65 -0
  214. package/skills/threat-model/examples/document-upload.md +56 -0
  215. package/skills/threat-model/manifest.json +11 -0
  216. package/skills/threat-model/reference.md +69 -0
  217. package/skills/user-journey-map/SKILL.md +64 -0
  218. package/skills/user-journey-map/evals/eval_queries.json +12 -0
  219. package/skills/user-journey-map/evals/evals.json +30 -0
  220. package/skills/user-journey-map/examples/b2b-saas-onboarding.md +69 -0
  221. package/skills/user-journey-map/manifest.json +11 -0
  222. package/skills/user-journey-map/templates/journey-map.md +47 -0
  223. package/skills/user-story-splitter/SKILL.md +88 -0
  224. package/skills/user-story-splitter/examples/notifications-epic.md +123 -0
  225. package/skills/user-story-splitter/manifest.json +11 -0
  226. package/skills/user-story-splitter/templates/story.md +40 -0
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: postmortem-generator
3
+ description: Generate a blameless incident postmortem from raw material (Slack thread, pager timeline, notes) — quantified impact, UTC timeline with detection/mitigation gaps, contributing factors instead of a single root cause, and ≤8 verifiable action items. Use after an incident or outage when the user needs a postmortem, RCA, incident review, or "lessons learned" doc.
4
+ ---
5
+
6
+ # postmortem-generator
7
+
8
+ Turns the debris of an incident — Slack scrollback, pager entries, half-remembered timestamps — into a postmortem the next on-caller learns from. Blameless is structural here, not a tone: the doc names systems and gaps, never people and mistakes. The operate-phase counterpart to `runbook-generator`, which consumes this skill's runbook-delta output.
9
+
10
+ ## How to respond
11
+
12
+ 1. **Ingest the raw material.** Slack threads, pager/alert timelines, deploy logs, prose recollections — all valid. Ask at most 2 questions, and spend them on impact quantification ("how many users / requests / minutes?") — it's the data people forget fastest and the section read first. Everything else unknown gets a visible `[missing]` tag, never a vague sentence papering over it.
13
+
14
+ 2. **Strip blame structurally while drafting.** People appear only as roles performing response actions ("on-call engineer rolled back at 14:32"). Errors are attributed to the system that allowed them. ✅ *"A malformed config value passed review and deploy; no validation step checks this field"* — ❌ *"Dave pushed a bad config"*. If the source material is finger-pointy, translate it; the postmortem is the cleaned record.
15
+
16
+ 3. **Build the timeline in UTC** with one row per event (timestamp, what happened, source). Then compute and state the two gaps that matter:
17
+ - **Detection gap** — impact start → first human aware. If users noticed before monitoring did, say so in those words.
18
+ - **Mitigation gap** — detection → impact ended.
19
+ The timeline ends at "impact over", not "everyone went to bed"; cleanup goes under follow-ups.
20
+
21
+ 4. **Write contributing factors, not a root cause.** Minimum 2, typically 3–5, using "why was that possible?" chains. **"Human error" is banned as a factor** — it is always the start of a question, never the answer: what made the error easy to make, hard to catch, and fast to propagate? Each factor states the condition, not the act.
22
+
23
+ 5. **Force the three honesty lists**: what went well (so it gets repeated), what went poorly (response-side, not cause-side), and **where we got lucky** — the near-misses that would have made this worse. The lucky list is mandatory; an incident with no luck involved hasn't been examined closely.
24
+
25
+ 6. **Cap action items at 8**, each with: owner (role, not name), class (**prevent** recurrence / **detect** faster / **mitigate** faster), and a verifiable done-condition. ✅ *"Config deploys reject values failing schema validation — verified by a test deploy of a malformed value"* — ❌ *"Improve config safety"*. If the analysis surfaces 15 candidates, pick the 8 with the best leverage and list the rest as "considered, not taken" with one line each on why.
26
+
27
+ 7. **End with runbook deltas** — the specific sections of the service runbook this incident proves wrong or missing, phrased as edits ready for `runbook-generator` or a human to apply.
28
+
29
+ 8. **Emit with [`templates/postmortem.md`](templates/postmortem.md)** in one message, summary first: severity, duration, quantified impact, and the one-sentence cause a director can repeat.
30
+
31
+ ## Useful references in this skill
32
+
33
+ - [`templates/postmortem.md`](templates/postmortem.md) — the full doc skeleton with the gap calculations and action-item table
34
+
35
+ ## Quality bar
36
+
37
+ - **Impact is numbers or `[missing]`.** Duration, users/requests affected, SLO burn, revenue if known. "Significant impact" is not a measurement.
38
+ - **No person is named in a causal sentence.** Roles appear in response actions only. One named-blame sentence fails the doc.
39
+ - **Detection and mitigation gaps are computed and stated.** They are the two numbers the next incident will be judged against.
40
+ - **At least 2 contributing factors, zero of them "human error".** A single root cause means the chain of "why was that possible?" stopped one question early.
41
+ - **Every action item is verifiable and owned.** A reader can check it's done without asking anyone's opinion; an item without a done-condition is a wish.
42
+ - **"Where we got lucky" is non-empty.** Naming the near-miss is how it gets fixed before it's the next incident's headline.
43
+
44
+ ## When to use this skill
45
+
46
+ - ✅ After an incident/outage, turning the response scrollback into the postmortem doc
47
+ - ✅ "Write the RCA for yesterday's outage"
48
+ - ✅ Preparing the incident-review meeting doc
49
+ - ✅ Retroactively documenting an old incident before the details evaporate
50
+
51
+ ## When NOT to use this skill
52
+
53
+ - ❌ During the incident — mitigate first; the postmortem starts when impact ends
54
+ - ❌ A performance-management record — the doc is structurally blameless; misusing it kills honest reporting
55
+ - ❌ Project retrospectives with no production incident — different ritual, different doc
56
+ - ❌ Writing the runbook itself — emit the deltas and hand to `runbook-generator`
57
+
58
+ ## Anti-patterns to avoid
59
+
60
+ - ❌ **Single root cause.** "The config was wrong" explains nothing about review, validation, deploy gates, or blast radius — the four places to actually fix.
61
+ - ❌ **"Human error" / "should have been more careful".** Careful is not a control. Name the missing guardrail instead.
62
+ - ❌ **The 20-item action list.** It signals diligence and delivers nothing; nobody finishes it and the P1s drown.
63
+ - ❌ **Timeline theater.** Forty rows of who-said-what-in-Slack instead of the ten events that changed system state.
64
+ - ❌ **Quiet heroics as a fix.** "An engineer noticed by luck at 2am" is a detection gap wearing a cape — the action item is monitoring, not gratitude.
65
+ - ❌ **Skipping the postmortem because impact was "minor".** Near-misses are the cheapest lessons; severity gates the meeting, not the doc.
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "postmortem-generator",
3
+ "version": "0.1.0",
4
+ "description": "Generate a blameless incident postmortem from raw material (Slack thread, pager timeline, notes) — quantified impact, UTC timeline with detection/mitigation gaps, contributing factors instead of a single root cause, and ≤8 verifiable action items. Use after an incident or outage when the user needs a postmortem, RCA, incident review, or \"lessons learned\" doc.",
5
+ "entrypoint": "SKILL.md",
6
+ "deps": { "npm": [], "pip": [] },
7
+ "env": { "required": [], "optional": [] },
8
+ "related": ["runbook-generator"],
9
+ "tags": ["postmortem", "incident", "rca", "sre", "blameless", "outage"],
10
+ "model": { "tier": "standard", "rationale": "Synthesizes a structured doc from incident notes. Contributing-factor chains need judgment but are bounded; escalate via large-input on huge scrollbacks." }
11
+ }
@@ -0,0 +1,67 @@
1
+ # Postmortem template
2
+
3
+ Summary first — it's the only section most readers finish. All timestamps UTC. Unknowns get `[missing]`, never prose camouflage.
4
+
5
+ ```markdown
6
+ # Postmortem: {one-line incident title, symptom-first — "Checkout 500s for EU users", not "Config issue"}
7
+
8
+ **Status:** draft | reviewed | actions-tracked
9
+ **Severity:** SEV{1–4} · **Date:** {YYYY-MM-DD} · **Author role:** {e.g. incident commander}
10
+
11
+ ## Summary
12
+
13
+ {3–5 sentences a director can repeat: what broke for whom, for how long, why in one
14
+ clause, and the headline fix. No jargon that needs the timeline to decode.}
15
+
16
+ ## Impact
17
+
18
+ | Measure | Value |
19
+ |---|---|
20
+ | Duration (impact start → end) | {Xh Ym} |
21
+ | Users / customers affected | {number or %, or [missing]} |
22
+ | Requests failed / degraded | {number, or [missing]} |
23
+ | SLO / error budget burn | {e.g. "34% of monthly budget", or [missing]} |
24
+ | Revenue / contractual | {value, "none known", or [missing]} |
25
+
26
+ ## Timeline (UTC)
27
+
28
+ | Time | Event | Source |
29
+ |---|---|---|
30
+ | {hh:mm} | {impact begins — state change, not Slack chatter} | {alert/log/deploy} |
31
+ | {hh:mm} | {first human aware} | {page/user report} |
32
+ | {hh:mm} | {mitigation applied} | … |
33
+ | {hh:mm} | {impact ends} | … |
34
+
35
+ **Detection gap:** {impact start → first human aware} — {if users reported it before
36
+ monitoring fired, say exactly that}
37
+ **Mitigation gap:** {detection → impact end}
38
+
39
+ ## Contributing factors (2+; "human error" is not one)
40
+
41
+ 1. **{Condition, not act}** — {why this made the incident possible/worse; the guardrail
42
+ that was absent or didn't fire}
43
+ 2. **{…}** — {…}
44
+
45
+ ## What went well / poorly / where we got lucky
46
+
47
+ **Well:** {response behaviors worth repeating}
48
+ **Poorly:** {response-side gaps — paging, comms, tooling — not the cause itself}
49
+ **Lucky:** {mandatory — the near-miss: "happened at 3am low traffic", "the one engineer
50
+ who knew X was awake", "rollback happened to be safe"}
51
+
52
+ ## Action items (≤8)
53
+
54
+ | # | Action | Class | Owner (role) | Done when |
55
+ |---|---|---|---|---|
56
+ | 1 | {specific change} | prevent / detect / mitigate | {team or role} | {verifiable condition} |
57
+
58
+ **Considered, not taken:** {candidate} — {one line why not}
59
+
60
+ ## Runbook deltas
61
+
62
+ - {Runbook section} → {the edit this incident proves necessary — paste-ready}
63
+
64
+ ## Open questions
65
+
66
+ - {anything still [missing] that follow-up should resolve, with who can answer it}
67
+ ```
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: prd-draft
3
+ description: Draft a Product Requirements Document from a feature idea or brief — evidence-backed problem statement with zero solution language, testable MoSCoW-prioritized requirements, mandatory non-goals, and a success line per goal. Use when the user needs a PRD, wants to capture business requirements for a feature, or asks to turn an idea, pitch, or brief into a requirements doc.
4
+ ---
5
+
6
+ # prd-draft
7
+
8
+ Turns "the business wants X" into the document that aligns everyone on **what problem, for whom, how we'll know** — before anyone argues about how. The missing link in the pipeline: `brief-intake` (raw mess → brief) → **`prd-draft`** → `user-story-splitter` (stories), `nfr-spec` (quality targets), `success-metrics` (measurement), `design-doc` (the how).
9
+
10
+ ## How to respond
11
+
12
+ 1. **Ingest the idea** — a `brief-intake` output, a pitch paragraph, a meeting note. Ask at most 2 questions, spent on the two highest-leverage unknowns: **evidence** ("what tells us users actually have this problem?") and the **binding constraint** ("fixed deadline, fixed scope, or fixed team?"). Everything else: pick a default, tag it `[assumption]`.
13
+
14
+ 2. **Write the problem statement with zero solution nouns.** It names users, their situation, the pain, and the evidence — and survives the test: *could this paragraph justify a completely different solution than the one everyone has in mind?* ✅ *"Support agents spend ~20 min/ticket reconstructing customer order history across three tools `[reported by support lead]`"* — ❌ *"We need an order-history dashboard"* (that's a solution wearing a problem costume).
15
+
16
+ 3. **Name the users specifically enough to find one.** Primary persona + their job-to-be-done; secondary personas listed but explicitly deprioritized. "All users" is not a persona — if the feature really serves everyone, name who feels the pain *most*.
17
+
18
+ 4. **State goals with a success line each.** Every goal carries one measurable "we'll know it worked when …" sentence — target, timeframe, baseline if known. One line here; the full measurement design (instrumentation, guardrails) is `success-metrics`' job — point the user there.
19
+
20
+ 5. **Write requirements that are testable and solution-free**, each with a MoSCoW priority — and the **Won't-have list is mandatory**: ✅ *"M — Agent sees a customer's orders from all channels in one view, ≤3s after lookup"* — ❌ *"M — Use Redis to cache order data"* (implementation, belongs in `design-doc`) — ❌ *"S — The experience is seamless"* (untestable, belongs nowhere). Requirements describe observable behavior or capability; each one is checkable by a tester or demo.
21
+
22
+ 6. **Make non-goals carry weight — minimum 3.** Non-goals are the section that kills scope creep in review instead of in sprint 4. Each names the thing stakeholders will plausibly ask for, and one line on why it's out: ✅ *"Editing orders from this view — read-only for v1; write paths triple the authz surface (revisit after launch metrics)"*.
23
+
24
+ 7. **List open questions with owners and dates** — the unknowns that block requirement freeze, each assigned to a person/role who can actually answer it. An open question without an owner is a future surprise.
25
+
26
+ 8. **Emit the PRD with [`templates/prd.md`](templates/prd.md)** in one message, sized for a 30-minute read. End with the handoff map: stories → `user-story-splitter`, quality targets → `nfr-spec`, measurement → `success-metrics`, technical approach → `design-doc`.
27
+
28
+ ## Useful references in this skill
29
+
30
+ - [`templates/prd.md`](templates/prd.md) — the PRD skeleton with the solution-language test and MoSCoW table
31
+
32
+ ## Quality bar
33
+
34
+ - **The problem statement passes the alternative-solution test.** If only one solution could follow from it, it's a spec, not a problem.
35
+ - **Every requirement is verifiable** — a tester can demo it pass/fail. Implementation choices and adjective requirements both fail.
36
+ - **Won't-have list is non-empty and specific.** "Out of scope: everything else" is an empty gesture; name the tempting things.
37
+ - **Every goal has a success line with a number and a timeframe.** "Improve agent efficiency" is a hope; "median handle time −25% within 60 days of GA" is a goal.
38
+ - **Evidence is tagged to its source** — `[reported by X]`, `[data: Y]`, `[assumption]`. A PRD's authority is exactly as good as its weakest untagged claim.
39
+ - **It reads in 30 minutes.** Length is a tax on every reviewer; appendices exist for the rest.
40
+
41
+ ## When to use this skill
42
+
43
+ - ✅ A feature idea needs to become an agreed requirements doc before design starts
44
+ - ✅ "Write a PRD for X" / "capture the business requirements for X"
45
+ - ✅ A `brief-intake` output is ready to be shaped into the canonical product doc
46
+ - ✅ Two teams disagree about what's being built — the PRD is the alignment artifact
47
+
48
+ ## When NOT to use this skill
49
+
50
+ - ❌ The technical how — architecture, stack, data model → `design-doc`
51
+ - ❌ Splitting into sprint-sized work → `user-story-splitter` (after the PRD)
52
+ - ❌ Whether to invest at all → `business-case`; the PRD assumes the investment decision is made
53
+ - ❌ A tiny change that needs a ticket, not a doc → `user-story-splitter` or `bug-triage`
54
+
55
+ ## Anti-patterns to avoid
56
+
57
+ - ❌ **Solution-as-problem.** "Problem: we don't have a dashboard." The absence of a solution is never the problem.
58
+ - ❌ **Implementation smuggled into requirements.** "Must use Kafka" — the PRD owns *what*; smuggled *hows* pre-empt design without review.
59
+ - ❌ **Adjective requirements.** Fast, seamless, intuitive, robust — each one either gets a number or gets cut.
60
+ - ❌ **The empty non-goals section.** A PRD that excludes nothing has decided nothing; it's a wish list with a header.
61
+ - ❌ **Stakeholder wish-list flattening.** Every request recorded as "Must" because saying Should felt political — MoSCoW with one priority level is no prioritization.
62
+ - ❌ **The 40-page PRD.** Completeness theater; nobody reviews page 23, so page 23 ships unreviewed.
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "prd-draft",
3
+ "version": "0.1.0",
4
+ "description": "Draft a Product Requirements Document from a feature idea or brief — evidence-backed problem statement with zero solution language, testable MoSCoW-prioritized requirements, mandatory non-goals, and a success line per goal. Use when the user needs a PRD, wants to capture business requirements for a feature, or asks to turn an idea, pitch, or brief into a requirements doc.",
5
+ "entrypoint": "SKILL.md",
6
+ "deps": { "npm": [], "pip": [] },
7
+ "env": { "required": [], "optional": [] },
8
+ "related": ["brief-intake", "bug-triage", "business-case", "design-doc", "nfr-spec", "success-metrics", "user-story-splitter"],
9
+ "tags": ["prd", "requirements", "product", "discovery", "moscow", "non-goals"],
10
+ "model": { "tier": "standard", "rationale": "Synthesizes a structured requirements doc from a brief. The solution-language discipline needs care; bounded by the template. Escalate via ambiguous-input on contested scope." }
11
+ }
@@ -0,0 +1,66 @@
1
+ # PRD template
2
+
3
+ Sized for a 30-minute read. Every claim tagged `[reported by …]`, `[data: …]`, or `[assumption]`.
4
+
5
+ ```markdown
6
+ # PRD: {feature name — noun phrase, not a solution name if avoidable}
7
+
8
+ **Status:** draft | in review | frozen · **Owner:** {role} · **Date:** {YYYY-MM-DD}
9
+ **Binding constraint:** {fixed deadline | fixed scope | fixed team} `[reported|assumption]`
10
+
11
+ ## Problem
12
+
13
+ {Who, in what situation, suffers what, evidenced by what. Zero solution nouns.
14
+ Test before moving on: could this paragraph justify a completely different
15
+ solution than the one in everyone's head? If not, rewrite.}
16
+
17
+ ## Users
18
+
19
+ **Primary:** {persona specific enough to find one} — job-to-be-done: {what they're
20
+ trying to accomplish when they hit the problem}
21
+ **Secondary (explicitly deprioritized):** {personas served incidentally, one line on why not primary}
22
+
23
+ ## Goals
24
+
25
+ | # | Goal | We'll know it worked when |
26
+ |---|---|---|
27
+ | G1 | {outcome, not output} | {metric + target + timeframe; baseline if known, else "[baseline needed]"} |
28
+
29
+ Full measurement design (instrumentation, guardrails, decision rule): hand to `success-metrics`.
30
+
31
+ ## Requirements
32
+
33
+ | ID | Requirement (testable, solution-free) | MoSCoW | Maps to goal |
34
+ |---|---|---|---|
35
+ | R1 | {observable behavior/capability a tester can verdict} | M | G1 |
36
+ | R2 | … | S | G1 |
37
+
38
+ **Won't have (this version):**
39
+ - {the tempting thing} — {one line why out}
40
+
41
+ ## Non-goals (minimum 3 — the scope-creep firewall)
42
+
43
+ - **{Thing stakeholders will plausibly ask for}** — {why it's out; when it might come back}
44
+
45
+ ## Quality targets
46
+
47
+ One line each if known; full treatment → `nfr-spec`.
48
+ {e.g. "Agent-facing: p95 lookup < 3s. Availability follows the support-tools tier."}
49
+
50
+ ## Open questions
51
+
52
+ | Question | Owner | Needed by |
53
+ |---|---|---|
54
+ | {blocker to freezing requirements} | {person/role who can answer} | {date} |
55
+
56
+ ## Assumptions log
57
+
58
+ - [assumption] {default picked} — challenge by {date/review}
59
+
60
+ ## Handoffs
61
+
62
+ - Stories & slicing → `user-story-splitter`
63
+ - Quality targets → `nfr-spec`
64
+ - Measurement → `success-metrics`
65
+ - Technical approach → `design-doc`
66
+ ```
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: prfaq
3
+ description: Write an Amazon-style PR/FAQ — the launch press release for a product that doesn't exist yet, plus the customer FAQ and internal FAQ that force the hard questions before engineering starts. Use when the user wants a PRFAQ, a working-backwards document, a "write the press release first" exercise, or needs to align stakeholders on what a product must be before committing a team to build it.
4
+ ---
5
+
6
+ # prfaq
7
+
8
+ The working-backwards forcing function: write the launch press release *before* the product exists, then answer the questions a real customer and a skeptical insider would ask. If the press release can't be written specifically — a nameable customer, a problem in their words, a benefit you could measure — the product isn't ready to spec, and surfacing that is the deliverable. Sits upstream of `prd-draft` (requirements for a committed product) and `business-case` (invest/defer decision): the PRFAQ decides whether the idea deserves either.
9
+
10
+ ## How to respond
11
+
12
+ 1. **Pin the three anchors** — customer, problem, differentiator. Ask at most 2 questions, spent on the weakest anchors: *"Who exactly is the customer, and what do they do today instead?"* and *"What does this do that the thing they use today doesn't?"* A PRFAQ for "everyone" with a problem stated in industry jargon produces a marketing document, not a forcing function — don't start drafting until all three anchors are concrete. Non-interactive run (no user to ask): derive missing anchors from the input where defensible and tag them `[assumption]` at the top; an anchor with no defensible derivation → emit `BLOCKED: need <anchor>` naming what to rerun with, instead of fabricating a customer.
13
+
14
+ 2. **Write the press release** — one page, datelined with a city and a realistic launch date; no product name exists yet → invent a plausible working name and mark it as a placeholder. The blocks:
15
+ - **Headline**: product name + the customer benefit in one sentence. ✅ *"Acme Contracts cuts routine contract review from three days to twenty minutes for in-house legal teams"* — ❌ *"Acme launches AI-powered legal platform"*.
16
+ - **Sub-headline**: the one key detail the headline compressed (who it's for, what it replaces, or the mechanism).
17
+ - **Problem paragraph**: the customer's current pain *in their words*. ✅ *"I can't close a deal until legal clears the paperwork, and legal is three days behind"* — ❌ *"lack of operational visibility into contract workflows"*.
18
+ - **Solution paragraph**: what the product does and what it does *differently* from the alternative the customer already uses. "AI-powered" is not a differentiator; the mechanism is.
19
+ - **Leadership quote**: one sentence naming the strategic rationale, attributed to a role (*"our VP of Product"*), never a placeholder name. If the rationale can't be articulated, that's a finding — report it.
20
+ - **Customer quote**: a named-persona customer describing the before/after in concrete terms — a specific moment, not adjectives.
21
+ - **Call to action**: what the customer does next to get started.
22
+
23
+ 3. **Derive the adoption hypothesis** — two lines that make the press release falsifiable:
24
+ - **First-success event**: the one *customer* action that proves first value landed, observable within a session. ✅ *"Legal counsel approves their first AI-reviewed contract without re-reading it line by line"* — ❌ *"user completes onboarding"* — ❌ *"we launch to beta"* (that's the team's action, not the customer's).
25
+ - **Repeat-value behavior**: what brings the customer back after first success.
26
+
27
+ Can't name a first-success event → the problem paragraph is too vague; go back to step 2 before continuing.
28
+
29
+ 4. **Write the customer FAQ** — 3–5 questions a real buyer asks before switching: price, switching cost, reliability, "how is this different from `<what they use today>`", data/privacy. Answer honestly, and **at least one answer must concede a real trade-off**. A FAQ where every answer is good news is an ad.
30
+
31
+ 5. **Write the internal FAQ** — the questions a skeptical insider asks, each with a committed answer:
32
+ - The **riskiest assumption** — the belief that, if wrong, kills the product — and how it will be tested first.
33
+ - The **hardest technical or operational problem** and why it's believed solvable.
34
+ - The **acquisition path** — how the first 10 customers concretely arrive (not "marketing").
35
+ - The **success metric** — traceable to the first-success event from step 3. "User count" when first success is an approval event is a vanity metric; the metric must count the event.
36
+ - **What would make us kill this** — a named condition, not "if it doesn't work out".
37
+
38
+ 6. **Run the read-aloud pass, then emit** with [`templates/prfaq.md`](templates/prfaq.md): could a non-technical reader retell the problem and solution after one read? Is every claim in the press release either measurable or attributed? Anything failing gets rewritten before the artifact ships. Close with the hand-off line: idea survives → `prd-draft` (requirements) or `business-case` (the investment ask); riskiest assumption unproven → the test for it comes first.
39
+
40
+ ## Useful references in this skill
41
+
42
+ - [`templates/prfaq.md`](templates/prfaq.md) — press release blocks, adoption hypothesis, and both FAQ skeletons
43
+
44
+ ## Quality bar
45
+
46
+ - **The problem paragraph is in the customer's words.** If it contains a term the customer wouldn't say out loud, it fails.
47
+ - **The first-success event is behavioral and observable** — you could watch a session recording and mark the moment it happened.
48
+ - **The solution names a mechanism**, not a category. "Uses AI" describes a decade of products; what does *this one* do differently?
49
+ - **At least one customer-FAQ answer concedes a trade-off.** Honesty in the FAQ is what separates a forcing function from a pitch.
50
+ - **The internal-FAQ success metric counts the first-success event** — not sign-ups, not launches, not page views.
51
+ - **The kill condition is named.** A PRFAQ that can't say what failure looks like hasn't confronted the riskiest assumption.
52
+ - **No spec content.** Zero API shapes, acceptance criteria, or backlog items — those belong downstream in `prd-draft`.
53
+
54
+ ## When to use this skill
55
+
56
+ - ✅ A product or feature concept exists but no team is committed yet — test the direction before the spec
57
+ - ✅ "Write the press release first" / "do a working-backwards doc" / "Amazon-style PRFAQ"
58
+ - ✅ Stakeholders disagree about what a product *is* — the press release forces one answer
59
+ - ✅ A founder or PM needs to discover whether an idea survives its own hard questions
60
+
61
+ ## When NOT to use this skill
62
+
63
+ - ❌ The product is committed and needs requirements — that's `prd-draft`
64
+ - ❌ The question is invest/defer with costed options — that's `business-case`
65
+ - ❌ Real launch marketing copy for a product that exists — this is a thinking tool, not copywriting
66
+ - ❌ Org-level strategy or portfolio questions — `strategy-analysis`
67
+
68
+ ## Anti-patterns to avoid
69
+
70
+ - ❌ **PRFAQ as a spec.** The moment acceptance criteria or API shapes appear, it's stopped forcing direction and started doing `prd-draft`'s job badly.
71
+ - ❌ **Jargon-laundered problems.** "Lack of cross-functional visibility" is how a vendor talks. "I can't tell if my team is blocked" is how a customer talks. Only the second belongs in the press release.
72
+ - ❌ **Placeholder quotes.** "[CEO name]: 'We're excited…'" defeats the exercise — the quote exists to force the strategic rationale into one attributable sentence.
73
+ - ❌ **Launch-as-adoption.** "Ship to beta" as first success conflates the team's delivery with the customer's value. First success is something the *customer* does.
74
+ - ❌ **Moat without mechanism.** Claiming defensibility without naming what makes it hard to copy — data advantage, network effect, workflow lock-in — is a wish wearing a strategy's clothes.
75
+ - ❌ **All-good-news FAQs.** If the customer FAQ reads like the pricing page, the hard questions were dodged and the document proves nothing.
@@ -0,0 +1,13 @@
1
+ [
2
+ { "query": "Write a PRFAQ for our new product idea", "should_trigger": true },
3
+ { "query": "I want to write the press release before the product exists", "should_trigger": true },
4
+ { "query": "Help me do an Amazon-style working-backwards doc for this concept", "should_trigger": true },
5
+ { "query": "We need to align stakeholders on what this product actually is before engineering starts", "should_trigger": true },
6
+ { "query": "Write the press release and FAQ for this idea and tell me if it survives its own hard questions", "should_trigger": true },
7
+
8
+ { "query": "Draft the product requirements doc for the new feature", "should_trigger": false },
9
+ { "query": "Write a business case for building vs buying this tool", "should_trigger": false },
10
+ { "query": "Write the marketing copy for our launch homepage", "should_trigger": false },
11
+ { "query": "Run a SWOT analysis on our product line", "should_trigger": false },
12
+ { "query": "Write release notes for what we shipped this sprint", "should_trigger": false }
13
+ ]
@@ -0,0 +1,32 @@
1
+ {
2
+ "skill_name": "prfaq",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Write a PRFAQ for an AI-powered contract review tool aimed at in-house legal teams at mid-market companies. The problem: legal teams spend 60% of their time on low-complexity contract review that blocks deal closure.",
7
+ "assertions": [
8
+ "Press release contains all blocks: headline, sub-headline, problem paragraph, solution paragraph, leadership quote, customer quote, call to action",
9
+ "The headline names the product and a customer benefit — not a category claim like 'launches AI-powered platform'",
10
+ "The problem paragraph is in the customer's words with no industry jargon",
11
+ "The solution paragraph names a mechanism, not just 'uses AI'",
12
+ "The leadership quote is attributed to a role (not a placeholder name) and states a strategic rationale",
13
+ "An adoption hypothesis names a first-success event that is a customer action, observable within a session — not 'signs up', 'completes onboarding', or a team action like 'launch'",
14
+ "A repeat-value behavior is named",
15
+ "Customer FAQ has 3-5 questions and at least one answer concedes a real trade-off",
16
+ "Internal FAQ names the riskiest assumption with a test, the hardest technical problem, a concrete acquisition path, and a kill condition",
17
+ "The internal-FAQ success metric counts the first-success event, not a vanity metric",
18
+ "No acceptance criteria, API shapes, or backlog items appear anywhere",
19
+ "The output ends with a hand-off pointing to prd-draft or business-case"
20
+ ]
21
+ },
22
+ {
23
+ "id": 2,
24
+ "prompt": "[Non-interactive run — no user available to answer questions] Write a PRFAQ.",
25
+ "assertions": [
26
+ "No press release is fabricated — with no customer, problem, or differentiator derivable, the output is a BLOCKED response",
27
+ "The BLOCKED output names the missing anchors (customer, problem, differentiator) and what to rerun with",
28
+ "No invented product, customer segment, or problem statement appears"
29
+ ]
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "prfaq",
3
+ "version": "0.1.0",
4
+ "description": "Write an Amazon-style PR/FAQ — the launch press release for a product that doesn't exist yet, plus the customer FAQ and internal FAQ that force the hard questions before engineering starts. Use when the user wants a PRFAQ, a working-backwards document, a \"write the press release first\" exercise, or needs to align stakeholders on what a product must be before committing a team to build it.",
5
+ "entrypoint": "SKILL.md",
6
+ "deps": { "npm": [], "pip": [] },
7
+ "env": { "required": [], "optional": [] },
8
+ "related": ["business-case", "prd-draft", "strategy-analysis"],
9
+ "tags": ["prfaq", "working-backwards", "press-release", "product-strategy", "product-direction", "amazon"],
10
+ "model": { "tier": "standard", "rationale": "Synthesizes a press release and FAQs from a product concept against a fixed format. The specificity discipline needs care but the template bounds it; escalate via ambiguous-input when the concept itself is contested." }
11
+ }
@@ -0,0 +1,60 @@
1
+ # PR/FAQ: {Product name}
2
+
3
+ > Status: DRAFT — working-backwards document, not a spec.
4
+ > Author: {role} · Date: {date} · Imagined launch date: {launch-date}
5
+
6
+ ## Press release
7
+
8
+ **{Headline: product name + customer benefit in one sentence}**
9
+
10
+ *{Sub-headline: the key detail the headline compressed}*
11
+
12
+ {CITY} — {launch-date} — {Problem paragraph: the customer's current pain, in their words. What do they do today, and where does it hurt?}
13
+
14
+ {Solution paragraph: what the product does, and the mechanism that makes it different from what the customer uses today.}
15
+
16
+ "{Leadership quote: one sentence naming the strategic rationale}," said {role, e.g. "the VP of Product"}.
17
+
18
+ "{Customer quote: a named persona describing a concrete before/after moment}," said {persona name, role at company-type}.
19
+
20
+ {Call to action: what the customer does next to get started.}
21
+
22
+ ## Adoption hypothesis
23
+
24
+ - **First-success event:** {the one customer action that proves first value — behavioral, observable within a session}
25
+ - **Repeat-value behavior:** {what brings the customer back after first success}
26
+
27
+ ## Customer FAQ
28
+
29
+ <!-- 3–5 questions a real buyer asks before switching. At least one answer concedes a trade-off. -->
30
+
31
+ **Q: How is this different from {what they use today}?**
32
+ A: {honest answer, mechanism not category}
33
+
34
+ **Q: What does it cost / what's the switching cost?**
35
+ A: {…}
36
+
37
+ **Q: {reliability / data / privacy question}**
38
+ A: {answer that concedes the real trade-off}
39
+
40
+ ## Internal FAQ
41
+
42
+ **Q: What's the riskiest assumption, and how do we test it first?**
43
+ A: {the belief that kills the product if wrong} → {the cheapest test}
44
+
45
+ **Q: What's the hardest technical/operational problem?**
46
+ A: {…, and why we believe it's solvable}
47
+
48
+ **Q: How do the first 10 customers concretely arrive?**
49
+ A: {named path, not "marketing"}
50
+
51
+ **Q: What's the success metric?**
52
+ A: {a count of the first-success event, with a target and timeframe}
53
+
54
+ **Q: What would make us kill this?**
55
+ A: {a named condition}
56
+
57
+ ## Hand-off
58
+
59
+ - Idea survives → `prd-draft` (requirements) or `business-case` (the investment ask)
60
+ - Riskiest assumption unproven → design its test before anything else
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: release-notes
3
+ description: Turn git history between two refs into release notes — a customer-facing version written in reader benefits and an internal Keep-a-Changelog version with commit traceability, breaking changes always first. Use when the user wants release notes, a changelog, "what's in this release", a deploy announcement, or to summarize changes since the last tag.
4
+ ---
5
+
6
+ # release-notes
7
+
8
+ Converts commit history into two artifacts with different readers: **customer-facing release notes** (benefits, no commit-speak) and an **internal changelog** (Keep a Changelog format, every line traceable to a commit). The rule that drives everything: write for the reader who didn't make the change.
9
+
10
+ ## How to respond
11
+
12
+ 1. **Resolve the range.** Default: last tag to HEAD (`git describe --tags --abbrev=0`). If no tags exist, ask for a start ref or take the user's two refs. State the resolved range at the top of the output: "`v1.4.0..HEAD`, 37 commits, 2026-05-02 → 2026-06-10".
13
+
14
+ 2. **Gather the raw material.** `git log <range> --no-merges --pretty='%h|%s|%an|%ad' --date=short` for the commit list; `git log <range> --stat` only when a subject line is too vague to classify. Where the `gh` CLI is available and the repo uses PRs, prefer PR titles over commit subjects (`gh pr list --state merged --search "merged:>={date}"`) — they're written closer to reader language. Don't require `gh`; commits alone are enough.
15
+
16
+ 3. **Classify every change** into Keep-a-Changelog categories plus one local bucket:
17
+ - **Added / Changed / Fixed / Deprecated / Removed / Security** — reader-visible
18
+ - **Internal** — refactors, CI, deps, tests; appears in the internal changelog, never in customer notes
19
+ - **Needs review** — can't tell what it does from the commit; goes in a list for the user, never guessed into customer notes
20
+
21
+ 4. **Hoist breaking changes and migrations to the top** of both artifacts, each with an **Action required** line. A breaking change buried under "Changed" is the cardinal failure of release notes. Detect via `BREAKING`, `!:` conventional-commit markers, migration files, major dependency bumps, and removed public API — and say which signal triggered the flag.
22
+
23
+ 5. **Rewrite, don't transcribe.** Each customer-facing line states what the reader can now do or no longer suffers. ✅ *"Fixed a crash when exporting reports with more than 10,000 rows"* — ❌ *"fix NPE in ReportExporter.flush()"*. Drop ticket numbers and author names from customer notes; keep both in the internal changelog with the short hash on every line.
24
+
25
+ 6. **Emit both artifacts** with [`templates/release-notes.md`](templates/release-notes.md): customer notes first, internal changelog second, then the **Needs review** list. If the user wants only one artifact, emit that one — but the needs-review list is never optional.
26
+
27
+ ## Useful references in this skill
28
+
29
+ - [`templates/release-notes.md`](templates/release-notes.md) — both artifact skeletons plus the classification cheat-sheet
30
+
31
+ ## Quality bar
32
+
33
+ - **Breaking changes are first, with an action.** Every breaking entry has "Action required: …" a reader can execute. No action identifiable → it goes to Needs review, not to the top section unverified.
34
+ - **No commit-speak in customer notes.** Class names, function names, internal service names, and ticket IDs are all signals the line wasn't rewritten.
35
+ - **Every internal-changelog line ends in a short hash** (and PR number when available). A claim nobody can trace is a claim nobody can verify.
36
+ - **Internal noise stays internal.** Dependency bumps, refactors, CI, and test-only changes never appear in customer notes — not even as "various improvements".
37
+ - **Nothing is guessed.** A vague commit ("fix stuff", "wip") lands in Needs review with its hash; the skill never invents a user-facing meaning for it.
38
+ - **The range is stated.** Refs, commit count, and date span at the top — so a reader knows exactly what window the notes cover.
39
+
40
+ ## When to use this skill
41
+
42
+ - ✅ Cutting a release and writing "what's new" for users or customers
43
+ - ✅ Maintaining `CHANGELOG.md` between versions
44
+ - ✅ A deploy/release announcement for internal stakeholders
45
+ - ✅ "Summarize everything merged since the last tag"
46
+
47
+ ## When NOT to use this skill
48
+
49
+ - ❌ A single PR description — that's one change, just write it
50
+ - ❌ Reviewing the changes for quality or risk — that's `devils-advocate` / `sonar-review`
51
+ - ❌ Stakeholder narrative about *why* the release matters strategically — feed the notes to `exec-summary`
52
+ - ❌ Generating commit messages going forward — this skill reads history, it doesn't write it
53
+
54
+ ## Anti-patterns to avoid
55
+
56
+ - ❌ **Transcribing commit subjects with bullets in front.** That's `git log` with extra steps — the rewrite into reader language is the entire job.
57
+ - ❌ **"Various bug fixes and improvements."** Either the fix is worth a line or it's internal; the vague catch-all is neither.
58
+ - ❌ **Burying a breaking change** in the middle of "Changed" because the commit didn't shout about it. The detection signals exist precisely for quiet breaks.
59
+ - ❌ **Padding a thin release.** Two real changes get two lines. Inflating with internal noise to look substantial erodes trust in every future release note.
60
+ - ❌ **Marketing adjectives.** "Blazing-fast", "completely redesigned", "supercharged" — state the measurable change ("export is ~3× faster on large reports") or state nothing.
61
+ - ❌ **Silently skipping unparseable commits.** They go to Needs review; the count of skipped commits is part of the output.
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "release-notes",
3
+ "version": "0.1.0",
4
+ "description": "Turn git history between two refs into release notes — a customer-facing version written in reader benefits and an internal Keep-a-Changelog version with commit traceability, breaking changes always first. Use when the user wants release notes, a changelog, \"what's in this release\", a deploy announcement, or to summarize changes since the last tag.",
5
+ "entrypoint": "SKILL.md",
6
+ "deps": { "npm": [], "pip": [] },
7
+ "env": { "required": [], "optional": [] },
8
+ "related": ["devils-advocate", "exec-summary", "sonar-review"],
9
+ "tags": ["release-notes", "changelog", "git", "release", "deploy", "communication"],
10
+ "model": { "tier": "standard", "rationale": "Classifies commits and rewrites them for a reader. The audience translation needs judgment; escalate via large-input on very long ranges." }
11
+ }