diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 2490aac..889186a 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -40,7 +40,7 @@ body:
id: version
attributes:
label: ContextForge version
- placeholder: "0.4.2"
+ placeholder: "0.4.2.post1"
validations:
required: true
- type: input
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ce3f3cc..54b2d9e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
tag:
- description: Existing signed annotated tag to publish (for example v0.4.2)
+ description: Existing signed annotated tag to publish (for example v0.4.2.post1)
required: true
type: string
@@ -49,7 +49,7 @@ jobs:
run: |
case "$TAG" in
v[0-9]*.[0-9]*.[0-9]*) ;;
- *) echo "tag must match vX.Y.Z" >&2; exit 1 ;;
+ *) echo "tag must match vX.Y.Z or a PEP 440 post release such as vX.Y.Z.postN" >&2; exit 1 ;;
esac
test "$(git cat-file -t "refs/tags/$TAG")" = "tag"
test "$(git rev-parse "$TAG^{}")" = "$GITHUB_SHA"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9c1373..7f8db23 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,11 +2,20 @@
All notable changes to this project will be documented in this file.
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
-and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
+Feature releases follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
+and Python distribution versions follow PEP 440.
## [Unreleased]
+## [0.4.2.post1] - 2026-08-21
+
+### Fixed
+
+- Made the CLI help regression validation insensitive to ANSI terminal styling
+ so the same documented options are verified consistently on Linux and
+ Windows CI runners.
+
## [0.4.2] - 2026-08-21
### Added
diff --git a/README.md b/README.md
index 2c78936..d363f97 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
ContextForge
@@ -28,10 +28,10 @@ commands.
> [!IMPORTANT]
-> ContextForge is pre-alpha software. Version `0.4.2` is the first public-release
-> candidate. Discovery benchmarking is experimental and its results should be
-> reviewed alongside the recorded provider, model, configuration, and source
-> snapshot.
+> ContextForge is pre-alpha software. Version `0.4.2.post1` is the corrected
+> first public-release candidate. Discovery benchmarking is experimental and
+> its results should be reviewed alongside the recorded provider, model,
+> configuration, and source snapshot.
## Why ContextForge
diff --git a/ROADMAP.md b/ROADMAP.md
index 4353776..41ec208 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -55,7 +55,10 @@ This roadmap describes broad milestones only. It does not promise dates.
fixed source, index, model, and context-window provenance.
- [x] Add locked distribution builds, clean-install validation, SBOM generation,
Trusted Publishing workflows, and public contribution/security policies.
-- [ ] Publish the reviewed signed release through TestPyPI and PyPI.
+- [x] Correct ANSI-sensitive CLI help validation for consistent Linux and
+ Windows release CI.
+- [ ] Publish the reviewed signed `v0.4.2.post1` release through TestPyPI and
+ PyPI.
## Later
diff --git a/docs/RELEASE_CHECKLIST.md b/docs/RELEASE_CHECKLIST.md
index 539e817..2c0f5a2 100644
--- a/docs/RELEASE_CHECKLIST.md
+++ b/docs/RELEASE_CHECKLIST.md
@@ -97,7 +97,8 @@ uv run contextforge benchmark discovery 'C:\Repositories' `
- [ ] Merge the reviewed release pull request from `dev` into `main`.
- [ ] Verify the exact merge commit contains the intended version and changelog.
-- [ ] Create a signed annotated `vX.Y.Z` tag on that exact commit.
+- [ ] Create a signed annotated `vX.Y.Z` tag on that exact commit, or
+ `vX.Y.Z.postN` for a PEP 440 post release.
- [ ] Push the tag without rewriting earlier tags.
- [ ] Synchronize `dev` with the released `main`.
diff --git a/src/contextforge/_metadata.py b/src/contextforge/_metadata.py
index 5a7dd42..ccef8fd 100644
--- a/src/contextforge/_metadata.py
+++ b/src/contextforge/_metadata.py
@@ -3,4 +3,4 @@
APP_NAME = "ContextForge"
APP_SLUG = "contextforge"
APP_TAGLINE = "Build bounded, reviewable repository context for coding agents."
-__version__ = "0.4.2"
+__version__ = "0.4.2.post1"
diff --git a/tests/test_openai_compatible.py b/tests/test_openai_compatible.py
index 411990a..5aab9ca 100644
--- a/tests/test_openai_compatible.py
+++ b/tests/test_openai_compatible.py
@@ -6,6 +6,7 @@
from typing import Any, Literal
import pytest
+from click import unstyle
from pydantic import BaseModel, ConfigDict
from typer.testing import CliRunner
@@ -658,10 +659,11 @@ def test_cli_help_and_provider_selection_include_base_url(tmp_path: Path) -> Non
)
assert help_result.exit_code == 0
- assert "--base-url" in help_result.output
- assert "--request-timeout" in help_result.output
- assert "--context-window" in help_result.output
- assert "--max-output-tokens" in help_result.output
+ help_output = unstyle(help_result.output)
+ assert "--base-url" in help_output
+ assert "--request-timeout" in help_output
+ assert "--context-window" in help_output
+ assert "--max-output-tokens" in help_output
assert selected.exit_code == 1
assert "OpenAI-compatible base URL must be an HTTP URL" in selected.output