From b77d5618cd345cf9fcfdd4c982e6c226016e4d48 Mon Sep 17 00:00:00 2001 From: Test Date: Tue, 3 Nov 2026 13:40:19 -0500 Subject: [PATCH] chore(release): specfuse-loop 0.32.0 Co-Authored-By: Claude Opus 5.5 --- .specfuse/VERSION | 2 +- CHANGELOG.md | 20 +++++++++++++++++++ ...he-roadmap-lint-checks-a-blocked-by-fra.md | 5 ----- ...lose-discipline-3-and-fix-bug-tell-agen.md | 5 ----- ...ds-migrate-all-apply-rewrites-the-trace.md | 5 ----- ...n-fragments-mode-each-entry-is-a-change.md | 5 ----- ...ew-changelog-fragments-verification-gat.md | 5 ----- ...new-changelog-mode-single-fragments-key.md | 5 ----- ...ew-python3-m-specfuse-loop-changelog-fr.md | 5 ----- ...cripts-bump-version-py-release-folds-ch.md | 5 ----- ...he-close-k-requirement-specfuse-lint-cl.md | 5 ----- pyproject.toml | 2 +- specfuse/loop/data/VERSION | 2 +- specfuse/loop/loop.py | 2 +- 14 files changed, 24 insertions(+), 49 deletions(-) delete mode 100644 changelog.d/3567-the-roadmap-lint-checks-a-blocked-by-fra.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-close-discipline-3-and-fix-bug-tell-agen.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-ids-migrate-all-apply-rewrites-the-trace.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-in-fragments-mode-each-entry-is-a-change.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-new-changelog-fragments-verification-gat.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-new-changelog-mode-single-fragments-key.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-new-python3-m-specfuse-loop-changelog-fr.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-scripts-bump-version-py-release-folds-ch.md delete mode 100644 changelog.d/FEAT-LOOP-2026-0249-the-close-k-requirement-specfuse-lint-cl.md diff --git a/.specfuse/VERSION b/.specfuse/VERSION index f176c944..9eb2aa3f 100644 --- a/.specfuse/VERSION +++ b/.specfuse/VERSION @@ -1 +1 @@ -0.31.1 +0.32.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ccc3c23..a82d29bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,26 @@ Entries below cover only work landing from FEAT-2026-0064 onward. ## [Unreleased] +## [0.32.0+umbrella.0.17.0] - 2026-11-03 + +### Fixed + +- The roadmap lint checks a Blocked-by fragment into a YAML or JSON decision file when `decisions.entryKey` names the key holding each entry id; without the key, behavior is unchanged. (#3567) + +### Changed + +- close-discipline §3 and `/fix-bug` tell agents to run `changelog_fragments add` instead of hand-editing `CHANGELOG.md`. (FEAT-LOOP-2026-0249) +- `ids migrate --all --apply` rewrites the `trace` of a `changelog.d/` fragment to the new ID; filenames are left unchanged. (FEAT-LOOP-2026-0249) +- `scripts/bump_version.py` `release()` folds `changelog.d/` fragments into `Unreleased` before stamping and removes them afterward, all-or-nothing; adopter release scripts must call `collate` before stamping. (FEAT-LOOP-2026-0249) +- The `close-k` requirement, `specfuse lint --closing` and the terminal auto-close guard accept an entry in `CHANGELOG.md` or a valid `changelog.d/` fragment through one shared reader; refusals name both locations. (FEAT-LOOP-2026-0249) + +### Added + +- In `fragments` mode each entry is a `changelog.d/-.md` file (`class` and `trace` in frontmatter, one-line body), so concurrent PRs no longer conflict on `CHANGELOG.md`. (FEAT-LOOP-2026-0249) +- New `changelog-fragments` verification gate runs `changelog_fragments check` and fails on a malformed fragment at PR time; adopters add the same gate to their own `verification.yml`. (FEAT-LOOP-2026-0249) +- New `changelog.mode: single | fragments` key in `.specfuse/layout.yml`; absent means `single`, any other value fails `layout validate`. (FEAT-LOOP-2026-0249) +- New `python3 -m specfuse.loop.changelog_fragments` CLI with `add`, `collate` and `check` subcommands; `add` is the one writer and routes by `changelog.mode`. (FEAT-LOOP-2026-0249) + ## [0.31.1+umbrella.0.17.0] - 2026-10-30 ### Fixed diff --git a/changelog.d/3567-the-roadmap-lint-checks-a-blocked-by-fra.md b/changelog.d/3567-the-roadmap-lint-checks-a-blocked-by-fra.md deleted file mode 100644 index 72000261..00000000 --- a/changelog.d/3567-the-roadmap-lint-checks-a-blocked-by-fra.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: fixed -trace: #3567 ---- -The roadmap lint checks a Blocked-by fragment into a YAML or JSON decision file when `decisions.entryKey` names the key holding each entry id; without the key, behavior is unchanged. diff --git a/changelog.d/FEAT-LOOP-2026-0249-close-discipline-3-and-fix-bug-tell-agen.md b/changelog.d/FEAT-LOOP-2026-0249-close-discipline-3-and-fix-bug-tell-agen.md deleted file mode 100644 index fd903761..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-close-discipline-3-and-fix-bug-tell-agen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: changed -trace: FEAT-LOOP-2026-0249 ---- -close-discipline §3 and `/fix-bug` tell agents to run `changelog_fragments add` instead of hand-editing `CHANGELOG.md`. diff --git a/changelog.d/FEAT-LOOP-2026-0249-ids-migrate-all-apply-rewrites-the-trace.md b/changelog.d/FEAT-LOOP-2026-0249-ids-migrate-all-apply-rewrites-the-trace.md deleted file mode 100644 index 0a04279d..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-ids-migrate-all-apply-rewrites-the-trace.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: changed -trace: FEAT-LOOP-2026-0249 ---- -`ids migrate --all --apply` rewrites the `trace` of a `changelog.d/` fragment to the new ID; filenames are left unchanged. diff --git a/changelog.d/FEAT-LOOP-2026-0249-in-fragments-mode-each-entry-is-a-change.md b/changelog.d/FEAT-LOOP-2026-0249-in-fragments-mode-each-entry-is-a-change.md deleted file mode 100644 index 129766b5..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-in-fragments-mode-each-entry-is-a-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: added -trace: FEAT-LOOP-2026-0249 ---- -In `fragments` mode each entry is a `changelog.d/-.md` file (`class` and `trace` in frontmatter, one-line body), so concurrent PRs no longer conflict on `CHANGELOG.md`. diff --git a/changelog.d/FEAT-LOOP-2026-0249-new-changelog-fragments-verification-gat.md b/changelog.d/FEAT-LOOP-2026-0249-new-changelog-fragments-verification-gat.md deleted file mode 100644 index d15a8776..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-new-changelog-fragments-verification-gat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: added -trace: FEAT-LOOP-2026-0249 ---- -New `changelog-fragments` verification gate runs `changelog_fragments check` and fails on a malformed fragment at PR time; adopters add the same gate to their own `verification.yml`. diff --git a/changelog.d/FEAT-LOOP-2026-0249-new-changelog-mode-single-fragments-key.md b/changelog.d/FEAT-LOOP-2026-0249-new-changelog-mode-single-fragments-key.md deleted file mode 100644 index 84fe2f36..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-new-changelog-mode-single-fragments-key.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: added -trace: FEAT-LOOP-2026-0249 ---- -New `changelog.mode: single | fragments` key in `.specfuse/layout.yml`; absent means `single`, any other value fails `layout validate`. diff --git a/changelog.d/FEAT-LOOP-2026-0249-new-python3-m-specfuse-loop-changelog-fr.md b/changelog.d/FEAT-LOOP-2026-0249-new-python3-m-specfuse-loop-changelog-fr.md deleted file mode 100644 index d2447d48..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-new-python3-m-specfuse-loop-changelog-fr.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: added -trace: FEAT-LOOP-2026-0249 ---- -New `python3 -m specfuse.loop.changelog_fragments` CLI with `add`, `collate` and `check` subcommands; `add` is the one writer and routes by `changelog.mode`. diff --git a/changelog.d/FEAT-LOOP-2026-0249-scripts-bump-version-py-release-folds-ch.md b/changelog.d/FEAT-LOOP-2026-0249-scripts-bump-version-py-release-folds-ch.md deleted file mode 100644 index 66fc656a..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-scripts-bump-version-py-release-folds-ch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: changed -trace: FEAT-LOOP-2026-0249 ---- -`scripts/bump_version.py` `release()` folds `changelog.d/` fragments into `Unreleased` before stamping and removes them afterward, all-or-nothing; adopter release scripts must call `collate` before stamping. diff --git a/changelog.d/FEAT-LOOP-2026-0249-the-close-k-requirement-specfuse-lint-cl.md b/changelog.d/FEAT-LOOP-2026-0249-the-close-k-requirement-specfuse-lint-cl.md deleted file mode 100644 index 93062704..00000000 --- a/changelog.d/FEAT-LOOP-2026-0249-the-close-k-requirement-specfuse-lint-cl.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -class: changed -trace: FEAT-LOOP-2026-0249 ---- -The `close-k` requirement, `specfuse lint --closing` and the terminal auto-close guard accept an entry in `CHANGELOG.md` or a valid `changelog.d/` fragment through one shared reader; refusals name both locations. diff --git a/pyproject.toml b/pyproject.toml index 3472f7e0..3ce53cd4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "specfuse-loop" -version = "0.31.1" +version = "0.32.0" description = "Local-first executor for the Specfuse Plan + Work Unit gate-cycle methodology." readme = "README.md" requires-python = ">=3.10" diff --git a/specfuse/loop/data/VERSION b/specfuse/loop/data/VERSION index f176c944..9eb2aa3f 100644 --- a/specfuse/loop/data/VERSION +++ b/specfuse/loop/data/VERSION @@ -1 +1 @@ -0.31.1 +0.32.0 diff --git a/specfuse/loop/loop.py b/specfuse/loop/loop.py index d71e1f3b..7d48fbd2 100644 --- a/specfuse/loop/loop.py +++ b/specfuse/loop/loop.py @@ -135,7 +135,7 @@ REPO_ROOT = SPECFUSE_DIR.parent FEATURES_DIR = SPECFUSE_DIR / "features" VERIFICATION_PATH = SPECFUSE_DIR / "verification.yml" -DRIVER_VERSION = "0.31.1" +DRIVER_VERSION = "0.32.0" # Oldest scaffold layout this driver can drive. init.sh stamps the scaffold's own # version into `.specfuse/VERSION`; check_scaffold_version() fails loud at startup if # the consumer's scaffold is older than this, pointing at `specfuse upgrade`. Bump