openclaw/src
Watchtower dcb525de50 fix(pi-embedded-runner): gate silent-error retry on replay safety
Per @steipete review on #68310: the silent-error retry must not fire when the
failed attempt already recorded potential side effects (messaging tool sent,
cron add, or a mutating tool call that wasn't round-tripped as replay-safe).
Otherwise resubmission can duplicate those actions.

Adds `!attempt.replayMetadata.hadPotentialSideEffects` to the retry condition,
mirroring the gate used by resolveEmptyResponseRetryInstruction and the
planning-only / reasoning-only retry resolvers in run/incomplete-turn.ts.

Adds a new negative regression test:
  "does not retry when the failed attempt recorded side effects"
which reproduces the reviewer's repro — stopReason=error + output=0 + empty
content, but replayMetadata={hadPotentialSideEffects: true, replaySafe: false}.
Expected: no retry, surfaces incomplete-turn error. Confirmed locally.
2026-04-21 00:43:50 +01:00
..
acp test: merge acp manager retry cases 2026-04-20 23:33:21 +01:00
agents fix(pi-embedded-runner): gate silent-error retry on replay safety 2026-04-21 00:43:50 +01:00
auto-reply test: share directive reply mock payloads 2026-04-20 22:51:16 +01:00
bindings
bootstrap
canvas-host build: stabilize a2ui bundle inputs 2026-04-20 20:28:48 +01:00
channels test: decouple outbound target tests from bundled plugins 2026-04-20 23:14:50 +01:00
chat
cli fix(gateway): prevent 1006 errors from race condition in WebSocket upgrade (#43392) 2026-04-20 16:29:14 -07:00
commands providers: default Moonshot to Kimi 2.6 (#69477) 2026-04-20 16:15:29 -07:00
compat
config refactor: share channel doctor alias normalization 2026-04-20 23:34:19 +01:00
context-engine Context engine/plugins: accept third-party engines whose info.id differs from registered slot id (#66678) 2026-04-20 11:26:38 -07:00
cron test: decouple outbound target tests from bundled plugins 2026-04-20 23:14:50 +01:00
daemon test: share execFile builtin mock 2026-04-20 19:20:46 +01:00
docs
flows test: share channel setup fixtures 2026-04-20 19:32:19 +01:00
gateway fix(gateway): prevent 1006 errors from race condition in WebSocket upgrade (#43392) 2026-04-20 16:29:14 -07:00
hooks perf(gateway): streamline startup sidecars 2026-04-20 20:52:42 +01:00
i18n
image-generation test: share provider allowlist fallback setup 2026-04-20 22:21:34 +01:00
infra test: dedupe reconnect drain fixtures 2026-04-21 00:24:17 +01:00
interactive
link-understanding
logging
markdown
mcp perf(test): flush mcp notifications directly 2026-04-20 20:51:13 +01:00
media test: use synthetic media channel fixtures 2026-04-20 23:59:39 +01:00
media-generation refactor: share media generation failure recording 2026-04-20 14:34:01 +01:00
media-understanding providers: default Moonshot to Kimi 2.6 (#69477) 2026-04-20 16:15:29 -07:00
memory-host-sdk refactor: share ssrf base url policy 2026-04-20 23:15:58 +01:00
music-generation refactor: share media generation failure recording 2026-04-20 14:34:01 +01:00
node-host test: merge system run path binding cases 2026-04-20 23:34:59 +01:00
pairing test: merge pairing allowlist read coverage 2026-04-20 21:09:30 +01:00
plugin-sdk refactor: share env secret ref allowlist check 2026-04-20 23:42:11 +01:00
plugins refactor: dedupe install scan skill spec 2026-04-21 00:32:42 +01:00
process
proxy-capture perf(test): avoid proxy runtime dynamic import 2026-04-20 21:02:13 +01:00
realtime-transcription
realtime-voice
routing refactor: share route binding normalization 2026-04-20 13:21:12 +01:00
scripts test: speed changed lanes and channel contracts 2026-04-20 20:53:38 +01:00
secrets test(ci): reduce channel contract import cost 2026-04-21 00:40:07 +01:00
security perf(test): trim test teardown waits 2026-04-20 20:30:16 +01:00
sessions
shared refactor: share message content block visitor 2026-04-20 14:53:42 +01:00
status perf(test): narrow status message runtime 2026-04-20 14:27:22 +01:00
tasks tasks: add detached task recovery hook before markLost (#69313) 2026-04-21 00:58:20 +02:00
terminal refactor(terminal): optimize log sanitization (#67205) 2026-04-20 00:21:32 +03:00
test-helpers
test-utils test: share generation live env helper 2026-04-21 00:24:18 +01:00
tts perf(test): trim test teardown waits 2026-04-20 20:30:16 +01:00
tui test: share tui session action setup 2026-04-20 19:14:01 +01:00
types
utils refactor: share conversation target normalization 2026-04-19 05:02:03 +01:00
video-generation test: share video provider options fixture 2026-04-20 19:04:47 +01:00
web
web-fetch
web-search
wizard
browser-lifecycle-cleanup.test.ts
browser-lifecycle-cleanup.ts
channel-web.ts
docker-build-cache.test.ts
docker-image-digests.test.ts
docker-setup.e2e.test.ts
dockerfile.test.ts
entry.respawn.test.ts
entry.respawn.ts
entry.test.ts
entry.ts perf(test): slim entry and chat tests 2026-04-20 19:55:44 +01:00
entry.version-fast-path.test.ts test: type version fast path commit resolver mock 2026-04-20 20:07:11 +01:00
entry.version-fast-path.ts perf(test): slim entry and chat tests 2026-04-20 19:55:44 +01:00
extensionAPI.ts
global-state.ts
globals.ts
index.test.ts
index.ts
install-sh-version.test.ts
library.test.ts
library.ts
logger.test.ts
logger.ts
logging.ts
param-key.ts
plugin-activation-boundary.test.ts perf(test): mock plugin activation manifest registry 2026-04-20 19:00:11 +01:00
poll-params.test.ts
poll-params.ts
polls.test.ts
polls.ts
runtime.ts
ui-app-settings.agents-files-refresh.test.ts
utils.test.ts
utils.ts
version.test.ts perf(test): reuse version fixture root 2026-04-20 19:02:32 +01:00
version.ts