main is still marked 1.3.0, but a large amount has merged since the v1.3.0 tag — the whole ssh-mcp/ServerSpec cut (migration, sidecar detect/edit, version pin, permission pre-flight, hot-reload) plus the Catalog Console, light theme, a visible update checker, move-to-env, and cross-client phase 1. The next release is a meaty 1.4.0 (all additive — a minor bump).
The framing that matters
The [Unreleased] section leads with a callout that the breaking change is upstream ssh-mcp v2 (removed flags + a config.toml that overrides args), and that BCC itself has no breaking changes — so a BCC user reading the changelog isn't scared into thinking their configs broke.
Contents
[Unreleased] — everything since v1.3.0, grouped Added / Changed / Fixed / Internal, in plain language.
Backfill of 1.0.0–1.3.0 summarised from the tags (dates verified via git log).
A one-line convention in the header: add a line under [Unreleased] in each PR; at release, rename that section to the version + date and start a fresh [Unreleased].
Release step (for when 1.4.0 is cut)
Rename [Unreleased] → ## [1.4.0] — <date>, bump __version__ + pyproject.toml to 1.4.0, then push the v1.4.0 tag (release.yml builds the three platforms). Docs-only change; no code touched.
Starts a per-release changelog, as discussed.
## Why now
`main` is still marked **1.3.0**, but a large amount has merged since the v1.3.0 tag — the whole ssh-mcp/ServerSpec cut (migration, sidecar detect/edit, version pin, permission pre-flight, hot-reload) plus the Catalog Console, light theme, a visible update checker, move-to-env, and cross-client phase 1. The next release is a meaty **1.4.0** (all additive — a minor bump).
## The framing that matters
The `[Unreleased]` section leads with a callout that the **breaking** change is upstream **ssh-mcp v2** (removed flags + a `config.toml` that overrides args), and that **BCC itself has no breaking changes** — so a BCC user reading the changelog isn't scared into thinking their configs broke.
## Contents
- `[Unreleased]` — everything since v1.3.0, grouped Added / Changed / Fixed / Internal, in plain language.
- Backfill of `1.0.0`–`1.3.0` summarised from the tags (dates verified via `git log`).
- A one-line convention in the header: **add a line under `[Unreleased]` in each PR**; at release, rename that section to the version + date and start a fresh `[Unreleased]`.
## Release step (for when 1.4.0 is cut)
Rename `[Unreleased]` → `## [1.4.0] — <date>`, bump `__version__` + `pyproject.toml` to `1.4.0`, then push the `v1.4.0` tag (release.yml builds the three platforms). Docs-only change; no code touched.
Starts a per-release changelog. The Unreleased section captures everything
merged since v1.3.0 (ssh-mcp v2 support, sidecar detect/edit, version pin,
permission pre-flight, hot-reload, light theme, visible update checker,
move-to-env, cross-client phase 1) with the ssh-mcp-is-breaking-upstream /
BCC-is-additive distinction called out. Past releases backfilled from tags.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Starts a per-release changelog, as discussed.
Why now
mainis still marked 1.3.0, but a large amount has merged since the v1.3.0 tag — the whole ssh-mcp/ServerSpec cut (migration, sidecar detect/edit, version pin, permission pre-flight, hot-reload) plus the Catalog Console, light theme, a visible update checker, move-to-env, and cross-client phase 1. The next release is a meaty 1.4.0 (all additive — a minor bump).The framing that matters
The
[Unreleased]section leads with a callout that the breaking change is upstream ssh-mcp v2 (removed flags + aconfig.tomlthat overrides args), and that BCC itself has no breaking changes — so a BCC user reading the changelog isn't scared into thinking their configs broke.Contents
[Unreleased]— everything since v1.3.0, grouped Added / Changed / Fixed / Internal, in plain language.1.0.0–1.3.0summarised from the tags (dates verified viagit log).[Unreleased]in each PR; at release, rename that section to the version + date and start a fresh[Unreleased].Release step (for when 1.4.0 is cut)
Rename
[Unreleased]→## [1.4.0] — <date>, bump__version__+pyproject.tomlto1.4.0, then push thev1.4.0tag (release.yml builds the three platforms). Docs-only change; no code touched.