{"slug":"generate-release-notes-3","title":"generate-release-notes","summary":"Generate categorized release notes from any source (GitHub, Linear, Jira, or manual input) with optional publishing","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-28T15:11:42.655208Z","repo":{"url":"https://github.com/huytieu/COG-second-brain","stars":1236,"forks":147,"license":"MIT","updatedAt":"2026-09-28T08:52:07Z"},"bodyHtml":"<hr>\n<h2>name: generate-release-notes\ndescription: Generate categorized release notes from any source (GitHub, Linear, Jira, or manual input) with optional publishing\nroles: [product-manager, engineering-lead, founder]\nintegrations: [github, linear, jira, confluence, notion, hackmd]</h2>\n<h1>COG Generate Release Notes Skill</h1>\n<h2>When to Invoke</h2>\n<ul>\n<li>User wants to create release notes for a version, sprint, or cycle</li>\n<li>User says \"release notes\", \"changelog\", \"what shipped\", \"write release notes\"</li>\n<li>A new version or milestone has been completed</li>\n<li>End of sprint/cycle documentation</li>\n</ul>\n<h2>Agent Mode Awareness</h2>\n<p><strong>Check <code>agent_mode</code> in <code>00-inbox/MY-PROFILE.md</code> frontmatter:</strong></p>\n<ul>\n<li>If <code>agent_mode: team</code> — use parallel agents to collect data from all active sources simultaneously</li>\n<li>If <code>agent_mode: solo</code> — collect data sequentially from the primary tracker</li>\n</ul>\n<h2>Command: <code>/generate-release-notes</code></h2>\n<h2>Pre-Flight Check</h2>\n<ol>\n<li><p><strong>Read <code>00-inbox/MY-INTEGRATIONS.md</code></strong> to determine data sources and publishing options</p>\n</li>\n<li><p><strong>Read <code>00-inbox/MY-PROFILE.md</code></strong> for active projects</p>\n</li>\n<li><p><strong>Get current timestamp:</strong> Run <code>date '+%Y-%m-%d %H:%M'</code> using Bash</p>\n</li>\n<li><p><strong>Ask the user</strong> (if not already provided):</p>\n<ul>\n<li>What version/release/cycle is this for?</li>\n<li>What is the date range? (or: which milestone/cycle/sprint?)</li>\n<li>Which project? (if multiple active)</li>\n<li>Audience: internal team, customers, or both?</li>\n</ul>\n</li>\n</ol>\n<hr>\n<h2>Execution Strategy</h2>\n<h3>Phase 1: Collect Release Data</h3>\n<h4>Team Mode (parallel agents)</h4>\n<p>Launch data collection agents using the Task tool with <code>run_in_background: true</code>:</p>\n<p><strong>Agent: \"github-release-collector\"</strong> (if GitHub is active)</p>\n<pre><code>Collect all merged PRs and release data for the specified version/period.\nRepository: [CUSTOMIZE: your-org/your-repo]\nPeriod: [START_DATE] to [END_DATE]\n\n1. Get merged PRs in the period:\n   gh pr list --repo [CUSTOMIZE: your-org/your-repo] --state merged --search \"merged:[START_DATE]..[END_DATE]\" --json number,title,author,labels,body,mergedAt --limit 200\n\n2. Check for existing GitHub release (if version tag exists):\n   gh release view [VERSION_TAG] --repo [CUSTOMIZE: your-org/your-repo] --json name,body,tagName,createdAt 2&gt;/dev/null\n\n3. Get commits between tags (if applicable):\n   gh api repos/[CUSTOMIZE: your-org/your-repo]/compare/[PREV_TAG]...[CURRENT_TAG] --jq '.commits[] | {sha: .sha[:7], message: .commit.message, author: .author.login}'\n\nCategorize each PR by its labels or title prefix:\n- \"feat\"/\"feature\"/\"enhancement\" labels → Enhancements\n- \"fix\"/\"bug\"/\"bugfix\" labels → Bug Fixes\n- \"tech\"/\"refactor\"/\"chore\"/\"infrastructure\" labels → Technical Improvements\n- \"docs\"/\"documentation\" labels → Documentation\n- \"security\" labels → Security\n- \"breaking\"/\"breaking-change\" labels → Breaking Changes\n- \"deprecation\" labels → Deprecations\n\nReturn: categorized list of changes with PR numbers, titles, authors, and descriptions\n</code></pre>\n<p><strong>Agent: \"linear-release-collector\"</strong> (if Linear is active)</p>\n<pre><code>Collect completed issues for the specified cycle/period.\n\n1. Use ToolSearch to load Linear tools\n2. List cycles: mcp__claude_ai_Linear_2__list_cycles\n3. Find the target cycle or filter by date range\n4. List all completed issues in the cycle/period: mcp__claude_ai_Linear_2__list_issues\n5. For each issue, get details including labels and project\n\nCategorize by label or issue type:\n- Feature/Enhancement labels → Enhancements\n- Bug labels → Bug Fixes\n- Technical/Infrastructure labels → Technical Improvements\n- Documentation labels → Documentation\n\nReturn: categorized list of changes with issue IDs, titles, assignees, and descriptions\n</code></pre>\n<p><strong>Agent: \"jira-release-collector\"</strong> (if Jira is active)</p>\n<pre><code>Collect issues for the specified version/sprint.\nProject: [CUSTOMIZE: YOUR-PROJECT-KEY]\n\n1. Search by fixVersion:\n   JQL: project = \"[CUSTOMIZE: YOUR-PROJECT-KEY]\" AND fixVersion = \"[VERSION]\" AND status = Done ORDER BY issuetype, priority DESC\n\n   OR search by sprint:\n   JQL: project = \"[CUSTOMIZE: YOUR-PROJECT-KEY]\" AND sprint = \"[SPRINT_NAME]\" AND status = Done ORDER BY issuetype, priority DESC\n\n2. For each issue, collect: key, summary, issuetype, priority, assignee, labels, description\n\nCategorize by issue type:\n- Story/Feature → Enhancements\n- Bug → Bug Fixes\n- Task/Technical Task → Technical Improvements\n- Documentation → Documentation\n\nReturn: categorized list with issue keys, titles, assignees, types, and descriptions\n</code></pre>\n<h4>Solo Mode</h4>\n<p>Run the primary tracker collection sequentially.</p>\n<h4>Manual Input Fallback</h4>\n<p>If no tracker is active or the user prefers manual input:</p>\n<pre><code>No project tracker detected. You can provide release items manually.\n\nPlease list the changes in this release. I'll categorize them for you.\nFormat: one change per line, optionally prefix with [feature], [fix], [tech], [docs], [security], [breaking]\n</code></pre>\n<h3>Phase 2: Categorize and Organize</h3>\n<p>Organize collected items into standard categories:</p>\n<ol>\n<li><strong>Breaking Changes</strong> (always first if present)</li>\n<li><strong>New Features &amp; Enhancements</strong></li>\n<li><strong>Bug Fixes</strong></li>\n<li><strong>Technical Improvements</strong></li>\n<li><strong>Security Updates</strong></li>\n<li><strong>Documentation</strong></li>\n<li><strong>Deprecations</strong></li>\n<li><strong>Known Issues</strong> (if any remain)</li>\n</ol>\n<p>Within each category, order by:</p>\n<ol>\n<li>Priority (highest first)</li>\n<li>User impact (most impactful first)</li>\n</ol>\n<h3>Phase 3: Generate Release Notes</h3>\n<h4>For Customer/External Audience:</h4>\n<pre><code>---\ntype: release-notes\nproject: [project-name]\nversion: [version]\ndate: [YYYY-MM-DD]\ncreated: [YYYY-MM-DD HH:MM]\naudience: external\ntags: [\"#release-notes\", \"#[project-name]\", \"#v[version]\"]\nitems_count: [total count]\ncategories:\n  enhancements: [count]\n  bug_fixes: [count]\n  technical: [count]\n  security: [count]\n  breaking_changes: [count]\n---\n\n# Release Notes — [Project Name] [Version]\n\n**Release Date:** [Date]\n\n## What's New\n\n[2-3 sentence executive summary of the most important changes in this release]\n\n---\n\n### Breaking Changes\n\n&gt; **Action Required:** The following changes may require updates to your workflow.\n\n- **[Change title]** — [User-friendly description of what changed and what to do]\n\n---\n\n### New Features &amp; Enhancements\n\n- **[Feature title]** — [User-friendly description focused on the benefit to users]\n- **[Feature title]** — [User-friendly description]\n\n### Bug Fixes\n\n- **[Fix title]** — [What was broken and how it's fixed, in user terms]\n- **[Fix title]** — [Description]\n\n### Security Updates\n\n- **[Update title]** — [Description without exposing vulnerability details]\n\n### Deprecations\n\n- **[Deprecated feature]** — [What's being deprecated, timeline, and migration path]\n\n---\n\n### Known Issues\n\n- [Known issue description] — [Workaround if available]\n\n---\n\n*For questions or feedback, [CUSTOMIZE: contact info or link]*\n</code></pre>\n<h4>For Internal/Team Audience:</h4>\n<pre><code>---\ntype: release-notes\nproject: [project-name]\nversion: [version]\ndate: [YYYY-MM-DD]\ncreated: [YYYY-MM-DD HH:MM]\naudience: internal\ntags: [\"#release-notes\", \"#[project-name]\", \"#v[version]\"]\nsource_tracker: [github/linear/jira/manual]\n---\n\n# Release Notes — [Project Name] [Version] (Internal)\n\n**Release Date:** [Date]\n**Cycle/Sprint:** [Name if applicable]\n\n## Summary\n[Executive summary with key stats: N features, N fixes, N tech improvements]\n\n---\n\n### Breaking Changes\n- **[Title]** ([PR/Issue #link]) — [Technical description] — @[author]\n\n### New Features &amp; Enhancements\n- **[Title]** ([PR/Issue #link]) — [Description] — @[author]\n\n### Bug Fixes\n- **[Title]** ([PR/Issue #link]) — [Description] — @[author]\n\n### Technical Improvements\n- **[Title]** ([PR/Issue #link]) — [Description] — @[author]\n\n### Documentation\n- **[Title]** ([PR/Issue #link]) — [Description] — @[author]\n\n---\n\n### Stats\n- **Total items:** [N]\n- **Contributors:** [list of contributors]\n- **PRs merged:** [N]\n- **Issues resolved:** [N]\n\n---\n\n### Known Issues &amp; Follow-ups\n- [ ] [Issue description] — Owner: [name]\n</code></pre>\n<h3>Phase 4: Review Gate</h3>\n<p>Present the generated release notes to the user:</p>\n<pre><code>Release notes draft is ready for [Project] [Version].\n\nSummary:\n- [N] New Features &amp; Enhancements\n- [N] Bug Fixes\n- [N] Technical Improvements\n- [N] other items\n\nAudience: [external/internal]\n\nWould you like to:\na) Review the full release notes\nb) Save as-is to the vault\nc) Make changes\nd) Publish to [active platform] (requires your approval)\n</code></pre>\n<p><strong>NEVER auto-publish. Always wait for explicit user approval.</strong></p>\n<h3>Phase 5: Save to Vault</h3>\n<p>Save to: <code>04-projects/[project]/release-notes/release-[version]-YYYY-MM-DD.md</code></p>\n<pre><code>mkdir -p \"04-projects/[project]/release-notes\"\n</code></pre>\n<h3>Phase 6: Publish (Optional, requires approval)</h3>\n<p><strong>Only proceed if the user explicitly approves.</strong></p>\n<h4>GitHub Release</h4>\n<pre><code>gh release create [VERSION_TAG] \\\n  --repo [CUSTOMIZE: your-org/your-repo] \\\n  --title \"[Project] [Version]\" \\\n  --notes-file [path-to-release-notes]\n</code></pre>\n<h4>Confluence</h4>\n<pre><code>Use WebFetch to publish via Confluence REST API:\n- Space: [CUSTOMIZE: YOUR-SPACE-KEY]\n- Parent page: [CUSTOMIZE: Release-Notes-parent-page-id]\n- Title: \"Release Notes — [Project] [Version]\"\n</code></pre>\n<h4>Notion</h4>\n<pre><code>1. Use ToolSearch to load Notion tools\n2. Use mcp__claude_ai_Notion__notion-create-pages\n</code></pre>\n<h4>HackMD</h4>\n<pre><code>Use WebFetch to publish via HackMD API\n</code></pre>\n<p>After publishing, update the vault copy with the published URL.</p>\n<hr>\n<h2>Fallback Behavior</h2>\n<table>\n<thead>\n<tr>\n<th>Scenario</th>\n<th>Behavior</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>No tracker active</td>\n<td>Accept manual input, or scan git log for commits in the date range</td>\n</tr>\n<tr>\n<td>Tracker API fails</td>\n<td>Fall back to git log analysis: <code>git log --oneline [PREV_TAG]..[CURRENT_TAG]</code></td>\n</tr>\n<tr>\n<td>No version tag specified</td>\n<td>Use date range instead, or list recent completed work</td>\n</tr>\n<tr>\n<td>Mixed sources</td>\n<td>Merge and deduplicate items from multiple trackers</td>\n</tr>\n<tr>\n<td>No publishing platform</td>\n<td>Save to vault only</td>\n</tr>\n<tr>\n<td>Very large release</td>\n<td>Split into \"Highlights\" section + full changelog</td>\n</tr>\n</tbody>\n</table>\n<h2>Error Handling</h2>\n<ul>\n<li><strong>Too many items</strong>: If &gt;100 items, auto-summarize minor changes and list only significant ones in detail</li>\n<li><strong>Missing PR descriptions</strong>: Use PR title and commit messages as fallback</li>\n<li><strong>Duplicate items across trackers</strong>: Deduplicate by matching titles/descriptions</li>\n<li><strong>Context overflow</strong>: Paginate data collection, summarize per-batch</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":10167,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-28T15:13:44.043428Z","sha256":"0256BC5B6EDD2F16B087BBB06249164B4DF48A5B42986F20E00863B7CAA64DE4","sizeBytes":4038},"review":null,"source":{"repositoryUrl":"https://github.com/huytieu/COG-second-brain","path":".claude/skills/generate-release-notes","license":"MIT","commit":"4cdb6015dc6eb66f74bac513856ff6446ecb5d1b","subtreeSha":"130585B54D907309002174A845574668DAC08EE2FBF11E02A7051460BE582633","lastSyncedAt":"2026-09-28T15:11:28.148164Z"},"reviewedAt":"2026-09-28T15:17:07.013998Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/huytieu/COG-second-brain/tree/main/.claude/skills/generate-release-notes"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install huytieu-cog-second-brain@llmmart"},{"target":"git","command":"git clone https://github.com/huytieu/COG-second-brain.git"}]}