From b2bf98af136405da70b848b3f2e41b5cf4160484 Mon Sep 17 00:00:00 2001 From: mohamed-elkholy95 Date: Mon, 1 Jun 2026 08:56:19 -0400 Subject: [PATCH] docs(changelog): fold pending notes into 0.28.0 + document migration The judge subagent, default-prompt redesign, and read-only-profile network/config-injection (RCE) guards merged to main in #43, but their CHANGELOG entries stayed under `## Unreleased` while `## 0.28.0` already existed (release.py promoted it during prep). Tagging v0.28.0 as-is would publish release notes that omit them. Move those entries into the 0.28.0 section across both lockstep changelog files as narrative bullets matching the section style; document the `.pythinker/AGENTS.md` loading change as a scoped breaking change with migration guidance in breaking-changes.md; and tighten the security bullet to cover the `git -c`/`--config-env`/`--exec-path` block. Also drop the now-stale `integrations.md` entry from the old-owner guard's skip_files (its old-owner reference was removed in #44). No shipped-code paths change, so changelog-entry-required exempts this PR and the emptied `## Unreleased` is intentional. --- CHANGELOG.md | 11 +++-------- docs/en/release-notes/breaking-changes.md | 4 +++- docs/en/release-notes/changelog.md | 3 +++ tests/test_installation_docs.py | 3 +-- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5a56aa1..d23f931a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,14 +15,6 @@ GitHub Releases page; `0.8.0` is the new starting line. ## Unreleased -### Changed - -- **`.pythinker/AGENTS.md` is no longer loaded as project instructions.** Only `AGENTS.md`/`agents.md` from the project root down to the working directory are merged. Move any instructions kept solely in `.pythinker/AGENTS.md` to a root or directory-level `AGENTS.md`. - -### Security - -- **Read-only subagent profiles now block network shell commands.** The `read_only`/`plan`/`review`/`verify` permission profiles deny `curl`/`wget`/`ssh`/`git fetch` and similar network clients, so a read-only agent's no-web-tools intent cannot be bypassed through the Shell tool. - ## 0.28.0 (2026-05-31) ### What changed in this release @@ -35,6 +27,9 @@ GitHub Releases page; `0.8.0` is the new starting line. - **Redesigned startup welcome banner.** The banner now uses a cleaner footer-chip layout: the "What's new / Update available" chip sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator. The robot art and palette are unchanged. - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to the terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support that strips color cleanly — so output stays readable in CI logs, SSH panes, and bare terminals. - **Windows updates avoid encoded PowerShell.** Native updates now launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus command-line heuristic false positives. Windows bootstrap installs use visible `/SILENT` progress instead of fully suppressed setup, and the installer build signs bundled PE files plus Inno's setup/uninstaller/temp copies when signing credentials are configured. +- **New `judge` subagent and redesigned default prompts.** Adds an independent LLM-as-judge quality-gate subagent — a cheap single spot-checking pass for high-stakes deliverables, after deterministic gates — and rewrites the default agent, plan, and system prompts for clearer, more efficient guidance. +- **`.pythinker/AGENTS.md` is no longer loaded as project instructions.** Only `AGENTS.md`/`agents.md` from the project root down to the working directory are merged. Move any instructions kept solely in `.pythinker/AGENTS.md` to a root or directory-level `AGENTS.md` (see breaking changes). +- **Read-only subagent profiles block network and git config-injection shell commands.** The `read_only`/`plan`/`review`/`verify` permission profiles now deny network clients (`curl`/`wget`/`ssh`/`git fetch`) and unsafe `git -c`/`--config-env`/`--exec-path` options that can execute arbitrary commands (for example via `core.pager`/`core.sshCommand`), closing a Shell-tool bypass of a read-only agent's no-web-tools intent. Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your OS (see the README install table). diff --git a/docs/en/release-notes/breaking-changes.md b/docs/en/release-notes/breaking-changes.md index fb9e872e..5bb208da 100644 --- a/docs/en/release-notes/breaking-changes.md +++ b/docs/en/release-notes/breaking-changes.md @@ -6,7 +6,9 @@ This page documents breaking changes in Pythinker Code releases and provides mig ## 0.28.0 (2026-05-31) -No breaking changes. This release is compatible with 0.27.0 user configuration, native installs, and session data. The repository's move to the Pythoughts-labs GitHub org is handled transparently — the default `/feedback` repository auto-migrates and download/update URLs resolve to the new org. +**`.pythinker/AGENTS.md` is no longer loaded as project instructions.** Pythinker now merges only `AGENTS.md`/`agents.md` files from the project root down to the working directory. If you kept instructions solely in `.pythinker/AGENTS.md`, move them to a root or directory-level `AGENTS.md` or they will no longer apply. No action is needed if you did not use `.pythinker/AGENTS.md`. + +Otherwise this release is compatible with 0.27.0 user configuration, native installs, and session data. The repository's move to the Pythoughts-labs GitHub org is handled transparently — the default `/feedback` repository auto-migrates and download/update URLs resolve to the new org. ## 0.27.0 (2026-05-31) diff --git a/docs/en/release-notes/changelog.md b/docs/en/release-notes/changelog.md index 45745662..209b3f8c 100644 --- a/docs/en/release-notes/changelog.md +++ b/docs/en/release-notes/changelog.md @@ -29,6 +29,9 @@ GitHub Releases page; `0.8.0` is the new starting line. - **Redesigned startup welcome banner.** The banner now uses a cleaner footer-chip layout: the "What's new / Update available" chip sits on the panel's bottom border, the headline/strapline/help lines align beside the robot logo, and the info grid drops its vertical separator. The robot art and palette are unchanged. - **Terminal-aware rendering for minimal and CI terminals.** The shell UI adapts to the terminal — ASCII glyph fallbacks for `TERM=dumb` and legacy Windows code pages, reduced-motion mode (`PYTHINKER_REDUCED_MOTION`), and `NO_COLOR`/`CLICOLOR` support that strips color cleanly — so output stays readable in CI logs, SSH panes, and bare terminals. - **Windows updates avoid encoded PowerShell.** Native updates now launch the signed Inno installer directly with Restart Manager flags instead of a `powershell.exe -EncodedCommand` helper, reducing antivirus command-line heuristic false positives. Windows bootstrap installs use visible `/SILENT` progress instead of fully suppressed setup, and the installer build signs bundled PE files plus Inno's setup/uninstaller/temp copies when signing credentials are configured. +- **New `judge` subagent and redesigned default prompts.** Adds an independent LLM-as-judge quality-gate subagent — a cheap single spot-checking pass for high-stakes deliverables, after deterministic gates — and rewrites the default agent, plan, and system prompts for clearer, more efficient guidance. +- **`.pythinker/AGENTS.md` is no longer loaded as project instructions.** Only `AGENTS.md`/`agents.md` from the project root down to the working directory are merged. Move any instructions kept solely in `.pythinker/AGENTS.md` to a root or directory-level `AGENTS.md` (see breaking changes). +- **Read-only subagent profiles block network and git config-injection shell commands.** The `read_only`/`plan`/`review`/`verify` permission profiles now deny network clients (`curl`/`wget`/`ssh`/`git fetch`) and unsafe `git -c`/`--config-env`/`--exec-path` options that can execute arbitrary commands (for example via `core.pager`/`core.sshCommand`), closing a Shell-tool bypass of a read-only agent's no-web-tools intent. Upgrade with `pythinker update`, `pip install --upgrade pythinker-code==0.28.0`, or use the native installer for your OS (see the README install table). diff --git a/tests/test_installation_docs.py b/tests/test_installation_docs.py index e0f3ef4b..23bfde5c 100644 --- a/tests/test_installation_docs.py +++ b/tests/test_installation_docs.py @@ -213,12 +213,11 @@ def test_no_old_repo_owner_references() -> None: ".pytest_cache", } # Excluded paths that legitimately reference old owner for non-main-repo projects - # (pythinker-home, pythinker-agent-rs, zsh-pythinker-code) or are this guard itself. + # (pythinker-home, pythinker-agent-rs) or are this guard itself. skip_files = { ROOT / "tests" / "test_installation_docs.py", ROOT / ".github" / "workflows" / "dispatch-pythinker-home-sync.yml", ROOT / "docs" / "en" / "customization" / "wire-mode.md", - ROOT / "docs" / "en" / "guides" / "integrations.md", } violations: list[str] = [] for path in ROOT.rglob("*"):