Skip to content

Commit bb67bf6

Browse files
Alan Shumclaude
andcommitted
chore: remove changelog from README, simplify release skill
Changelog lives in GitHub Releases. Release skill streamlined to 7 steps: version bump, build/test, crates.io, commit, gh release, verify. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 75a881f commit bb67bf6

File tree

2 files changed

+36
-182
lines changed

2 files changed

+36
-182
lines changed

.claude/skills/release.md

Lines changed: 36 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,71 @@
11
# Release semantic-diff
22

3-
Publish a new version of semantic-diff with consistent versioning across all distribution channels: Cargo.toml, crates.io, GitHub release (with tag), and Homebrew tap.
3+
Publish a new version to crates.io, GitHub Releases, and Homebrew (via CI).
44

55
## Usage
66

77
```
88
/release [version]
99
```
1010

11-
- `version` — optional, e.g. `0.4.0`. If omitted, prompt the user.
11+
If version is omitted, check current version and ask user.
1212

1313
## Steps
1414

1515
### 1. Determine version
1616

17-
If no version argument provided, check current version and ask user:
1817
```bash
19-
cd /Users/kshum/Documents/gitproj/semantic-diff && grep '^version' Cargo.toml
18+
grep '^version' Cargo.toml
19+
git tag -l 'v*' | sort -V | tail -3
2020
```
2121

22-
### 2. Version consistency check (MANDATORY)
22+
### 2. Update Cargo.toml
2323

24-
Before making any changes, audit all version sources and report mismatches:
24+
Edit `version = "..."` to the new version. Run `cargo build` to update Cargo.lock.
2525

26-
```bash
27-
echo "=== Cargo.toml ===" && grep '^version' Cargo.toml
28-
echo "=== Git tags (local) ===" && git tag -l 'v*' | sort -V | tail -5
29-
echo "=== Git tags (remote) ===" && git ls-remote --tags origin 'refs/tags/v*' | awk '{print $2}' | sed 's|refs/tags/||' | sort -V | tail -5
30-
echo "=== GitHub releases ===" && gh release list --limit 5
31-
echo "=== crates.io ===" && cargo search semantic-diff --limit 1 2>/dev/null || echo "(unable to check)"
32-
```
33-
34-
**All of these must align for the target version before the release is considered complete:**
35-
- `Cargo.toml` version matches `<VERSION>`
36-
- Git tag `v<VERSION>` exists locally and on remote
37-
- GitHub release `v<VERSION>` exists with curated notes
38-
- crates.io has `<VERSION>` published
39-
- CI workflow triggered (builds binaries + updates Homebrew tap)
40-
41-
If previous releases have mismatches (e.g., GitHub release exists but no git tag, or crates.io is behind), **report them to the user** and offer to fix before proceeding with the new release.
42-
43-
### 3. Update Cargo.toml version
44-
45-
Edit the `version = "..."` line in `Cargo.toml` to the new version. Skip if already correct.
46-
47-
### 4. Add changelog entry to README (MANDATORY — must be in the release commit)
48-
49-
**This step MUST happen before the commit in Step 7.** The changelog is part of the release commit, not a follow-up.
50-
51-
1. Find the previous release tag:
52-
```bash
53-
git tag -l 'v*' | sort -V | tail -1
54-
```
26+
### 3. Build and test
5527

56-
2. Get all changes since the last tag:
5728
```bash
58-
git log --oneline <previous_tag>..HEAD
59-
```
60-
61-
3. Read the `## Changelog` section in `README.md` and add a new `### v<VERSION>` entry **above** the previous version.
62-
63-
4. Write human-readable bullet points grouped by theme (features, fixes, perf). Format:
64-
```markdown
65-
### v<VERSION>
66-
67-
- **Feature name** — One-sentence description of what it does and why.
68-
- **Fix** — What was broken and how it's fixed.
29+
cargo clippy -- -D warnings 2>&1
30+
cargo build --release 2>&1
31+
cargo test 2>&1
6932
```
7033

71-
5. Also update the config example block in README if any defaults or options changed.
72-
73-
**The README.md changes must be staged along with Cargo.toml in Step 7's commit.**
74-
75-
### 5. Verify the build
76-
77-
```bash
78-
cd /Users/kshum/Documents/gitproj/semantic-diff && cargo build --release 2>&1
79-
```
34+
All must pass before proceeding.
8035

81-
### 6. Publish to crates.io
36+
### 4. Publish to crates.io
8237

8338
```bash
84-
cd /Users/kshum/Documents/gitproj/semantic-diff && cargo publish 2>&1
39+
cargo publish 2>&1
8540
```
8641

87-
If this fails with an email verification error, tell the user to verify at https://crates.io/settings/profile.
42+
If this fails with email verification, tell user to verify at https://crates.io/settings/profile.
8843

89-
### 7. Commit, tag, and push
44+
### 5. Commit and push
9045

91-
Ensure the active `gh` account is `alankyshum`:
46+
Ensure `gh` is authenticated as `alankyshum` and remote uses HTTPS:
9247
```bash
9348
gh auth status
94-
```
95-
96-
If the active account is not `alankyshum`, switch:
97-
```bash
98-
gh auth switch --user alankyshum
99-
```
100-
101-
Ensure the remote uses HTTPS (so `gh` handles auth):
102-
```bash
10349
git remote set-url origin https://github.com/alankyshum/semantic-diff.git
10450
```
10551

106-
Commit the version bump, changelog, and any config doc updates together in a single release commit:
107-
```bash
108-
cd /Users/kshum/Documents/gitproj/semantic-diff && git add Cargo.toml Cargo.lock README.md && git commit -m "chore: release v<VERSION> with changelog"
109-
```
110-
111-
**Verify README.md is included** — if `git diff --cached README.md` shows no changes, Step 4 was skipped. Go back and add the changelog entry before committing.
112-
113-
Push to main:
52+
Commit version bump:
11453
```bash
115-
cd /Users/kshum/Documents/gitproj/semantic-diff && git push origin main
54+
git add Cargo.toml Cargo.lock
55+
git commit -m "chore: release v<VERSION>"
56+
git push origin main
11657
```
11758

118-
### 8. Create GitHub release with curated changelog
59+
### 6. Create GitHub release
11960

120-
Write release notes following this format — do NOT use `--generate-notes`:
61+
Write curated release notes from `git log --oneline <previous_tag>..HEAD`. Group by theme, not raw commits. Do NOT use `--generate-notes`.
12162

12263
```bash
12364
gh release create v<VERSION> --title "v<VERSION>" --notes "$(cat <<'EOF'
12465
## What's Changed
12566
126-
### <Feature Category 1>
127-
- Bullet point summarizing change
128-
129-
### <Feature Category 2>
130-
- Bullet point summarizing change
131-
132-
### Fixes
133-
- Bullet point for any fixes
67+
- **Feature** — Description
68+
- **Fix** — Description
13469
13570
## Install / Upgrade
13671
@@ -145,46 +80,27 @@ EOF
14580
)"
14681
```
14782

148-
Group changes by theme (e.g. "Adaptive Theme", "Docs & Community", "Fixes") rather than listing raw commits. Use `git log --oneline <previous_tag>..v<VERSION>` to see all changes. Write human-readable descriptions, not commit messages.
149-
150-
### 9. Post-release verification (MANDATORY)
151-
152-
After GitHub release is created, verify all channels are consistent:
153-
154-
```bash
155-
echo "=== Verify tag ===" && git fetch --tags && git tag -l "v<VERSION>"
156-
echo "=== Verify GitHub release ===" && gh release view "v<VERSION>" --json tagName,name --jq '.tagName + " " + .name'
157-
echo "=== Verify crates.io ===" && cargo search semantic-diff --limit 1
158-
echo "=== Verify CI triggered ===" && gh run list --limit 1
159-
```
160-
161-
If any channel is missing or mismatched, fix it before proceeding.
83+
This creates the git tag and triggers the release CI workflow which:
84+
1. Builds `aarch64-apple-darwin` and `x86_64-apple-darwin` binaries
85+
2. Uploads them to the GitHub release
86+
3. Auto-updates the Homebrew tap at `alankyshum/homebrew-tap`
16287

163-
### 10. Monitor CI
88+
### 7. Verify
16489

165-
The release workflow (`.github/workflows/release.yml`) auto-triggers on tag push (created by `gh release create`). It will:
166-
1. Build `aarch64-apple-darwin` and `x86_64-apple-darwin` binaries
167-
2. Upload them to the GitHub release
168-
3. Auto-update the Homebrew tap formula at `alankyshum/homebrew-tap`
169-
170-
Watch the workflow:
17190
```bash
172-
cd /Users/kshum/Documents/gitproj/semantic-diff && gh run list --limit 1
91+
echo "=== Tag ===" && git tag -l "v<VERSION>"
92+
echo "=== GitHub release ===" && gh release view "v<VERSION>" --json tagName,name --jq '.tagName + " " + .name'
93+
echo "=== crates.io ===" && cargo search semantic-diff --limit 1
94+
echo "=== CI ===" && gh run list --limit 1
17395
```
17496

175-
### 11. Report
176-
177-
Print summary with links and verification status:
178-
- Cargo.toml: `<VERSION>`
179-
- crates.io: https://crates.io/crates/semantic-diff ✓/✗
180-
- GitHub release: https://github.com/alankyshum/semantic-diff/releases/tag/v<VERSION> ✓/✗
181-
- Git tag: `v<VERSION>` ✓/✗
182-
- CI workflow: ✓/✗ (triggered / completed)
97+
Report summary:
98+
- crates.io: https://crates.io/crates/semantic-diff
99+
- GitHub release: https://github.com/alankyshum/semantic-diff/releases/tag/v<VERSION>
183100
- Homebrew: `brew install alankyshum/tap/semantic-diff` (updated by CI)
184101

185102
## Prerequisites
186103

187104
- `cargo login` authenticated with crates.io
188105
- `gh` CLI authenticated as `alankyshum`
189-
- Remote URL set to HTTPS (`https://github.com/alankyshum/semantic-diff.git`)
190106
- `HOMEBREW_TAP_TOKEN` secret set in `alankyshum/semantic-diff` repo

README.md

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -177,68 +177,6 @@ chmod +x ~/.claude/hooks/refresh-semantic-diff.sh
177177
5. AI groups the changed hunks by semantic meaning
178178
6. You see real-time, grouped changes without leaving the terminal
179179

180-
## Changelog
181-
182-
### v0.6.0
183-
184-
- **Untracked file support** — New (untracked) files are now discovered via `git ls-files --others --exclude-standard` and displayed alongside tracked changes. Shown with `[untracked]` badge in the diff view and `[U]` in the sidebar. Binary detection, 1MB size cap, and path traversal validation included.
185-
- **Smart path abbreviation** — Long file paths in the sidebar are automatically abbreviated to fit (e.g. `src/app/components/sales-assistant/routes.ts``s/a/c/s-a/routes.ts`). Filenames are always kept intact; only parent directories are shortened.
186-
- **Structural sampling for LLM** — Untracked files use head/mid/tail sampling (4 lines from each region) instead of showing just the first 4 lines, giving the LLM a better view of the file's purpose for grouping.
187-
- **Fast model defaults** — Default LLM model changed from `sonnet` to `haiku` (Claude) / `gemini-flash` (Copilot) for faster grouping. The classification task works well with fast models. Users can upgrade via `~/.config/semantic-diff.json`.
188-
189-
### v0.5.1
190-
191-
- **Fix** — Show only group-relevant hunks when selecting a file in the sidebar, instead of showing all hunks for that file.
192-
193-
### v0.5.0
194-
195-
- **Drop-in `git diff` replacement** — Use `semantic-diff` as a direct replacement for `git diff` with the same CLI arguments (`--staged`, `--cached`, revision ranges, path filters). Configure as `git config diff.external` for seamless integration.
196-
- **Incremental grouping** — Files are grouped progressively as LLM responses stream in, so you see organized results immediately instead of waiting for all files to be analyzed.
197-
- **Clippy lint fixes** — Clean up uninlined format args and `ptr_arg` warnings.
198-
199-
### v0.4.0
200-
201-
- **Adaptive dark/light theme** — Auto-detects terminal background color via OSC 11 protocol (supports iTerm2, Ghostty, kitty, WezTerm, Alacritty, xterm, VS Code terminal). Falls back to `COLORFGBG` env var. Override with `"theme": "dark"` or `"light"` in config.
202-
- **Light theme** — Full light-background palette with pastel diff colors, dark text, and blue accents for readability on white/light terminals.
203-
- **Terminal detection guards** — Skips background detection in CI, piped stdin, and `TERM=dumb` environments for zero startup overhead.
204-
205-
### v0.3.0
206-
207-
- **Security hardening** — Secure PID file management with atomic writes and ownership validation, path traversal protection in diff parser and config/cache paths, bounded LLM response reading with validated deserialization, UTF-8 safe truncation.
208-
- **Stdin-piped LLM invocation** — Prompts sent via stdin instead of command-line arguments to prevent process table exposure.
209-
- **Secure log file location** — Log file moved to a secure directory with restricted permissions.
210-
- **Integration test suite** — Added diff rendering, SIGUSR1 signal handling, large diff stress tests, and LLM integration tests.
211-
212-
### v0.2.3
213-
214-
- **Fix** — Resolve clippy warnings in config and LLM modules.
215-
216-
### v0.2.2
217-
218-
- **Fix** — Account for line wrapping in scroll offset calculation.
219-
- **Badges** — Added crates.io and Homebrew version badges to README.
220-
221-
### v0.2.1
222-
223-
- **Fix** — Remove non-functional cmux resize-pane call from hook.
224-
- **Docs** — Embed demo video in README.
225-
226-
### v0.2.0
227-
228-
- **Hunk-level semantic grouping** — Groups related hunks across files by intent, matching GitHub Copilot's content-level approach. A single file's hunks can appear in different groups.
229-
- **Multi-backend AI support** — Added GitHub Copilot CLI (`copilot --yolo`) as a fallback when Claude CLI is not available.
230-
- **Configuration file**`~/.config/semantic-diff.json` with JSONC comment support. Configure preferred AI backend, model per backend, with intelligent cross-backend model mapping (e.g. `gemini-flash``haiku`).
231-
- **Grouping cache** — Results cached in `.git/semantic-diff-cache.json` keyed by diff hash. Instant startup when diff hasn't changed.
232-
- **Group-aware diff filtering** — Selecting a file in the sidebar filters the diff to its entire group. Selecting a group header toggles the filter.
233-
- **Help overlay** — Press `?` to see all keybindings in a centered popup.
234-
- **Text wrapping** — Long diff lines wrap with the terminal width instead of being truncated.
235-
- **Improved key responsiveness** — Accept `Repeat` key events on macOS for smooth held-key navigation.
236-
- **Scroll-to-top on file select** — File header pinned to top of viewport when selected from sidebar.
237-
238-
### v0.1.0
239-
240-
- Initial release with file-level semantic grouping, syntax highlighting, collapse/expand, file tree sidebar, and Claude Code hook integration.
241-
242180
## Requirements
243181

244182
- Rust 1.75+

0 commit comments

Comments
 (0)