From 9466083f05307c145a8f087af3135720734f8c28 Mon Sep 17 00:00:00 2001 From: Andrei Besleaga <33538982+andreibesleaga@users.noreply.github.com> Date: Thu, 29 Oct 2026 17:42:10 +0200 Subject: [PATCH 1/2] Remove pre-1.0.0 wording from README and CHANGELOG with the tests that pin it --- CHANGELOG.md | 4 ++-- README.md | 4 +--- tests/test_ci_workflows.py | 4 ++-- tests/test_newcomer_surface.py | 7 +++++++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94efeb5..c54f38d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ implements (`SPEC_VERSION`; README, "Version"). The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions use PEP 440 spelling: a release is spelled as in SemVer (`1.0.0`), a release candidate -differently (SemVer's `1.0.0-rc.7` is `1.0.0rc7` here). +differently (SemVer's `1.1.0-rc.1` is `1.1.0rc1` here). ## [Unreleased] @@ -38,7 +38,7 @@ A patch of the package. Specification `1.0.0` is unchanged (README, "Version"). ## [1.0.0] - 2026-10-14 -### Upgrading from 1.0.0rc7 +### Changes in 1.0.0 The package follows specification `1.0.0`. `pip install agentic-system-core` installs it without `--pre`, and `agsc --version` prints `agsc 1.0.0 (Python package; specification diff --git a/README.md b/README.md index be995be..dc60fd7 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,7 @@ pip install agentic-system-core ``` This installs the latest release. A release candidate of a later version is -installed only when asked for, with `--pre` or by naming its version. The two -`0.0.x` versions on PyPI only reserved the name, contain no code and are yanked, -so pip never picks them. +installed only when asked for, with `--pre` or by naming its version. Python 3.9 or newer; every release is tested on 3.9, 3.13 and 3.14. Python 3.9 reached its end of life in October 2025 and is still supported by this release. diff --git a/tests/test_ci_workflows.py b/tests/test_ci_workflows.py index 521d9b8..ef43274 100644 --- a/tests/test_ci_workflows.py +++ b/tests/test_ci_workflows.py @@ -174,12 +174,12 @@ def test_the_release_runs_the_test_lane_at_the_derived_engine_tag(): @pytest.mark.skipif(sys.version_info < (3, 11), reason="the release step reads pyproject.toml " "with tomllib, which Python 3.11 and later ship") @pytest.mark.parametrize("version, tag, engine", [ - ("1.0.0rc7", "v1.0.0rc7", "v1.0.0-rc.7"), + ("1.2.0rc1", "v1.2.0rc1", "v1.2.0-rc.1"), ("1.0.0", "v1.0.0", "v1.0.0"), ("1.0.0.post1", "v1.0.0.post1", "v1.0.0"), ("1.0.1", "v1.0.1", "v1.0.1"), ("1.1.0rc2.post3", "v1.1.0rc2.post3", "v1.1.0-rc.2"), - ("1.0.0", "v1.0.0rc7", None), + ("1.0.0", "v1.0.0rc1", None), ("1.0.0a1", "v1.0.0a1", None), ("1.0.0.dev1", "v1.0.0.dev1", None), ("1.0", "v1.0", None), diff --git a/tests/test_newcomer_surface.py b/tests/test_newcomer_surface.py index 7c92cdd..0819247 100644 --- a/tests/test_newcomer_surface.py +++ b/tests/test_newcomer_surface.py @@ -66,6 +66,13 @@ def test_a_final_version_installs_with_a_plain_pip_install(): assert not re.search(r"\b\d+\.\d+\.\d+rc\d+\b", text), "the README names a release-candidate version" +def test_the_public_text_names_no_pre_release_history(): + for name in ("README.md", "CHANGELOG.md"): + text = (ROOT / name).read_text(encoding="utf-8") + assert "0.0.x" not in text, name + assert not re.search(r"1\.0\.0-?rc\.?\d", text), name + + CHANGELOG_URL = "https://github.com/andreibesleaga/agentic-system-core-python/blob/main/CHANGELOG.md" From 147935703ee86ac2c860bd8918246d55b784d2f3 Mon Sep 17 00:00:00 2001 From: Andrei Besleaga <33538982+andreibesleaga@users.noreply.github.com> Date: Thu, 29 Oct 2026 17:42:10 +0200 Subject: [PATCH 2/2] Document rollback of a bad PyPI release in MAINTAINING --- docs/MAINTAINING.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/MAINTAINING.md b/docs/MAINTAINING.md index d9f18a5..2eccd33 100644 --- a/docs/MAINTAINING.md +++ b/docs/MAINTAINING.md @@ -85,6 +85,12 @@ before this package's tag is pushed; it exists for every engine release, while a specification tag exists only when the specification moved. The version in `pyproject.toml` must be the engine's version in PEP 440 spelling; the engine's `tools/release` checks that the two agree. +To roll back a bad release, yank that version on PyPI (project page, "Manage", +the release, "Options", "Yank"): pip then stops choosing it, but anyone who pins it still gets it. Never +delete it. Fix the cause and release the next patch version through the same lane +(for example `1.0.2` after a bad `1.0.1`), and add a line to `CHANGELOG.md` under the +new version that names the yanked one and why. + Before tagging, write the new version in every place that carries it: `pyproject.toml`, `__version__` and `SEMVER_VERSION` in `src/agentic_system_core/__init__.py`, the "Version" section of the README, and a heading in `CHANGELOG.md`. `tests/test_cli.py`