From 28af6ec49d07c5dd22eca5eda57fdca6d131ea7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20TEKTA=C5=9E?= Date: Thu, 27 Aug 2026 03:36:11 +0300 Subject: [PATCH 1/4] chore: prepare 0.5.36 release notes --- .release-notes.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .release-notes.md diff --git a/.release-notes.md b/.release-notes.md new file mode 100644 index 0000000..990eb29 --- /dev/null +++ b/.release-notes.md @@ -0,0 +1,8 @@ +Empty-turn fail-safe release. + +- Distinguish a completed assistant message from a meaningful completed Loop turn instead of treating a timestamp-only blank reply as success. +- Count non-empty assistant text and tool/file/patch/artifact activity anywhere in the logical run as meaningful work, including tool-only runs with a blank final assistant tail. +- Refund a completed-but-empty logical run so it does not consume `runCount`, `--max-runs`, or normal success finalization/checkpoint behavior. +- Persist consecutive empty-turn state across reloads, retry one empty completion with bounded delay, then pause safely after the second consecutive empty turn with a visible warning instead of injecting prompts forever. +- Recover stale host `busy` state for already-completed empty turns so the fail-safe can finalize them rather than leaving the Loop stuck between busy and due states. +- Add focused regressions for blank/whitespace replies, tool activity, max-run refund/re-enable, bounded retry, fail-safe pause, successful streak reset, and generated-bundle parity; full Ubuntu/Windows CI, real-host, Goal coexistence, lifecycle, and single-file bundle gates are green on the feature head. \ No newline at end of file From 67e50483993e0fd737c7aae711e208d47781f75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20TEKTA=C5=9E?= Date: Thu, 27 Aug 2026 03:37:10 +0300 Subject: [PATCH 2/4] fix: support current stable README release marker --- .github/workflows/prepare-release-metadata.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release-metadata.yml b/.github/workflows/prepare-release-metadata.yml index fc3cb15..ef6f9e3 100644 --- a/.github/workflows/prepare-release-metadata.yml +++ b/.github/workflows/prepare-release-metadata.yml @@ -56,9 +56,12 @@ jobs: const readmePath = "README.md" const readme = fs.readFileSync(readmePath, "utf8") - const marker = /\*\*Current release: `[^`]+`\.\*\*/ - if (!marker.test(readme)) throw new Error("README current release marker not found") - fs.writeFileSync(readmePath, readme.replace(marker, `**Current release: \`${version}\`.**`)) + const marker = /((?:>\s*)?)\*\*Current(?: stable)? release: `[^`]+`\.\*\*/ + if (!marker.test(readme)) throw new Error("README current stable release marker not found") + fs.writeFileSync( + readmePath, + readme.replace(marker, (_match, prefix = "") => `${prefix}**Current stable release: \`${version}\`.**`), + ) NODE - name: Prepend changelog notes From e73aac9baa9c41ce8e0de1191de5afb565257b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20TEKTA=C5=9E?= Date: Thu, 27 Aug 2026 03:37:26 +0300 Subject: [PATCH 3/4] chore: rerun 0.5.36 metadata preparation --- .release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.release-notes.md b/.release-notes.md index 990eb29..562c288 100644 --- a/.release-notes.md +++ b/.release-notes.md @@ -5,4 +5,5 @@ Empty-turn fail-safe release. - Refund a completed-but-empty logical run so it does not consume `runCount`, `--max-runs`, or normal success finalization/checkpoint behavior. - Persist consecutive empty-turn state across reloads, retry one empty completion with bounded delay, then pause safely after the second consecutive empty turn with a visible warning instead of injecting prompts forever. - Recover stale host `busy` state for already-completed empty turns so the fail-safe can finalize them rather than leaving the Loop stuck between busy and due states. +- Keep release metadata automation compatible with the README's `Current stable release` marker so future release prep does not fail on the documented format. - Add focused regressions for blank/whitespace replies, tool activity, max-run refund/re-enable, bounded retry, fail-safe pause, successful streak reset, and generated-bundle parity; full Ubuntu/Windows CI, real-host, Goal coexistence, lifecycle, and single-file bundle gates are green on the feature head. \ No newline at end of file From a7fbe318f051ef377a52697ce8d3ea347bba1e37 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2026 00:37:37 +0000 Subject: [PATCH 4/4] chore: finalize 0.5.36 release metadata --- .release-notes.md | 9 --------- CHANGELOG.md | 12 ++++++++++++ README.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 16 insertions(+), 13 deletions(-) delete mode 100644 .release-notes.md diff --git a/.release-notes.md b/.release-notes.md deleted file mode 100644 index 562c288..0000000 --- a/.release-notes.md +++ /dev/null @@ -1,9 +0,0 @@ -Empty-turn fail-safe release. - -- Distinguish a completed assistant message from a meaningful completed Loop turn instead of treating a timestamp-only blank reply as success. -- Count non-empty assistant text and tool/file/patch/artifact activity anywhere in the logical run as meaningful work, including tool-only runs with a blank final assistant tail. -- Refund a completed-but-empty logical run so it does not consume `runCount`, `--max-runs`, or normal success finalization/checkpoint behavior. -- Persist consecutive empty-turn state across reloads, retry one empty completion with bounded delay, then pause safely after the second consecutive empty turn with a visible warning instead of injecting prompts forever. -- Recover stale host `busy` state for already-completed empty turns so the fail-safe can finalize them rather than leaving the Loop stuck between busy and due states. -- Keep release metadata automation compatible with the README's `Current stable release` marker so future release prep does not fail on the documented format. -- Add focused regressions for blank/whitespace replies, tool activity, max-run refund/re-enable, bounded retry, fail-safe pause, successful streak reset, and generated-bundle parity; full Ubuntu/Windows CI, real-host, Goal coexistence, lifecycle, and single-file bundle gates are green on the feature head. \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e1e3f16..a3d3405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.5.36 + +Empty-turn fail-safe release. + +- Distinguish a completed assistant message from a meaningful completed Loop turn instead of treating a timestamp-only blank reply as success. +- Count non-empty assistant text and tool/file/patch/artifact activity anywhere in the logical run as meaningful work, including tool-only runs with a blank final assistant tail. +- Refund a completed-but-empty logical run so it does not consume `runCount`, `--max-runs`, or normal success finalization/checkpoint behavior. +- Persist consecutive empty-turn state across reloads, retry one empty completion with bounded delay, then pause safely after the second consecutive empty turn with a visible warning instead of injecting prompts forever. +- Recover stale host `busy` state for already-completed empty turns so the fail-safe can finalize them rather than leaving the Loop stuck between busy and due states. +- Keep release metadata automation compatible with the README's `Current stable release` marker so future release prep does not fail on the documented format. +- Add focused regressions for blank/whitespace replies, tool activity, max-run refund/re-enable, bounded retry, fail-safe pause, successful streak reset, and generated-bundle parity; full Ubuntu/Windows CI, real-host, Goal coexistence, lifecycle, and single-file bundle gates are green on the feature head. + ## 0.5.35 - Treat OpenCode `session.status=retry` as authoritative provider ownership: retry and unreadable status can no longer age into idle and cause an overlapping Loop turn; a genuinely completed current assistant message can still release stale retry safely. diff --git a/README.md b/README.md index 9a4b17a..d05981e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ OpenCode Loop adds `/loop`, scheduled prompt/command/shell jobs, compact scheduling, verification/checkpoints, and the `opencode-loopd` background daemon. -> **Current stable release: `0.5.35`.** +> **Current stable release: `0.5.36`.** ## Install or update diff --git a/package-lock.json b/package-lock.json index a1fab2a..caf490d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bybrawe/opencode-loop", - "version": "0.5.35", + "version": "0.5.36", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bybrawe/opencode-loop", - "version": "0.5.35", + "version": "0.5.36", "license": "MIT", "bin": { "opencode-loop": "scripts/install-with-goals.mjs", diff --git a/package.json b/package.json index e8b6dea..6def286 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bybrawe/opencode-loop", - "version": "0.5.35", + "version": "0.5.36", "description": "Claude Code/Codex style /loop and experimental goal mode for OpenCode: heartbeat scheduler, idle-safe loops, scheduled commands, compact scheduling, verification, checkpoints, and persistent coding goals.", "type": "module", "main": "src/index.js",