Three issues fixed:
1. **Version tags**: No tags existed despite 6 release commits. Created
proper tags (v0.1.0 through v0.4.0) at the correct release commits.
Without tags, git-cliff always returned the initial version (0.1.0),
so every release commit said "v0.1.0" and the version never advanced.
2. **cliff.toml preprocessor bug**: The pattern `^DEVX-\d+\s+` didn't
match the actual commit format `DEVX-N: feat: ...` (missing colon).
Fixed to `^DEVX-\d+:\s+`. Also added `refactor_always_bump_patch`
so structural refactors that touch src/ or pyproject.toml trigger
a patch release.
3. **Release script recovery**: If HEAD is a release commit but the tag
doesn't exist (e.g., tag push failed in CI), the script now creates
and pushes the tag instead of skipping. This recovers from the common
failure mode where the release commit was pushed but the tag was not.
Also fixed __init__.py version to 0.4.0 and regenerated CHANGELOG.md
with correct version sections.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>