From Dev10x
Generates JTBD-driven release notes from git commits and PRs between releases. Configurable playbook for tickets, categories, GitHub/Slack outputs. Trigger for changelog prep.
npx claudepluginhub dev10x-guru/dev10x-claude --plugin Dev10xThis skill is limited to using the following tools:
Generate JTBD-driven release notes from git commits between releases.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Generate JTBD-driven release notes from git commits between releases. Uses Job Stories from PR descriptions to produce business-meaningful summaries instead of technical commit logs.
This skill is driven by playbook configuration. The default playbook
lives at ${CLAUDE_PLUGIN_ROOT}/skills/release-notes/references/playbook.yaml.
Projects can override via the 4-tier resolution in
references/config-resolution.md (global preferred:
~/.claude/memory/Dev10x/playbooks/release-notes.yaml).
| Play | When | Steps |
|---|---|---|
release | Standard release | collect → generate JTBDs → synthesize → behavior changes → format → post |
hotfix | Hotfix release | collect → short summary → format → post |
Each play has a config block with:
| Setting | Type | Default | Description |
|---|---|---|---|
ticket_patterns | list[str] | ["[A-Z]+-\\d+"] | Regex patterns for ticket IDs in commit messages |
ticket_links | dict | {} | Prefix → URL template mapping (e.g., PAY: https://linear.app/team/issue/PAY-{id}) |
output_target | str | stdout | Where to post: stdout, github-release, or slack |
slack_channel | str | null | Slack channel ID (required when output_target is slack) |
include_joke | bool | true | Append a release-themed joke |
categories | list[str] | varies | Section headings for grouping changes |
config block for script args and formattingMissing override detection: After loading, check whether a
user override exists (at any tier per references/config-resolution.md).
If no override exists AND the resolved config has
output_target: stdout with empty ticket_links:
REQUIRED: Call AskUserQuestion (do NOT use plain text).
Options:
This prevents silent fallback to unusable defaults, which was the root cause of 3/14 compliance deviations in a prior audit (GH-271).
Run the collect-prs.py script with configured ticket patterns:
${CLAUDE_PLUGIN_ROOT}/skills/release-notes/scripts/collect-prs.py \
<REPO_PATH> \
[--from TAG] [--to TAG] \
[--ticket-pattern PATTERN] ...
If --from/--to are omitted, the script auto-detects the two latest tags.
The --ticket-pattern arg is repeatable. Pass one per pattern from
the playbook config. Default: [A-Z]+-\d+ (matches any JIRA/Linear-style ID).
The script outputs structured markdown with:
Also read the detailed commit messages for context:
git log <from_tag>..<to_tag> --no-merges --format="### %s%n%n%b%n---"
For feature PRs listed as "MISSING JTBDs":
Dev10x:jtbd in unattended mode with ticket ID and PR numberGenerated Job Stories for PRs missing them:
- TICKET-1: When ..., I want to ..., so I can ...
- TICKET-2: When ..., I want to ..., so I can ...
Approve these? (y/edit/n)
A. Group by business theme — cluster JTBDs by area. Themes emerge from the JTBDs themselves; don't force-fit.
B. Merge related JTBDs — multiple PRs for the same feature become a single narrative line.
C. Identify behavior changes — scan commit message bodies for:
Present any findings to the user before formatting.
D. Write a 2-3 sentence business summary:
Format depends on the configured output_target:
Standard markdown output to console.
Markdown formatted for GitHub release body. Post via:
gh release edit <TAG> --notes-file <NOTES_FILE>
Slack mrkdwn format with:
*bold* headers (not ##)• bullet lists<URL|text> links:emoji_name: gitmoji prefixesinclude_joke: true)Generate clickable links based on the ticket_links config.
Each entry maps a prefix to a URL template:
ticket_links:
PAY: "https://linear.app/team/issue/{id}"
TT: "https://org.atlassian.net/browse/{id}"
GH: "https://github.com/org/repo/issues/{number}"
The {id} placeholder is replaced with the full ticket ID (e.g., PAY-123).
The {number} placeholder is replaced with just the numeric part.
Post to the configured target. For Slack, write the formatted message
to a temp file and use the Slack posting mechanism. For GitHub, use
gh release edit. For stdout, just print.
/Dev10x:release-notes [--play release|hotfix] [--from TAG] [--to TAG]
--play: Which playbook play to use (default: release)--from/--to: Override auto-detected tags