Skip to content

Commit d6bc37f

Browse files
docs: polish RELEASING.md for review feedback and sync SECURITY to 0.2.0
1 parent d317966 commit d6bc37f

2 files changed

Lines changed: 27 additions & 18 deletions

File tree

RELEASING.md

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# Releasing
22

3-
Manual release flow for claude-code-chat-browser. A release is an annotated git tag plus a GitHub Release with notes. No CI publish workflow, and no wheel, npm package, or other artifact.
3+
Manual release flow for claude-code-chat-browser. A release is a git tag plus a GitHub Release with notes. No CI publish workflow, and no wheel, npm package, or other artifact.
44

5-
`v0.1.0` (2026-06-18) is the only shipped tag so far. `v0.2.0` is in progress; these steps describe that cut.
5+
`v0.1.0` (2026-06-18) and `v0.2.0` (2026-07-30) are the shipped tags so far. The steps below apply to the next cut.
66

77
## Version source
88

99
The release version is `__version__` in `app.py` line 3. There is no `pyproject.toml` version field.
1010

11-
`SECURITY.md` line 5 names the version again in the supported-versions blurb (`(currently \`...\`)`). Keep it in sync with `app.py` on every release. `README.md` links to that page for supported versions.
11+
`SECURITY.md` line 5 repeats that version in the supported-versions blurb. Update it whenever you bump `app.py`. `README.md` points readers at that page.
1212

13-
Between tagged releases, `master` may use a `.dev0` suffix (for example `0.2.0.dev0` while `0.2.0` was in development). The shipped tag drops `.dev0`.
13+
Between tagged releases, `master` may use a `.dev0` suffix (for example `0.3.0.dev0` while the next release is in flight). The shipped tag drops `.dev0`.
1414

1515
## Pre-release checklist
1616

@@ -20,54 +20,63 @@ Between tagged releases, `master` may use a `.dev0` suffix (for example `0.2.0.d
2020

2121
## Release checklist
2222

23-
Do the changelog in one PR and the version bump in a second PR, or combine them on a `release/vX.Y.Z` branch. The `v0.2.0` cut used two PRs: changelog first (`docs/changelog-0-2-0`), then the bump (`release/v0.2.0`).
23+
Do the changelog in one PR and the version bump in a second PR, or combine them on a `release/vX.Y.Z` branch. For `v0.2.0` we used two PRs: changelog first (`docs/changelog-0-2-0`), then the bump (`release/v0.2.0`).
2424

2525
1. Edit [CHANGELOG.md](CHANGELOG.md) ([Keep a Changelog](https://keepachangelog.com/en/1.1.0/)):
2626
- Move everything under `## [Unreleased]` into a new `## [X.Y.Z] - YYYY-MM-DD` section with `### Added`, `### Changed`, `### Deprecated`, `### Fixed`, `### Removed`, or `### Security` as needed.
2727
- Leave `## [Unreleased]` empty.
2828
- Update the footer compare links: `[Unreleased]``vX.Y.Z...HEAD`, add `[X.Y.Z]``vPREVIOUS...vX.Y.Z`.
2929
2. On a branch from current `master`, set `app.py` line 3 to the release version without `.dev0` (for example `"0.2.0"`).
30-
3. Update [SECURITY.md](SECURITY.md) line 5 so `(currently \`...\`)` matches that version (for example `(currently \`0.2.0\`)`). Leave the table at lines 7-10 unchanged.
31-
4. From the repo root, grep for stale version strings (the previous `.dev0` suffix, the old `SECURITY.md` parenthetical, or any other doc that still names the prior release):
30+
3. Update [SECURITY.md](SECURITY.md) line 5 so the "(currently ...)" parenthetical matches that version (for example `(currently 0.2.0)`). Leave the table at lines 7-10 unchanged.
31+
4. From the repo root, grep for stale version strings (`.dev0` suffixes, the old SECURITY.md parenthetical, or the previous shipped release):
3232
```sh
33-
git grep -nE '\.dev0|\(currently `'
33+
PREVIOUS=0.2.0
34+
PREVIOUS_ESC=$(echo "$PREVIOUS" | sed 's/[.]/\\&/g')
35+
git grep -nE "\.dev0|\(currently \`|${PREVIOUS_ESC}"
3436
```
35-
Update any hits that should name the new release (for example `docs/deprecation-policy.md`).
37+
Point `PREVIOUS` at the release you are replacing (no `v` prefix). Fix any hits that should name the new version (for example `docs/deprecation-policy.md`).
3638
5. Open a PR, get review, merge to `master`.
37-
6. Tag the merge commit:
39+
6. Tag the merge commit (lightweight tag, same as `v0.1.0` and `v0.2.0`):
3840
```sh
3941
git checkout master
4042
git pull
41-
git tag -a vX.Y.Z -m "vX.Y.Z"
43+
git tag vX.Y.Z
4244
git push origin vX.Y.Z
4345
```
4446
Tag format: `vMAJOR.MINOR.PATCH` (for example `v0.2.0`).
45-
7. Cut the GitHub Release after the tag. From the repo root, extract the body from `CHANGELOG.md`:
47+
7. Publish the GitHub Release after pushing the tag. From the repo root, extract the body from `CHANGELOG.md`:
4648
```sh
4749
cd "$(git rev-parse --show-toplevel)"
4850
VERSION=0.2.0 # no leading v; not the literal X.Y.Z placeholder
4951
VERSION="${VERSION#v}"
5052
case "$VERSION" in
51-
*[!0-9.]*|*.*.*.*|'') echo "error: VERSION must look like 0.2.0" >&2; exit 1 ;;
53+
*[!0-9.]*|'') echo "error: VERSION must look like 0.2.0" >&2; exit 1 ;;
54+
*..*|.*|*.) echo "error: VERSION must look like 0.2.0" >&2; exit 1 ;;
55+
*.*.*.*) echo "error: VERSION must look like 0.2.0" >&2; exit 1 ;;
56+
*.*.*) ;;
57+
*) echo "error: VERSION must look like 0.2.0" >&2; exit 1 ;;
5258
esac
5359
NOTES="$(mktemp)"
5460
trap 'rm -f "$NOTES"' EXIT
5561
awk -v ver="$VERSION" '
62+
BEGIN { heading = "## [" ver "]" }
5663
/^## \[/ {
5764
if (found) exit
58-
if ($0 ~ "^## \\[" ver "\\]") { found=1; next }
65+
if (index($0, heading) == 1) { found=1 }
5966
}
6067
/^\[[^]]+\]:/ { if (found) exit }
6168
found { print }
6269
' CHANGELOG.md >"$NOTES"
63-
[ -s "$NOTES" ] || { echo "error: no CHANGELOG.md section for $VERSION" >&2; exit 1; }
70+
grep -q '[^[:space:]]' "$NOTES" || { echo "error: no CHANGELOG.md section for $VERSION" >&2; exit 1; }
6471
gh release create "v${VERSION}" --title "v${VERSION}" --verify-tag --notes-file "$NOTES"
6572
```
66-
On macOS, Linux, and Git Bash, `mktemp` works. Or paste the section in the GitHub UI (skip the `## [X.Y.Z]` heading; the title is already set).
73+
Append a footer line after extraction, matching prior releases:
74+
`**Full changelog:** https://github.com/cppalliance/claude-code-chat-browser/blob/vX.Y.Z/CHANGELOG.md`
75+
On macOS, Linux, and Git Bash, `mktemp` works. Or paste the `[X.Y.Z]` section in the GitHub UI and add the same footer link.
6776

6877
## After release
6978

70-
1. On `master`, bump `app.py` `__version__` to the next development suffix if you are starting the next cycle (for example `0.3.0.dev0` after shipping `0.2.0`). Put that commit in `CHANGELOG.md` under `[Unreleased]` only when there is user-visible work; a bare dev bump can ride with the next feature PR.
79+
1. On `master`, bump `app.py` `__version__` to the next development suffix when you start the next cycle (for example `0.3.0.dev0` after shipping `0.2.0`). Put that commit in `CHANGELOG.md` under `[Unreleased]` only when there is user-visible work; a bare dev bump can ride with the next feature PR.
7180
2. New work goes under `## [Unreleased]` until the next release.
7281

7382
## References

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Supported Versions
44

5-
This project is pre-release. Security fixes are applied to the **latest `master` branch only** (currently `0.1.0.dev0`).
5+
This project is pre-release. Security fixes are applied to the **latest `master` branch only** (currently `0.2.0`).
66

77
| Version | Supported |
88
| -------------- | --------- |

0 commit comments

Comments
 (0)