changelog
Create or update CHANGELOG entries with tone guardrails, thematic grouping, and implementation-detail leak detection.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Create or update CHANGELOG entries with tone guardrails, thematic grouping, and implementation-detail leak detection.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Add a dependency relationship between GitHub issues using the native addBlockedBy mutation
Reusable file sequence numbering with prefix (NNNN-name) and suffix (name-NNNN) modes. Returns the next available zero-padded sequence number for a given directory.
Drop a timestamped note for the current issue - collected by /finish-issue for PR descriptions
Delete an issue's working directory (.claude-work/issues/<ID>/) after confirming with the user via interactive prompt
Create a commit message file in .claude-work/commit-msgs/ with auto-numbered filenames. Focuses on WHY not WHAT. The diff already shows what changed. User reviews and commits manually.
Create a GitHub issue from a file draft or inline description, with smart label discovery and sub-issue linking
| name | changelog |
| version | 2026.07.27@6dc7d1d |
| description | Create or update CHANGELOG entries with tone guardrails, thematic grouping, and implementation-detail leak detection. |
| argument-hint | <description> |
| allowed-tools | Read, Edit, Bash(git log *), Bash(git diff *), Bash(git branch --show-current), AskUserQuestion |
Create a CHANGELOG entry with built-in guardrails for tone, placement, and detail-leak detection. Writes directly to CHANGELOG.md. The user reviews via git diff before committing.
Input: $ARGUMENTS (a short description of the change, e.g. "binding survives language-mode changes")
Find the target CHANGELOG.md using git diff to determine which part of the project has changes:
git diff --name-only to see changed filespackages/foo/), look for a CHANGELOG.md in that directory firstAskUserQuestion which one to targetIf no CHANGELOG.md exists anywhere, STOP: "No CHANGELOG.md found. Create one first."
Read the target CHANGELOG.md and the project's CLAUDE.md (if it exists) to understand:
## [1.2.3] or ## [Unreleased], often with a preamble referencing semver.org or Keep a Changelog## 2026.03.19, often with a preamble referencing calver.org### Added, ### Changed, ### Fixed, ### Removed (Keep a Changelog style). Some projects use different categories. Match what exists.Also check the project's CLAUDE.md for any explicit CHANGELOG conventions (heading format, link style, category rules). CLAUDE.md overrides inferred conventions.
Auto-detect the most likely category from context:
| Signal | Category |
|---|---|
New files added (git diff --name-status shows A) | Added |
| Bug fix (issue labels, commit messages mentioning "fix") | Fixed |
| Deleted files or removed features | Removed |
| Everything else | Changed |
If the detection is confident (clear signal from the table above), proceed without prompting.
If ambiguous (e.g., a file was both added and modified, or the change could be "Added" or "Changed"), confirm with AskUserQuestion:
AskUserQuestion(
question: "Which CHANGELOG category for this entry?",
header: "Category",
options: [
{ label: "Changed (Recommended)", description: "Modifications to existing behavior" },
{ label: "Added", description: "New features or files" },
{ label: "Fixed", description: "Bug fixes" },
{ label: "Removed", description: "Deleted features" }
]
)
Reorder options so the auto-detected category appears first with "(Recommended)".
Determine where to place the entry based on the versioning scheme detected in Step 2:
SemVer projects (with [Unreleased] section):
## [Unreleased] section exists, place the entry there. This is the standard SemVer workflow for in-progress changes.[Unreleased] section exists, create one above the most recent versioned heading.CalVer projects (date-based headings):
2026.03.19 exists → 2026.03.19.1; 2026.03.19.1 exists → 2026.03.19.2).Other schemes:
AskUserQuestion.Newest entries go at the top. Version headings must appear in strict descending order — the most recent release at the top of the file, the oldest at the bottom. For CalVer: within the same calendar date, higher micro suffixes are newer and come first (e.g., 2026.07.14.2 above 2026.07.14.1 above 2026.07.14). For SemVer: within the same minor version, higher patch versions are newer and come first (e.g., [1.2.3] above [1.2.2] above [1.2.1]). When adding a new heading, insert it above all older headings — never append to the bottom. After writing, verify with grep '^## ' CHANGELOG.md | head -20. The output must print headings in descending order. If they are out of order, re-sort before presenting to the user.
Write the entry following the tone rules (see Tone Rules section below). The entry should:
Each bullet covers a single distinct change. When a PR or issue includes multiple unrelated changes, write separate bullets. Do not chain them together with periods or semicolons into a single entry. The "one sentence" rule is per change, not per category subsection.
Before drafting, read 3-5 recent entries in the CHANGELOG to match the project's voice and formatting conventions.
Scan the draft entry against the blocklist patterns (see Implementation-Detail Blocklist section). For each match:
Possible implementation detail: "<matched text>" Consider rephrasing in user-facing termsIf no matches, proceed silently.
Scan the entries in the target section's category subsection for thematic proximity:
When creating a new version heading, placement is straightforward. The entry is the first in its subsection.
Show the user what will be written and where:
File: packages/foo/CHANGELOG.md
Category: ### Changed
Heading: ## [Unreleased]
Placement: after "existing related entry text..." (thematic match)
Entry:
- Search results now highlight matched terms ([#42](https://github.com/org/repo/issues/42))
Then write the entry to CHANGELOG.md using the Edit tool.
These rules ensure entries describe what users experience, not how the code works internally.
Good (SemVer project, a task management app):
- Search results now highlight matched terms in the preview pane ([#42](https://github.com/acme/taskflow/issues/42))
Bad (same change, leaking implementation):
- Added ElasticSearch highlight fragments to SearchResultDTO and mapped them through the PreviewRenderer pipeline with dangerouslySetInnerHTML for term emphasis ([#42](https://github.com/acme/taskflow/issues/42))
Good (CalVer project, a CLI tool):
- `deploy` command now retries on transient network errors instead of failing immediately ([issues/87](https://github.com/acme/shipit/issues/87))
Bad (same change, leaking implementation):
- Wrapped the HTTP client's POST call in a retry loop with exponential backoff using the got library's retry option with a maxRetryAfter of 30000ms and calculateDelay hook ([issues/87](https://github.com/acme/shipit/issues/87))
Flag entries containing these patterns. Emit a warning and allow the entry. Rare edge cases may legitimately include a technical name.
| Pattern | Why it's flagged |
|---|---|
onDid, onWill | Event handler names (VS Code, etc.) |
setTimeout, setInterval, requestAnimationFrame | Timer/scheduling implementation details |
mock, stub, spy | Test infrastructure, not user-facing |
listener, handler, callback, middleware | Internal architecture |
PascalCase words that aren't feature names | Likely class/type names (e.g., SearchResultDTO, PreviewRenderer) |
flag, isFoo, hasFoo | Internal boolean state |
Event name patterns (Event, Emitter, dispatch) | Internal pub/sub details |
Library-internal APIs (dangerouslySetInnerHTML, useEffect, __dirname) | Framework internals |
Before placing an entry, scan the target subsection for thematic proximity:
Place the new entry after the last thematic match in the subsection. If no match exists, append at the end.
See /prose-style for hard-wrap and GitHub-reference rules.
Before writing the entry, skim the text for AI-writing tells: em dashes, filler phrases (in order to, due to the fact that), vague attributions, generic positive conclusions. Rewrite any you find.