Skip to content

Commit 30d2cf3

Browse files
authored
fix(release): correct 0.62.0 release notes (#240)
* fix(release): correct 0.62.0 release notes * docs(release): clarify stale version normalization
1 parent b37054e commit 30d2cf3

6 files changed

Lines changed: 22 additions & 5 deletions

File tree

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,8 @@ It speaks the [**Agent Client Protocol (ACP)**](https://github.com/agentclientpr
5252

5353
## 🆕 What's New in 0.62.0
5454

55-
- **A faster, steadier interactive prompt.** Slash commands and file mentions now share one completion engine, workspace indexing runs asynchronously, prompt resources are isolated per session, and awaited lifecycle cleanup prevents stale background work. The prompt also stays within the terminal height and avoids queued-input ghost borders.
56-
- **More provider login options with safer persistence.** Pythinker adds OAuth login for xAI Grok, GitHub Copilot, DigitalOcean Gradient AI, and Snowflake Cortex, backed by a provider-neutral models.dev catalog with curated fallbacks. Credential changes are saved atomically and rolled back if persistence fails.
57-
- **Cleaner reasoning and agent activity.** Reasoning summaries no longer expose Markdown delimiters or duplicate terminal rows after refocus, while individual agents and parallel `RunAgents` calls render as a compact, payload-free activity tree with correctly nested subagent work.
55+
- **Updates surface during long-running sessions.** Pythinker now checks periodically for newly available releases, shows each new update notice once per session, and bounds every check with a watchdog so a stalled attempt cannot prevent later retries.
56+
- **Repository-local agent workflows stay local.** This checkout now treats its root `.agents/` directory as local agent configuration instead of version-controlled project content.
5857

5958
Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.62.0`, or use the native installer for your platform from the [Releases page](https://github.com/Pythoughts-labs/pythinker-code/releases/latest).
6059

docs/en/release-notes/breaking-changes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ This page documents breaking changes in Pythinker Code releases and provides mig
66

77
## 0.62.0 (2026-07-22)
88

9+
No breaking changes.
10+
911
## 0.61.0 (2026-07-22)
1012

1113
Shell-mode `!` commands now run through the configured shell (`<shell> -c`, or PowerShell

packages/linux-installer/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ file at `/usr/share/doc/pythinker-code/LICENSE`.
3636
## Build
3737

3838
```sh
39-
bash packages/linux-installer/build.sh 0.60.0
39+
bash packages/linux-installer/build.sh 0.62.0
4040
```
4141

4242
Outputs to `dist/`:

scripts/release.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,10 @@ def promote_changelog(path: Path, version: str, *, release_date: str) -> None:
132132

133133

134134
def rewrite_version_strings(text: str, *, old: str, new: str) -> str:
135-
"""Replace ONLY release-pattern occurrences of `old` with `new`.
135+
"""Update release-pattern versions to `new`.
136+
137+
Most patterns replace `old`; canonical version-bearing commands are
138+
normalized even when their current version is already stale.
136139
137140
Deliberately skips `--version <old>` flag examples (the documented
138141
§3 exception) so they stay shape-only — the lockstep test enforces this.
@@ -145,6 +148,10 @@ def rewrite_version_strings(text: str, *, old: str, new: str) -> str:
145148
(rf"(pythinker-code_){o}(_[a-z0-9]+\.deb)", rf"\g<1>{new}\g<2>"),
146149
(rf"(pythinker-code-){o}(\.[a-z0-9_]+\.rpm)", rf"\g<1>{new}\g<2>"),
147150
(rf"(releases/download/v){o}(/)", rf"\g<1>{new}\g<2>"),
151+
(
152+
r"(bash packages/linux-installer/build\.sh )\d+\.\d+\.\d+",
153+
rf"\g<1>{new}",
154+
),
148155
]
149156
for pat, repl in patterns:
150157
text = re.sub(pat, repl, text)

tests/test_release_py.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ def test_rewrite_version_strings_targets_only_release_patterns() -> None:
250250
"pythinker-code_0.27.0_amd64.deb\n"
251251
"pythinker-code-0.27.0.x86_64.rpm\n"
252252
"releases/download/v0.27.0/pythinker-code_0.27.0_arm64.deb\n"
253+
"bash packages/linux-installer/build.sh 0.26.0\n"
253254
"bash -s -- --version 0.27.0\n" # flag example: MUST be preserved
254255
)
255256
out = release_tool.rewrite_version_strings(text, old="0.27.0", new="0.28.0")
@@ -259,6 +260,7 @@ def test_rewrite_version_strings_targets_only_release_patterns() -> None:
259260
assert "pythinker-code_0.28.0_amd64.deb" in out
260261
assert "pythinker-code-0.28.0.x86_64.rpm" in out
261262
assert "releases/download/v0.28.0/pythinker-code_0.28.0_arm64.deb" in out
263+
assert "bash packages/linux-installer/build.sh 0.28.0" in out
262264
# the flag example is the documented exception — untouched
263265
assert "--version 0.27.0" in out
264266
assert "--version 0.28.0" not in out

tests/test_version_lockstep.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,13 @@ def test_asset_names_match_version_across_files() -> None:
8888
assert found == VERSION, f"{path}: {found} != {VERSION}"
8989

9090

91+
def test_linux_installer_build_example_matches_version() -> None:
92+
readme = (REPO_ROOT / "packages" / "linux-installer" / "README.md").read_text(encoding="utf-8")
93+
versions = re.findall(r"bash packages/linux-installer/build\.sh (\d+\.\d+\.\d+)", readme)
94+
assert versions, "missing Linux installer build example"
95+
assert versions == [VERSION]
96+
97+
9198
def test_no_hardcoded_version_badge_in_readme() -> None:
9299
# Guard the contract's "badges" clause: the only version-bearing badge is the
93100
# shields.io-live PyPI badge (img.shields.io/pypi/v/...). Fail if a future edit

0 commit comments

Comments
 (0)