pywf-oss-changelog-seed-repo
Seed repo only: bump the version this cookiecutter seed repo shares with its template repo, and write that version's section in release-history-seed-repo.rst, never in release-history.rst. Use in the
SKILL.md.claude/skills/pywf-oss-changelog-seed-repo/SKILL.md
GitHubThis repo is the seed repo of the cookiecutter template cookiecutter-pywf_open_source (the template repo). The template repo turns this repo into a template, so a change here is a change to every project generated afterwards. This skill bumps the shared version and writes its section in release-history-seed-repo.rst. It is never copied into the template.
Read ../pywf-oss-base/SKILL.md, then:
- ../pywf-oss-base/references/22-versioning-and-changelog.md, for the section format and the categories only
Rules
Two changelogs, two jobs.
File What it is Edited by a seed release? release-history-seed-repo.rstThis seed repo's own changelog yes, by this skill release-history.rstTemplate content: the starting changelog of every generated project never pywf-oss-changelog, and step 2 ofpywf-oss-release, write torelease-history.rst. In this repo, use this skill for that step instead.mise run syncin the template repo fails whenrelease-history.rsthas a section for the current version.One version for two repos.
versionin this repo'spyproject.tomlis the version of the template too. The template repo copies it onmise run sync, links every template release to its section here, and refuses to publish when the two differ. Never bump the version in the template repo.Seed-only files.
release-history-seed-repo.rstand this skill are listed inEXCLUDEof the template repo's.mise/tasks/make_template.py, so they stay out of the template. Thepywf-oss-*skills in the template never mention them.A released version is frozen. Never reuse a version that has a tag in this repo or in the template repo. Fix a bad release with a new PATCH version.
Every template release needs a new seed version. When a template release changes only the template repo (its parameterization or hooks), still bump the version here, and write a section with one Miscellaneous entry: "No changes to the seed; this version changes the template repo only."
Step 1: Gather state
git status --short # uncommitted work is invisible to git log
git describe --tags --abbrev=0 # last seed tag: the baseline
grep '^version' pyproject.toml # current version
git ls-remote --tags https://github.com/MacHu-GWU/cookiecutter-pywf_open_source # template tags
Tags older than 3.0.0 are from the time the seed had its own version. Show any uncommitted work, and ask for the user's yes to include it.
Step 2: Choose the version
Judge from the side of a person generating a project from the template, not from api.py: the sample package of the seed has no users.
| Level | When | Examples |
|---|---|---|
| MAJOR | Existing template input breaks: a cookiecutter variable is renamed, removed, or changes meaning, or the core toolchain of generated projects is replaced | rename a variable, switch the package manager |
| MINOR | Generated projects gain something, compatibly | a new mise task, docs page, CI step, or skill |
| PATCH | Fixes and small adjustments | fix a doc, upgrade a dependency, adjust a default |
The new version must be above the current version, the last seed tag, and the last template tag. Propose the level with a one-line reason, then apply it after the user's yes: edit pyproject.toml, then mise run inst, so the bump changes exactly pyproject.toml and uv.lock.
Step 3: Read the changes
git log <last_tag>..HEAD --oneline
git diff <last_tag>..HEAD --stat
Read the diffs of whatever changed: skills, mise tasks, CI, docs, dependencies, sample code. They are the ground truth.
Step 4: Write the section
- Insert
VERSION (YYYY-MM-DD)with today's date directly below thex.y.z (Backlog)block, or correct the section if it exists. Never edit the Backlog. - Follow the format and the category order of
22-versioning-and-changelog.md. - Write each entry as what a newly generated project gets or loses, not which seed file changed.
- Keep the heading exactly
VERSION (YYYY-MM-DD): the template repo builds its link to this section from that heading, such as#300-2026-10-23for3.0.0 (2026-10-23).
Edit the file directly: it is tracked by git.
Next steps
In this order; each public step needs the user's yes:
- This repo:
mise run cov,mise run lint, andmise run build-docpass. - Template repo:
mise run e2epasses (it regenerates the template from this working tree, checks it, and runs a generated project'scovandbuild-doc); the user reviews the artifact diff there. - This repo: commit and push to
main, thenmise run publishandmise run release, the same as steps 4 to 6 ofpywf-oss-release. The tag<version>is what the template's changelog links to. - Template repo:
/cctpl-release-cn.