Heading matching in the changelog check and release gate recognizes plain X.Y.Z only. Two failure modes: releasing 1.2.3rc1 never matches its own heading (forces the rename path), and a '## [0.2.0rc1]' heading falsely satisfies the gate for 0.2.0 (unanchored match). Anchor the version match and accept PEP 440 pre/post/dev suffixes.
Heading matching in the changelog check and release gate recognizes plain X.Y.Z only. Two failure modes: releasing 1.2.3rc1 never matches its own heading (forces the rename path), and a '## [0.2.0rc1]' heading falsely satisfies the gate for 0.2.0 (unanchored match). Anchor the version match and accept PEP 440 pre/post/dev suffixes.