> Design the changelog as a distribution surface bridging engineering releases (DEP-/FEA-) to marketing channels (GTM-) during PRD v0.8 Deployment & Ops. Triggers on requests to set up a changelog system, publish releases, or when user asks "how should we publish releases?", "changelog as marketing", "release notes", "Stripe-style changelog", "what to do with our release notes", "ship and tell". Outputs MON-CHG-* changelog entries and per-channel formats.
npx skills add https://github.com/mattgierhart/PRD-driven-context-engineering --skill prd-v08-changelog-as-marketing
Position in workflow: v0.8 Release Planning → v0.8 Changelog as Marketing → v0.9 Launch Channels (ORB)
Default is standard. See .claude/rules/08-skill-execution-modes.md for selection logic.
| Mode | What this skill produces |
|------|--------------------------|
| quick | One release format (markdown for site); one channel mapping; minimum-viable changelog page |
| standard | Release categorization + 2–3 channel mappings; per-channel format templates; publish cadence; attribution plan |
| deep | Full categorization taxonomy; format templates for all relevant channels (email, blog, Twitter, LinkedIn, RSS, Slack); cadence + voice guide; KPI- attribution per channel |
Treats the changelog as a distribution surface, not an engineering record. Each shipped release becomes a content artifact that lands across Owned and Rented channels with minimal extra effort. This is the bridge between v0.8 (what shipped) and v0.9 (where it gets told).
Done well, this is one of the highest-leverage Owned-channel investments — Stripe, Linear, Vercel, and Sentry have shown that an opinionated changelog drives ongoing inbound that compounds over years. Done badly, it's a dumping ground for "fixed bug X" that nobody reads.
A developer-tools product ships:
| Item | Category | Channels |
|------|----------|----------|
| New /api/v2/webhooks endpoint | New feature | Blog (full), email, Twitter, LinkedIn, RSS |
| /api/v1/webhooks deprecation (sunset in 6mo) | Deprecation | Email (high-priority), blog, RSS |
| 30% faster response time on heavy queries | Improvement | Twitter, weekly digest |
| Fixed: webhook signing edge case | Fix | Changelog page only |
| Internal: refactored auth middleware | Internal | (none) |
Tuesday publish:
| Trigger | Mode |
|---------|------|
| First release post-launch (no changelog system yet) | quick |
| Standard launch cadence stabilizing | standard |
| Pre-investor / pre-Series A — changelog as proof of velocity | deep |
| API or developer-tool product | deep (changelog is a primary surface) |
| One-time announcements (acquisition, big feature) | standard |
> When this skill runs before v0.9 has executed, channel mapping uses placeholder channels and is reconciled when v0.9 channels are finalized.
SoT/SoT.DEPLOYMENT.md (or a dedicated SoT/SoT.CHANGELOG.md if release volume warrants)Type=Channel-Changelog (per-channel format templates)MON-CHG-XXX: Release — [Release name / version]
Type: Changelog
Date: YYYY-MM-DD
Owner: [Person / role]
Status: [Drafted | Reviewed | Published]
Released items:
- [Item 1] — Category: [New feature | Improvement | Breaking change | Deprecation | Fix | Internal]
- [Item 2] — Category: ...
Audience: [API customers | All users | Internal team | Mixed]
Channel publications:
- Blog: [URL or "scheduled YYYY-MM-DD"]
- Email: [Segment + scheduled date]
- Twitter: [Scheduled date]
- LinkedIn: [Scheduled date]
- Changelog page: [Updated YYYY-MM-DD]
Attribution: utm_campaign=changelog-<version>
Linked IDs: DEP-AAA (release), FEA-BBB (features shipped), GTM-CHG-CCC (channel formats), KPI-DDD (attribution)
GTM-CHG-XXX: Channel Format — [Channel name]
Type: Channel-Changelog
Channel: [Blog | Email | Twitter | LinkedIn | RSS | Slack]
Owner: [Person / role]
Format constraints:
Length: [chars / words / sections]
Tone: [Conversational | Technical | Formal — anchored in Positioning voice]
Visuals: [Required / optional]
CTA: [Specific action expected]
Template:
[Reusable template for this channel, with variable placeholders]
Example (most recent use):
[Concrete example from MON-CHG-XXX]
Publish trigger: [Per-release | Weekly digest | Monthly digest]
Linked IDs: MON-CHG-AAA (latest use), GTM-YYY (positioning voice)
| Pattern | Signal | Fix |
|---------|--------|-----|
| Dumping internal commits | Changelog reads like git log | Categorize; publish only what users care about |
| Same content everywhere | Same blog post copy-pasted to Twitter and LinkedIn | Each channel has its own format constraints; honor them |
| Vague feature claims | "Various improvements" | Name the specific change; "30% faster heavy queries" beats "performance improvements" |
| Engineering-only voice | Customer changelog uses internal jargon | Tone-shift per audience; engineer changelog ≠ end-user changelog |
| No attribution | Changelog publishes but no idea what converts | UTM every link; track per-channel conversion |
| Sporadic cadence | Publish heavily for 2 months, then quiet for 6 | Pick per-release or digest cadence; commit to it |
| Breaking change buried | Hidden in a sea of small items | Breaking changes get a dedicated, prominent slot |
Before publishing the first release:
| Consumer | What it uses | Example |
|----------|--------------|---------|
| Launch Channels (ORB) | Changelog is an Owned channel; rolls into mix matrix | Blog-changelog = Owned-content |
| Launch Metrics | Per-channel changelog conversion targets | KPI-changelog-blog-signups |
| Feedback Loop Setup | Changelog reader comments become CFD- | Blog comment threads → CFD- pattern |
| AEO Audit | High-traffic changelog posts become AI citation sources | Changelog entries cited by AI search |
| v1.0 Case Study Builder | Shipped features in changelog feed case study material | "How we use [feature] at [customer]" |
changelog-updates skill (devmarketing-skills)references/ — read the source examples for current best practice)Take mattgierhart/prd-v08-changelog-as-marketing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.