From 65d440e6c180994c8cc20ba8bdf8a99293ba68d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20TEKTA=C5=9E?= Date: Sat, 22 Aug 2026 15:58:48 +0300 Subject: [PATCH 1/3] ci: prepare one-shot 0.5.35 release metadata --- .github/workflows/prep-release-0.5.35.yml | 55 +++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/prep-release-0.5.35.yml diff --git a/.github/workflows/prep-release-0.5.35.yml b/.github/workflows/prep-release-0.5.35.yml new file mode 100644 index 0000000..460e843 --- /dev/null +++ b/.github/workflows/prep-release-0.5.35.yml @@ -0,0 +1,55 @@ +name: One-shot prepare 0.5.35 release metadata + +on: + pull_request: + types: [opened, synchronize, reopened] + branches: [main] + +permissions: + contents: write + +jobs: + prepare: + if: github.head_ref == 'release/0.5.35-prep' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: release/0.5.35-prep + fetch-depth: 0 + persist-credentials: true + - uses: actions/setup-node@v6 + with: + node-version: '24' + cache: npm + - run: npm ci + - name: Update package, lock, README, and changelog + shell: bash + run: | + npm version 0.5.35 --no-git-tag-version + node <<'NODE' + const fs = require('fs') + const readmePath = 'README.md' + let readme = fs.readFileSync(readmePath, 'utf8') + readme = readme.replace('Current stable release: `0.5.34`', 'Current stable release: `0.5.35`') + fs.writeFileSync(readmePath, readme) + + const changelogPath = 'CHANGELOG.md' + let changelog = fs.readFileSync(changelogPath, 'utf8') + const marker = '# Changelog\n' + const entry = `\n## 0.5.35\n\n- 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.\n- Recover transient Loop-owned network/provider failures with bounded exponential backoff (5s to 60s), refund failed infrastructure attempts from \`runCount\`/\`lastRunAt\`, re-enable jobs that only hit \`--max-runs\` because of the failed attempt, and keep infrastructure failures separate from ordinary \`failureCount\`.\n- Add a two-minute watchdog for an explicitly stuck OpenCode retry, scoped only to a Loop-owned active turn: abort that owned retry, refund the logical run, and reschedule with backoff without touching unrelated foreground/user work. Successful normal turns reset the consecutive network-backoff counter.\n- Preserve plain \`/loop devam et\` as intentionally unlimited, while explicit completion-bounded idle loops such as \`bitene kadar\`, \`projeyi bitir\`, and \`until done\` now auto-pause only after two consecutive current assistant replies both report verified completion and no remaining work. Replies naming next/remaining work reset the terminal signal.\n- Make Turkish terminal/no-work detection Unicode-safe, expand outage/terminal regressions, keep the generated single-file stable bundle synchronized with modular source, and document retry, backoff, watchdog, and completion-bounded scheduling behavior in \`docs/SCHEDULING.md\`.\n` + if (!changelog.includes('## 0.5.35')) changelog = changelog.replace(marker, marker + entry) + fs.writeFileSync(changelogPath, changelog) + NODE + - name: Commit generated release metadata + shell: bash + run: | + git add package.json package-lock.json README.md CHANGELOG.md + if git diff --cached --quiet; then + echo 'Release metadata already prepared.' + exit 0 + fi + git config user.name 'OpenCode Loop CI' + git config user.email 'opencode-loop-ci@example.invalid' + git commit -m 'release: prepare 0.5.35' + git push origin HEAD:release/0.5.35-prep From e56d72cdca961de744432525c36295f1f6df8b9b Mon Sep 17 00:00:00 2001 From: OpenCode Loop CI Date: Sat, 22 Aug 2026 12:59:18 +0000 Subject: [PATCH 2/3] release: prepare 0.5.35 --- CHANGELOG.md | 8 ++++++++ README.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25bb2dd..e1e3f16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 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. +- Recover transient Loop-owned network/provider failures with bounded exponential backoff (5s to 60s), refund failed infrastructure attempts from `runCount`/`lastRunAt`, re-enable jobs that only hit `--max-runs` because of the failed attempt, and keep infrastructure failures separate from ordinary `failureCount`. +- Add a two-minute watchdog for an explicitly stuck OpenCode retry, scoped only to a Loop-owned active turn: abort that owned retry, refund the logical run, and reschedule with backoff without touching unrelated foreground/user work. Successful normal turns reset the consecutive network-backoff counter. +- Preserve plain `/loop devam et` as intentionally unlimited, while explicit completion-bounded idle loops such as `bitene kadar`, `projeyi bitir`, and `until done` now auto-pause only after two consecutive current assistant replies both report verified completion and no remaining work. Replies naming next/remaining work reset the terminal signal. +- Make Turkish terminal/no-work detection Unicode-safe, expand outage/terminal regressions, keep the generated single-file stable bundle synchronized with modular source, and document retry, backoff, watchdog, and completion-bounded scheduling behavior in `docs/SCHEDULING.md`. + ## 0.5.34 - Make plain `/loop ` the ergonomic unlimited idle-continuation form: when the assistant stops and the session is safely idle, Loop sends the prompt again. Add explicit `idle`, recurring `every `, and one-shot `after/in ` schedule grammar while preserving legacy duration-first commands. diff --git a/README.md b/README.md index 9cde09c..9a4b17a 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.34`.** +> **Current stable release: `0.5.35`.** ## Install or update diff --git a/package-lock.json b/package-lock.json index fc0ae4e..a1fab2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bybrawe/opencode-loop", - "version": "0.5.34", + "version": "0.5.35", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bybrawe/opencode-loop", - "version": "0.5.34", + "version": "0.5.35", "license": "MIT", "bin": { "opencode-loop": "scripts/install-with-goals.mjs", diff --git a/package.json b/package.json index 3a9d85e..be66720 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bybrawe/opencode-loop", - "version": "0.5.34", + "version": "0.5.35", "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", From 3b03398c17f6e2c5e69be33fb36d87fe78298e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20TEKTA=C5=9E?= Date: Sat, 22 Aug 2026 16:00:02 +0300 Subject: [PATCH 3/3] ci: remove one-shot 0.5.35 release helper --- .github/workflows/prep-release-0.5.35.yml | 55 ----------------------- 1 file changed, 55 deletions(-) delete mode 100644 .github/workflows/prep-release-0.5.35.yml diff --git a/.github/workflows/prep-release-0.5.35.yml b/.github/workflows/prep-release-0.5.35.yml deleted file mode 100644 index 460e843..0000000 --- a/.github/workflows/prep-release-0.5.35.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: One-shot prepare 0.5.35 release metadata - -on: - pull_request: - types: [opened, synchronize, reopened] - branches: [main] - -permissions: - contents: write - -jobs: - prepare: - if: github.head_ref == 'release/0.5.35-prep' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - with: - ref: release/0.5.35-prep - fetch-depth: 0 - persist-credentials: true - - uses: actions/setup-node@v6 - with: - node-version: '24' - cache: npm - - run: npm ci - - name: Update package, lock, README, and changelog - shell: bash - run: | - npm version 0.5.35 --no-git-tag-version - node <<'NODE' - const fs = require('fs') - const readmePath = 'README.md' - let readme = fs.readFileSync(readmePath, 'utf8') - readme = readme.replace('Current stable release: `0.5.34`', 'Current stable release: `0.5.35`') - fs.writeFileSync(readmePath, readme) - - const changelogPath = 'CHANGELOG.md' - let changelog = fs.readFileSync(changelogPath, 'utf8') - const marker = '# Changelog\n' - const entry = `\n## 0.5.35\n\n- 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.\n- Recover transient Loop-owned network/provider failures with bounded exponential backoff (5s to 60s), refund failed infrastructure attempts from \`runCount\`/\`lastRunAt\`, re-enable jobs that only hit \`--max-runs\` because of the failed attempt, and keep infrastructure failures separate from ordinary \`failureCount\`.\n- Add a two-minute watchdog for an explicitly stuck OpenCode retry, scoped only to a Loop-owned active turn: abort that owned retry, refund the logical run, and reschedule with backoff without touching unrelated foreground/user work. Successful normal turns reset the consecutive network-backoff counter.\n- Preserve plain \`/loop devam et\` as intentionally unlimited, while explicit completion-bounded idle loops such as \`bitene kadar\`, \`projeyi bitir\`, and \`until done\` now auto-pause only after two consecutive current assistant replies both report verified completion and no remaining work. Replies naming next/remaining work reset the terminal signal.\n- Make Turkish terminal/no-work detection Unicode-safe, expand outage/terminal regressions, keep the generated single-file stable bundle synchronized with modular source, and document retry, backoff, watchdog, and completion-bounded scheduling behavior in \`docs/SCHEDULING.md\`.\n` - if (!changelog.includes('## 0.5.35')) changelog = changelog.replace(marker, marker + entry) - fs.writeFileSync(changelogPath, changelog) - NODE - - name: Commit generated release metadata - shell: bash - run: | - git add package.json package-lock.json README.md CHANGELOG.md - if git diff --cached --quiet; then - echo 'Release metadata already prepared.' - exit 0 - fi - git config user.name 'OpenCode Loop CI' - git config user.email 'opencode-loop-ci@example.invalid' - git commit -m 'release: prepare 0.5.35' - git push origin HEAD:release/0.5.35-prep