Follow-up to #52 (v1.23.2), which added a non-blocking advisory: forge-next-prep --promotion-status prints a ⚠️ when a pending minor lacks a ## vX.Y.0 entry in origin/dev's CHANGELOG.
This issue tracks the blocking variant — making a missing entry actually fail promotion (e.g. a changelog_entry pre-commit step on release/* branches, or a non-zero exit from a new --require-changelog flag).
Why separate / why MINOR: a new gate is a backward-incompatible behavior change for consumers (a new way for their pipeline to fail) → MINOR per CLAUDE.md semver policy. The advisory shipped as a patch; the gate needs a minor.
Spec: docs/release-process.md §5 (CHANGELOG at release) — currently documents the advisory; promote to a hard rule when this lands.
Requires: a decision on the gate surface (pre-commit step vs CLI flag) and which branches it fires on.
Follow-up to #52 (v1.23.2), which added a non-blocking advisory:⚠️ when a pending minor lacks a
forge-next-prep --promotion-statusprints a## vX.Y.0entry inorigin/dev's CHANGELOG.This issue tracks the blocking variant — making a missing entry actually fail promotion (e.g. a
changelog_entrypre-commit step onrelease/*branches, or a non-zero exit from a new--require-changelogflag).Why separate / why MINOR: a new gate is a backward-incompatible behavior change for consumers (a new way for their pipeline to fail) → MINOR per CLAUDE.md semver policy. The advisory shipped as a patch; the gate needs a minor.
Spec: docs/release-process.md §5 (CHANGELOG at release) — currently documents the advisory; promote to a hard rule when this lands.
Requires: a decision on the gate surface (pre-commit step vs CLI flag) and which branches it fires on.