From 4f05904c9b9eb0ccf89b4e79f803fcff5160c9d7 Mon Sep 17 00:00:00 2001 From: Louis Choquel Date: Wed, 9 Sep 2026 09:18:10 +0200 Subject: [PATCH] docs: say the release merges with a merge commit and the back-merge takes whichever shape dev earned The /release skill's Particulars claimed the back-merge is always a merge commit and never a fast-forward, which was true only while release branches were squashed into main. Under the merge-commit policy, main is a descendant of dev-at-the-cut, so /ledger-land's merge of origin/main into dev fast-forwards whenever nothing landed on dev after the cut, and makes a merge commit only when something did. The bullet now names both shapes and keeps the changelog as the one conflict to expect. Closes L-260908-78bb9c Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JjRK9NyFp4vsif7LAFQmYz --- .claude/skills/release/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index ba5b8e2..7a8d756 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -71,5 +71,5 @@ Nothing in CI checks that `uv.lock` agrees with `pyproject.toml`: no workflow ru - **The changelog heading carries the `v`** — `## [vX.Y.Z] - YYYY-MM-DD` — and it is load-bearing twice: `changelog-check.yml` greps for it, and `publish-pypi.yml` slices the GitHub Release notes between it and the next such heading. That slice drops blank lines and strips the leading whitespace from every body line, so nested bullets arrive flattened in the Release while the changelog itself is untouched. - **The tags are lightweight**, created as a side effect of `gh release create` rather than by `git tag -a`. Always pass `--tags` when reading them: bare `git describe` finds no annotated tag here and dies. - **The docs site republishes the changelog.** `docs/changelog.md` is a `pymdownx.snippets` include of the root file (`--8<-- "CHANGELOG.md"`, with `check_paths: true`), so the new entry reaches when `deploy-docs.yml` runs on the push to `main`. -- **The back-merge is a merge commit.** `dev` carries a `Merge branch 'main' into dev` after each release rather than a fast-forward; `/ledger-land` makes it, and the changelog is the one conflict it expects. +- **The release pull request merges into `main` with a merge commit, and the back-merge takes whichever shape `dev` earned.** `/ledger-land` merges `origin/main` into `dev`: a fast-forward when nothing landed on `dev` after the cut, a `Merge remote-tracking branch 'origin/main' into dev` commit when something did, and the changelog is the one conflict it expects. - **A release arms nothing downstream.** `ledger/ledger.toml` declares no `release_followups` for `cocode`, and the dependency arrow runs the other way: `pyproject.toml` pins `pipelex` with its extras to an exact version, so what a release ships against is whatever that pin says. Moving the pin is an ordinary change on `dev`, never part of the release commit.